Skip to content

AS3 MVC model library for defining application data with serialization and observing.

License

Notifications You must be signed in to change notification settings

justpinegames/Modi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Modi

Modi is a model library that was inspired by Core Data framework on MacOS. Core principle is seperating data from code. Model definitions are stored as YAML text files and are easy to read and maintain. Using simple Python script, data is transformed into Actionscript classes that are easy to monitor.

Requirements

Demo example

Demo/src/Player.yaml

Player:
    name: String
    commanders: ManagedArray<Commander>
    gold:
        type: Number
        default: 0
    selectedEntity: ManagedObjectId
    mode:
        values: [idle, walk, attack] #Enum.
        default: idle

Call to a python script inside of a command line

Modi.py Demo/src/Player.yaml -o Demo/src -p Models.Player

Created source code

Utilities

ManagedObjectContext

var managedObjectContext:ManagedObjectContext = new ManagedObjectContext();
var player:Player = managedObjectContext.createManagedObject(Player);
player.name = "Burek";
var playerCopy:Player = managedObjectContext.getManagedObjectById(player.contextId) as Player;

trace(playerCopy.name); /// Burek

YAMLSerializator

var serializator:YAMLSerializator = new YAMLSerializator();
player.serialize(serializator);

var stream:FileStream = new FileStream();
stream.open(new File(destination), FileMode.WRITE);
stream.writeUTFBytes(serializator.serializeData());
stream.close();

YAMLDeserializator

var stream:FileStream = new FileStream();
stream.open(new File(destination), FileMode.READ);
var data:String = stream.readUTFBytes(stream.bytesAvailable);
stream.close();

var deserializator:YAMLDeserializator = new YAMLDeserializator();
deserializator.deserializeData(data);
player.deserialize(deserializator);

Using event listeners

player.addEventListener(_Player.ATTRIBUTE_NAME, onNameChange);
player.name = "Sirnica";

function onNameChange(e:ManagedObjectEvent):void
{
    trace(e.type); /// name
    trace(e.newValue); /// Sirnica
    trace(e.oldValue); /// Burek
    trace(e.owner); /// [object Player]
}

About

AS3 MVC model library for defining application data with serialization and observing.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published