1     /**
2      * ...
3      * @author Matthew Casperson
4      */
5
6     package ;
7 8 import sandy.core.Scene3D;
9 import sandy.core.scenegraph.Camera3D;
10 import sandy.core.scenegraph.Group;
11 import sandy.view.ViewPort;
12 import flash.display.Sprite;
13 import flash.events.Event;
14 import flash.Lib;
15 16 class EngineManager extends Sprite
17 {
18 private var scene:Scene3D;
19 private var myCamera:Camera3D;
20 private var myRootGroup:Group;
21 private var lastFrame:Float;
22 private var newBaseObjects:List<BaseObject>;
23 private var removedBaseObjects:List<BaseObject>;
24 private var baseObjects:List<BaseObject>;
25 private var myApplicationManager:ApplicationManager;
26 27 public function new()
28 {
29 super();
30 31 newBaseObjects = new List<BaseObject>();
32 removedBaseObjects = new List<BaseObject>();
33 baseObjects = new List<BaseObject>();
34 35 myCamera = new Camera3D( 0, 0, -10);
36 myCamera.lookAt(0,0,0);
37 myCamera.viewport = new ViewPort( 400, 300 );
38 myRootGroup = new Group();
39 scene = new Scene3D( "scene", this, myCamera, myRootGroup );
40 41 lastFrame = Date.now().getTime();
42 43 myApplicationManager = new ApplicationManager(this);
44 myApplicationManager.startupApplicationManager();
45 46 addEventListener( Event.ENTER_FRAME, enterFrameHandler );
47 Lib.current.stage.addChild(this);
48 }
49 50 public var rootGroup(getRootGroup, null) : Group;
51 public var camera(getCamera, null) : Camera3D;
52 53 private function getRootGroup() : Group
54 {
55 return myRootGroup;
56 }
57 58 private function getCamera() : Camera3D
59 {
60 return myCamera;
61 }
62 63 private function enterFrameHandler( ?event : Event ) : Void
64 {
65 66 var thisFrame:Float = Date.now().getTime();
67 var dt:Float = (thisFrame - lastFrame) / 1000;
68 lastFrame = thisFrame;
69 70 addNewBaseObjects();
71 removeOldBaseObjects();
72 73 for (object in baseObjects)
74 object.enterFrame(dt);
75 76 scene.render();
77 }
78 79 public function addBaseObject(object:BaseObject) : Void
80 {
81 newBaseObjects.add(object);
82 }
83 84 public function removeBaseObject(object:BaseObject) : Void
85 {
86 removedBaseObjects.add(object);
87 }
88 89 private function addNewBaseObjects() : Void
90 {
91 for (object in newBaseObjects)
92 baseObjects.add(object);
93 94 newBaseObjects.clear();
95 }
96 97 private function removeOldBaseObjects() : Void
98 {
99 for (object in removedBaseObjects)
100 baseObjects.remove(object);
101 102 removedBaseObjects.clear();
103 }
104 105 static function main()
106 {
107 #if js
108 neash.Lib.Init("Container", 400, 400);
109 neash.Lib.Run();
110 #end
111 new EngineManager();
112 }
113 114 }
Top