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