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