home *** CD-ROM | disk | FTP | other *** search
- package core
- {
- import Box2D.Collision.Shapes.b2PolygonDef;
- import Box2D.Collision.b2AABB;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Dynamics.b2Body;
- import Box2D.Dynamics.b2BodyDef;
- import Box2D.Dynamics.b2DebugDraw;
- import Box2D.Dynamics.b2World;
- import core.events.CoreEvent;
- import core.objects.BallDef;
- import core.objects.Platform;
- import core.objects.PlatformDef;
- import core.objects.PlayerBall;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.EventDispatcher;
- import flash.media.SoundChannel;
- import flash.media.SoundTransform;
- import flash.utils.getTimer;
-
- public class CoreEngine
- {
-
- private static var instance:CoreEngine;
-
- public static const PLAYER_DEAD:String = "PlayerDead";
-
- public static const LEVEL_NEXT:String = "LevelNext";
-
-
- public var assets:CoreAssets;
-
- public var level:Level;
-
- public var playerBall:PlayerBall;
-
- private var m_iterations:int = 10;
-
- public var sndTransform:SoundTransform;
-
- private var m_timeStep:Number = 0.03333333333333333;
-
- public var m_physScale:Number = 30;
-
- private var startTime:Number;
-
- public var score:uint;
-
- public var sndChannel:SoundChannel;
-
- public var canvas:CoreCanvas;
-
- public var bonusesManager:BonusesManager;
-
- public var dispatcher:EventDispatcher;
-
- public var elapsedTime:Number;
-
- public var m_world:b2World;
-
- private var timeManager:TimeManager;
-
- public var platform:Platform;
-
- public var contactListener:BContactListener;
-
- public function CoreEngine()
- {
- super();
- }
-
- public static function getInstance() : CoreEngine
- {
- if(instance == null)
- {
- instance = new CoreEngine();
- }
- return instance;
- }
-
- public function destroy() : void
- {
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.DESTROY));
- canvas.objectsContainer.removeEventListener(Event.ENTER_FRAME,efHandler);
- }
-
- private function checkEndGame() : void
- {
- if(playerBall.isDead)
- {
- pauseSimulation();
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PLAYER_DEAD));
- }
- }
-
- private function checkEndLevel() : void
- {
- if(elapsedTime > level.endTime)
- {
- if(level.num < 30)
- {
- level.next();
- dispatcher.dispatchEvent(new CoreEvent(LEVEL_NEXT,level));
- }
- else
- {
- gameComplete();
- }
- }
- }
-
- private function initBox2d() : void
- {
- var worldAABB:b2AABB = new b2AABB();
- worldAABB.lowerBound.Set(-1000,-1000);
- worldAABB.upperBound.Set(1000,1000);
- var gravity:b2Vec2 = new b2Vec2(0,10);
- var doSleep:Boolean = true;
- m_world = new b2World(worldAABB,gravity,doSleep);
- var dbgDraw:b2DebugDraw = new b2DebugDraw();
- var dbgDrawContainer:Sprite = canvas.debugContainer;
- dbgDrawContainer.mouseEnabled = false;
- dbgDrawContainer.mouseChildren = false;
- dbgDraw.m_sprite = dbgDrawContainer;
- dbgDraw.m_drawScale = m_physScale;
- dbgDraw.m_fillAlpha = 0.7;
- dbgDraw.m_lineThickness = 1;
- dbgDraw.m_drawFlags = b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit | b2DebugDraw.e_pairBit;
- contactListener = new BContactListener();
- m_world.SetContactListener(contactListener);
- }
-
- private function initLevel() : void
- {
- var platformDef:PlatformDef = new PlatformDef(320,370 - 10,0,434,20);
- platform = new Platform(platformDef);
- var playerDef:BallDef = new BallDef(320,370 - 20 - 55,0,40);
- playerBall = new PlayerBall(playerDef);
- var wallShapeDef:b2PolygonDef = new b2PolygonDef();
- wallShapeDef.restitution = 0.5;
- wallShapeDef.SetAsBox(40 / m_physScale,480 / m_physScale);
- var wallBodyDef:b2BodyDef = new b2BodyDef();
- wallBodyDef.position.Set((-40 + 5) / m_physScale,480 / 2 / m_physScale);
- var leftWall:b2Body = m_world.CreateBody(wallBodyDef);
- leftWall.CreateShape(wallShapeDef);
- leftWall.SetMassFromShapes();
- wallBodyDef.position.Set((640 + 40 - 5) / m_physScale,480 / 2 / m_physScale);
- var rightWall:b2Body = m_world.CreateBody(wallBodyDef);
- rightWall.CreateShape(wallShapeDef);
- rightWall.SetMassFromShapes();
- }
-
- private function gameComplete() : void
- {
- pauseSimulation();
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.GAME_COMPLETE));
- }
-
- public function pauseSimulation() : void
- {
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PAUSE_SIMULATION,true));
- canvas.objectsContainer.removeEventListener(Event.ENTER_FRAME,efHandler);
- }
-
- public function gameStart(canvas:CoreCanvas, sndTransform:SoundTransform) : void
- {
- this.canvas = canvas;
- this.sndTransform = sndTransform;
- assets = CoreAssets.getInstance();
- dispatcher = new EventDispatcher();
- Input.getInstance().init(canvas.objectsContainer.stage);
- initBox2d();
- initLevel();
- bonusesManager = new BonusesManager();
- timeManager = new TimeManager(canvas.objectsContainer.stage);
- level = new Level();
- startTime = getTimer();
- elapsedTime = 0;
- score = 0;
- canvas.objectsContainer.addEventListener(Event.ENTER_FRAME,efHandler);
- }
-
- public function resumeSimulation() : void
- {
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PAUSE_SIMULATION,false));
- canvas.objectsContainer.addEventListener(Event.ENTER_FRAME,efHandler);
- }
-
- private function efHandler(e:Event) : void
- {
- canvas.effectsContainer.graphics.clear();
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PRE_UPDATE));
- m_world.Step(m_timeStep,m_iterations);
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.UPDATE,elapsedTime));
- dispatcher.dispatchEvent(new CoreEvent(CoreEvent.POST_UPDATE));
- checkEndLevel();
- checkEndGame();
- ++elapsedTime;
- ++score;
- }
- }
- }
-