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

  1. package core
  2. {
  3.    import core.bonuses.AbstractBonus;
  4.    import core.bonuses.BonusAttach;
  5.    import core.bonuses.BonusElastic;
  6.    import core.bonuses.BonusFreeze;
  7.    import core.bonuses.BonusInverse;
  8.    import core.bonuses.BonusPowerup;
  9.    import core.bonuses.BonusPushField;
  10.    import core.events.CoreEvent;
  11.    import core.objects.BonusBall;
  12.    import core.objects.BonusDef;
  13.    import core.objects.Star;
  14.    import core.objects.StarDef;
  15.    import flash.events.EventDispatcher;
  16.    import flash.events.KeyboardEvent;
  17.    
  18.    public class BonusesManager extends EventDispatcher
  19.    {
  20.       
  21.       public static const BONUS_ACTIVATE:String = "BonusActivate";
  22.       
  23.       public static const BONUS_COLLECT:String = "BonusCollect";
  24.       
  25.       public static const BONUS_DEACTIVATE:String = "BonusDeactivate";
  26.        
  27.       
  28.       private var engine:CoreEngine;
  29.       
  30.       private var bonusAttach:BonusAttach;
  31.       
  32.       private var bonuses:Array;
  33.       
  34.       private var bonusInverse:BonusInverse;
  35.       
  36.       private var bonusPorwerup:BonusPowerup;
  37.       
  38.       private var bonusFreeze:BonusFreeze;
  39.       
  40.       private var bonusPushField:BonusPushField;
  41.       
  42.       public var starsNum:int;
  43.       
  44.       private var currentTime:int;
  45.       
  46.       public var starsCollected:uint;
  47.       
  48.       private var bonusElastic:BonusElastic;
  49.       
  50.       public function BonusesManager()
  51.       {
  52.          super();
  53.          init();
  54.       }
  55.       
  56.       private function updateHandler(e:CoreEvent) : void
  57.       {
  58.          currentTime = e.data as int;
  59.       }
  60.       
  61.       private function createBonus(name:String) : AbstractBonus
  62.       {
  63.          var bonus:AbstractBonus = null;
  64.          switch(name)
  65.          {
  66.             case BonusBall.FREEZE:
  67.                bonus = new BonusFreeze();
  68.                break;
  69.             case BonusBall.POWERUP:
  70.                bonus = new BonusPowerup();
  71.                break;
  72.             case BonusBall.PUSH_FIELD:
  73.                bonus = new BonusPushField();
  74.                break;
  75.             case BonusBall.ATTACH:
  76.                bonus = new BonusAttach();
  77.                break;
  78.             case BonusBall.ELASTIC:
  79.                bonus = new BonusElastic();
  80.                break;
  81.             case BonusBall.INVERSE:
  82.                bonus = new BonusInverse();
  83.          }
  84.          bonus.addEventListener(BONUS_DEACTIVATE,bonusDeactivateHandler);
  85.          bonuses.push(bonus);
  86.          return bonus;
  87.       }
  88.       
  89.       private function init() : void
  90.       {
  91.          engine = CoreEngine.getInstance();
  92.          engine.dispatcher.addEventListener(CoreEvent.UPDATE,updateHandler);
  93.          engine.canvas.objectsContainer.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  94.          engine.dispatcher.addEventListener(CoreEvent.DESTROY,destroyHandler);
  95.          engine.dispatcher.addEventListener(CoreEvent.PAUSE_SIMULATION,pauseSimulationHandler);
  96.          bonuses = [];
  97.          bonusFreeze = createBonus(BonusBall.FREEZE) as BonusFreeze;
  98.          bonusPorwerup = createBonus(BonusBall.POWERUP) as BonusPowerup;
  99.          bonusPushField = createBonus(BonusBall.PUSH_FIELD) as BonusPushField;
  100.          bonusAttach = createBonus(BonusBall.ATTACH) as BonusAttach;
  101.          bonusElastic = createBonus(BonusBall.ELASTIC) as BonusElastic;
  102.          bonusInverse = createBonus(BonusBall.INVERSE) as BonusInverse;
  103.          starsNum = 0;
  104.          starsCollected = 0;
  105.       }
  106.       
  107.       private function bonusDeactivateHandler(e:CoreEvent) : void
  108.       {
  109.          dispatchEvent(new CoreEvent(BONUS_DEACTIVATE,e.data));
  110.       }
  111.       
  112.       private function keyDownHandler(e:KeyboardEvent) : void
  113.       {
  114.          var bonus:AbstractBonus = null;
  115.          switch(e.keyCode)
  116.          {
  117.             case 49:
  118.                bonus = bonusPorwerup;
  119.                break;
  120.             case 50:
  121.                bonus = bonusPushField;
  122.                break;
  123.             case 51:
  124.                bonus = bonusAttach;
  125.                break;
  126.             case 52:
  127.                bonus = bonusElastic;
  128.                break;
  129.             default:
  130.                return;
  131.          }
  132.          if(bonus.num > 0)
  133.          {
  134.             --bonus.num;
  135.             bonus.activate(currentTime);
  136.             dispatchEvent(new CoreEvent(BONUS_ACTIVATE,bonus));
  137.          }
  138.       }
  139.       
  140.       private function pauseSimulationHandler(e:CoreEvent) : void
  141.       {
  142.          var isPause:Boolean = e.data as Boolean;
  143.          if(isPause)
  144.          {
  145.             engine.canvas.objectsContainer.stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  146.          }
  147.          else
  148.          {
  149.             engine.canvas.objectsContainer.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  150.          }
  151.       }
  152.       
  153.       public function createStar(starDef:StarDef) : void
  154.       {
  155.          var star:Star = new Star(starDef);
  156.          star.addEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
  157.          star.addEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
  158.          ++starsNum;
  159.       }
  160.       
  161.       public function getBonuses() : Array
  162.       {
  163.          return bonuses;
  164.       }
  165.       
  166.       private function destroyHandler(e:CoreEvent) : void
  167.       {
  168.          engine.dispatcher.removeEventListener(CoreEvent.UPDATE,updateHandler);
  169.          engine.canvas.objectsContainer.stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
  170.          engine.dispatcher.removeEventListener(CoreEvent.DESTROY,destroyHandler);
  171.          engine.dispatcher.removeEventListener(CoreEvent.PAUSE_SIMULATION,pauseSimulationHandler);
  172.       }
  173.       
  174.       public function createBonusBall(bonusDef:BonusDef) : void
  175.       {
  176.          var bonusBall:BonusBall = new BonusBall(bonusDef);
  177.          bonusBall.addEventListener(CoreEvent.BONUS_COLLECT,bonusCollectHandler);
  178.       }
  179.       
  180.       private function starCollectHandler(e:CoreEvent) : void
  181.       {
  182.          var star:Star = e.data as Star;
  183.          star.removeEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
  184.          star.removeEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
  185.          engine.score += star.score;
  186.          --starsNum;
  187.          ++starsCollected;
  188.       }
  189.       
  190.       private function starLifeEndHandler(e:CoreEvent) : void
  191.       {
  192.          var star:Star = e.data as Star;
  193.          star.removeEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
  194.          star.removeEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
  195.          --starsNum;
  196.       }
  197.       
  198.       private function bonusCollectHandler(e:CoreEvent) : void
  199.       {
  200.          var bonus:AbstractBonus = null;
  201.          var bonusBall:BonusBall = e.data as BonusBall;
  202.          var bonusName:String = bonusBall.bonusDef.type;
  203.          switch(bonusName)
  204.          {
  205.             case BonusBall.FREEZE:
  206.                bonus = bonusFreeze;
  207.                break;
  208.             case BonusBall.POWERUP:
  209.                bonus = bonusPorwerup;
  210.                break;
  211.             case BonusBall.PUSH_FIELD:
  212.                bonus = bonusPushField;
  213.                break;
  214.             case BonusBall.ATTACH:
  215.                bonus = bonusAttach;
  216.                break;
  217.             case BonusBall.ELASTIC:
  218.                bonus = bonusElastic;
  219.                break;
  220.             case BonusBall.INVERSE:
  221.                bonus = bonusInverse;
  222.          }
  223.          if(bonus.isGood)
  224.          {
  225.             ++bonus.num;
  226.             dispatchEvent(new CoreEvent(BONUS_COLLECT,bonus));
  227.          }
  228.          else
  229.          {
  230.             bonus.activate(currentTime);
  231.             dispatchEvent(new CoreEvent(BONUS_ACTIVATE,bonus));
  232.          }
  233.       }
  234.    }
  235. }
  236.