package { import fr.seraf.wow.primitive.WOWPlane; import fr.seraf.wow.primitive.WSphere; import mx.collections.ArrayCollection; import org.papervision3d.materials.utils.MaterialsList; public class ApplicationManager { protected static const BALLS_COUNT:int = 10; protected static var instance:ApplicationManager = null; protected var balls:ArrayCollection = new ArrayCollection(); public static function get Instance():ApplicationManager { if (instance == null) instance = new ApplicationManager(); return instance; } public function ApplicationManager() { } public function startupApplicationManager():void { var materials2:MaterialsList = new MaterialsList(); materials2.addMaterial(ResourceManager.Wood_Tex, "Material01"); // floor var boxBoundingArea:WOWPlane = new WOWPlane(); boxBoundingArea.setPosition(0,500,1000); boxBoundingArea.fixed = true; new PhysicsMeshObject().startupPhysicsMeshObject(ResourceManager.PlaneXML, materials2, boxBoundingArea); createBalls(); } public function createBalls():void { var materials:MaterialsList = new MaterialsList(); materials.addMaterial(ResourceManager.Metal_Tex, "Material02"); for (var j:int = 0; j < balls.length; ++j) { (balls[j] as PhysicsMeshObject).shutdown(); } balls.removeAll(); var x:Number, y:Number, z:Number; for (var i:int = 0; i < BALLS_COUNT; ++i) { // doing this ensures that a shpere will drop onto another // creating a more interesting effect if (i % 2 == 0) { x = Math.random() * -800 + 400; y = Math.random() * -800 + 200; z = Math.random() * 800 + 100; } else { x = x + Math.random() * -60 + 30; y = y + 200; z = z + Math.random() * -60 + 30; } var boundingArea:WSphere = new WSphere(x, y, z, 75, true); balls.addItem(new PhysicsMeshObject().startupPhysicsMeshObject(ResourceManager.BallXML, materials, boundingArea)); } } public function drop():void { for (var j:int = 0; j < balls.length; ++j) { (balls[j] as PhysicsMeshObject).boundedArea.fixed = false; } } public function shutdown():void { } } }