home *** CD-ROM | disk | FTP | other *** search
/ 404 Jogos / CLJG.iso / Diversos / Beez.swf / scripts / core / CoreEngine.as < prev    next >
Encoding:
Text File  |  2008-09-03  |  6.6 KB  |  204 lines

  1. package core
  2. {
  3.    import Box2D.Collision.Shapes.b2PolygonDef;
  4.    import Box2D.Collision.b2AABB;
  5.    import Box2D.Common.Math.b2Vec2;
  6.    import Box2D.Dynamics.b2Body;
  7.    import Box2D.Dynamics.b2BodyDef;
  8.    import Box2D.Dynamics.b2DebugDraw;
  9.    import Box2D.Dynamics.b2World;
  10.    import core.events.CoreEvent;
  11.    import core.objects.BallDef;
  12.    import core.objects.Platform;
  13.    import core.objects.PlatformDef;
  14.    import core.objects.PlayerBall;
  15.    import flash.display.Sprite;
  16.    import flash.events.Event;
  17.    import flash.events.EventDispatcher;
  18.    import flash.media.SoundChannel;
  19.    import flash.media.SoundTransform;
  20.    import flash.utils.getTimer;
  21.    
  22.    public class CoreEngine
  23.    {
  24.       
  25.       private static var instance:CoreEngine;
  26.       
  27.       public static const PLAYER_DEAD:String = "PlayerDead";
  28.       
  29.       public static const LEVEL_NEXT:String = "LevelNext";
  30.        
  31.       
  32.       public var assets:CoreAssets;
  33.       
  34.       public var level:Level;
  35.       
  36.       public var playerBall:PlayerBall;
  37.       
  38.       private var m_iterations:int = 10;
  39.       
  40.       public var sndTransform:SoundTransform;
  41.       
  42.       private var m_timeStep:Number = 0.03333333333333333;
  43.       
  44.       public var m_physScale:Number = 30;
  45.       
  46.       private var startTime:Number;
  47.       
  48.       public var score:uint;
  49.       
  50.       public var sndChannel:SoundChannel;
  51.       
  52.       public var canvas:CoreCanvas;
  53.       
  54.       public var bonusesManager:BonusesManager;
  55.       
  56.       public var dispatcher:EventDispatcher;
  57.       
  58.       public var elapsedTime:Number;
  59.       
  60.       public var m_world:b2World;
  61.       
  62.       private var timeManager:TimeManager;
  63.       
  64.       public var platform:Platform;
  65.       
  66.       public var contactListener:BContactListener;
  67.       
  68.       public function CoreEngine()
  69.       {
  70.          super();
  71.       }
  72.       
  73.       public static function getInstance() : CoreEngine
  74.       {
  75.          if(instance == null)
  76.          {
  77.             instance = new CoreEngine();
  78.          }
  79.          return instance;
  80.       }
  81.       
  82.       public function destroy() : void
  83.       {
  84.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.DESTROY));
  85.          canvas.objectsContainer.removeEventListener(Event.ENTER_FRAME,efHandler);
  86.       }
  87.       
  88.       private function checkEndGame() : void
  89.       {
  90.          if(playerBall.isDead)
  91.          {
  92.             pauseSimulation();
  93.             dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PLAYER_DEAD));
  94.          }
  95.       }
  96.       
  97.       private function checkEndLevel() : void
  98.       {
  99.          if(elapsedTime > level.endTime)
  100.          {
  101.             if(level.num < 30)
  102.             {
  103.                level.next();
  104.                dispatcher.dispatchEvent(new CoreEvent(LEVEL_NEXT,level));
  105.             }
  106.             else
  107.             {
  108.                gameComplete();
  109.             }
  110.          }
  111.       }
  112.       
  113.       private function initBox2d() : void
  114.       {
  115.          var worldAABB:b2AABB = new b2AABB();
  116.          worldAABB.lowerBound.Set(-1000,-1000);
  117.          worldAABB.upperBound.Set(1000,1000);
  118.          var gravity:b2Vec2 = new b2Vec2(0,10);
  119.          var doSleep:Boolean = true;
  120.          m_world = new b2World(worldAABB,gravity,doSleep);
  121.          var dbgDraw:b2DebugDraw = new b2DebugDraw();
  122.          var dbgDrawContainer:Sprite = canvas.debugContainer;
  123.          dbgDrawContainer.mouseEnabled = false;
  124.          dbgDrawContainer.mouseChildren = false;
  125.          dbgDraw.m_sprite = dbgDrawContainer;
  126.          dbgDraw.m_drawScale = m_physScale;
  127.          dbgDraw.m_fillAlpha = 0.7;
  128.          dbgDraw.m_lineThickness = 1;
  129.          dbgDraw.m_drawFlags = b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit | b2DebugDraw.e_pairBit;
  130.          contactListener = new BContactListener();
  131.          m_world.SetContactListener(contactListener);
  132.       }
  133.       
  134.       private function initLevel() : void
  135.       {
  136.          var platformDef:PlatformDef = new PlatformDef(320,370 - 10,0,434,20);
  137.          platform = new Platform(platformDef);
  138.          var playerDef:BallDef = new BallDef(320,370 - 20 - 55,0,40);
  139.          playerBall = new PlayerBall(playerDef);
  140.          var wallShapeDef:b2PolygonDef = new b2PolygonDef();
  141.          wallShapeDef.restitution = 0.5;
  142.          wallShapeDef.SetAsBox(40 / m_physScale,480 / m_physScale);
  143.          var wallBodyDef:b2BodyDef = new b2BodyDef();
  144.          wallBodyDef.position.Set((-40 + 5) / m_physScale,480 / 2 / m_physScale);
  145.          var leftWall:b2Body = m_world.CreateBody(wallBodyDef);
  146.          leftWall.CreateShape(wallShapeDef);
  147.          leftWall.SetMassFromShapes();
  148.          wallBodyDef.position.Set((640 + 40 - 5) / m_physScale,480 / 2 / m_physScale);
  149.          var rightWall:b2Body = m_world.CreateBody(wallBodyDef);
  150.          rightWall.CreateShape(wallShapeDef);
  151.          rightWall.SetMassFromShapes();
  152.       }
  153.       
  154.       private function gameComplete() : void
  155.       {
  156.          pauseSimulation();
  157.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.GAME_COMPLETE));
  158.       }
  159.       
  160.       public function pauseSimulation() : void
  161.       {
  162.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PAUSE_SIMULATION,true));
  163.          canvas.objectsContainer.removeEventListener(Event.ENTER_FRAME,efHandler);
  164.       }
  165.       
  166.       public function gameStart(canvas:CoreCanvas, sndTransform:SoundTransform) : void
  167.       {
  168.          this.canvas = canvas;
  169.          this.sndTransform = sndTransform;
  170.          assets = CoreAssets.getInstance();
  171.          dispatcher = new EventDispatcher();
  172.          Input.getInstance().init(canvas.objectsContainer.stage);
  173.          initBox2d();
  174.          initLevel();
  175.          bonusesManager = new BonusesManager();
  176.          timeManager = new TimeManager(canvas.objectsContainer.stage);
  177.          level = new Level();
  178.          startTime = getTimer();
  179.          elapsedTime = 0;
  180.          score = 0;
  181.          canvas.objectsContainer.addEventListener(Event.ENTER_FRAME,efHandler);
  182.       }
  183.       
  184.       public function resumeSimulation() : void
  185.       {
  186.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PAUSE_SIMULATION,false));
  187.          canvas.objectsContainer.addEventListener(Event.ENTER_FRAME,efHandler);
  188.       }
  189.       
  190.       private function efHandler(e:Event) : void
  191.       {
  192.          canvas.effectsContainer.graphics.clear();
  193.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.PRE_UPDATE));
  194.          m_world.Step(m_timeStep,m_iterations);
  195.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.UPDATE,elapsedTime));
  196.          dispatcher.dispatchEvent(new CoreEvent(CoreEvent.POST_UPDATE));
  197.          checkEndLevel();
  198.          checkEndGame();
  199.          ++elapsedTime;
  200.          ++score;
  201.       }
  202.    }
  203. }
  204.