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