Skip to content

Instantly share code, notes, and snippets.

@lptr
Created July 15, 2013 13:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lptr/5999894 to your computer and use it in GitHub Desktop.
Save lptr/5999894 to your computer and use it in GitHub Desktop.
package prezi.engine.render;
import prezi.engine.operations.ObjectOperation;
import prezi.engine.operations.AddObject;
import prezi.engine.operations.Operation;
import prezi.engine.operations.PropertyChange;
import prezi.engine.operations.RemoveObject;
import prezi.engine.operations.execution.OperationExecutor;
import createjs.easeljs.DisplayObject;
import createjs.easeljs.Shape;
import createjs.easeljs.Stage;
import haxe.Timer;
import js.Lib;
import prezi.engine.doc.SimpleDocument;
@:expose
class RenderTest implements OperationExecutor
{
static inline var FRAME_TIME = Std.int(1000 / 30);
var handlers:Hash<Operation->Void>;
var stage:Stage;
var document:SimpleDocument;
var renderPeers:Hash<Shape>;
public function new(canvas:js.HTMLCanvasElement)
{
stage = new Stage(canvas);
Lib.document.onkeydown = handleKeyDown;
var handlers = new Hash<Operation->Void>();
handlers.set(Type.getClassName(AddObject), handleAddObject);
handlers.set(Type.getClassName(RemoveObject), handleRemoveObject);
handlers.set(Type.getClassName(PropertyChange), handlePropertyChange);
document = new SimpleDocument();
document.chain(this);
renderPeers = new Hash<Shape>();
Timer.delay(render, FRAME_TIME);
}
public function execute(ops:Array<Operation>):Void
{
for (op in ops)
{
var handler = handlers.get(Type.getClassName(Type.getClass(op)));
if (handler != null)
{
handler(op);
}
}
render();
}
function handleAddObject(op:Operation)
{
var objectId = (cast op).getObjectId();
var renderPeer = new Shape();
stage.addChild(renderPeer);
renderPeers.set(objectId, renderPeer);
updatePeer(objectId, renderPeer);
}
function handleRemoveObject(op:Operation)
{
var objectId = (cast op).getObjectId();
var renderPeer = renderPeers.get(objectId);
if (renderPeer != null)
{
renderPeers.remove(objectId);
stage.removeChild(renderPeer);
}
}
function handlePropertyChange(op:Operation)
{
var objectId = (cast op).getObjectId();
var renderPeer = renderPeers.get(objectId);
if (renderPeer != null)
{
updatePeer(objectId, renderPeer);
}
}
private function updatePeer(objectId:String, renderPeer:Shape)
{
renderPeer.graphics.clear();
}
private function handleKeyDown(event:Dynamic)
{
var shape = new Shape();
}
private function render()
{
stage.update();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment