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 sandy.events.SandyEvent;
13    import sandy.parser.Parser;
14    import flash.display.Sprite;
15    import flash.events.Event;
16    import flash.Lib;
17
18    class EngineManager extends Sprite
19    {
20       private var scene:Scene3D;
21        private var myCamera:Camera3D;
22       private var myRootGroup:Group;
23       private var lastFrame:Float;
24       private var newBaseObjects:List<BaseObject>;
25       private var removedBaseObjects:List<BaseObject>;
26       private var baseObjects:List<BaseObject>;
27       private var myApplicationManager:ApplicationManager;
28       private var myResourceManager:ResourceManager;
29
30       public function new()
31       {
32          super();
33
34          newBaseObjects = new List<BaseObject>();
35          removedBaseObjects = new List<BaseObject>();
36          baseObjects = new List<BaseObject>();
37
38          myCamera = new Camera3D( 0, 0, -10);
39          myCamera.lookAt(0,0,0);
40          myCamera.viewport = new ViewPort( 400, 300 );
41          myRootGroup = new Group();
42          scene = new Scene3D( "scene", this, myCamera, myRootGroup );
43          Lib.current.stage.addChild(this);
44
45          lastFrame = Date.now().getTime();
46
47          myResourceManager = new ResourceManager(this);
48       }
49
50       public var rootGroup(getRootGroup, null) : Group;
51       public var camera(getCamera, null) : Camera3D;
52       public var resourceManager(getResourceManager, null) : ResourceManager;
53
54       private function getRootGroup() : Group
55       {
56          return myRootGroup;
57       }
58
59       private function getCamera() : Camera3D
60       {
61          return myCamera;
62       }
63
64       private function getResourceManager() : ResourceManager
65       {
66          return myResourceManager;
67       }
68
69       public function resourcesLoaded():Void
70       {
71          myApplicationManager = new ApplicationManager(this);
72          myApplicationManager.startupApplicationManager();
73
74          addEventListener( Event.ENTER_FRAME, enterFrameHandler );
75       }
76
77       public function resourceLoadError():Void
78       {
79          trace("An error was raised while loading the resources.");
80       }
81
82       private function enterFrameHandler( ?event : Event ) : Void
83       {
84
85          var thisFrame:Float = Date.now().getTime();
86          var dt:Float = (thisFrame - lastFrame) / 1000;
87          lastFrame = thisFrame;
88
89          addNewBaseObjects();
90          removeOldBaseObjects();
91
92          for (object in baseObjects)
93             object.enterFrame(dt);
94
95          scene.render();
96       }
97
98       public function addBaseObject(object:BaseObject) : Void
99       {
100         newBaseObjects.add(object);
101      }
102
103      public function removeBaseObject(object:BaseObject) : Void
104      {
105         removedBaseObjects.add(object);
106      }
107
108      private function addNewBaseObjects() : Void
109      {
110         for (object in newBaseObjects)
111            baseObjects.add(object);
112
113         newBaseObjects.clear();
114      }
115
116      private function removeOldBaseObjects() : Void
117      {
118         for (object in removedBaseObjects)
119            baseObjects.remove(object);
120
121         removedBaseObjects.clear();
122      }
123
124      static function main()
125       {
126         #if js
127            neash.Lib.Init("Container", 400, 400);
128            neash.Lib.Run();
129         #end
130           new EngineManager();
131       }
132
133   }

Top