home *** CD-ROM | disk | FTP | other *** search
- package core
- {
- import core.bonuses.AbstractBonus;
- import core.bonuses.BonusAttach;
- import core.bonuses.BonusElastic;
- import core.bonuses.BonusFreeze;
- import core.bonuses.BonusInverse;
- import core.bonuses.BonusPowerup;
- import core.bonuses.BonusPushField;
- import core.events.CoreEvent;
- import core.objects.BonusBall;
- import core.objects.BonusDef;
- import core.objects.Star;
- import core.objects.StarDef;
- import flash.events.EventDispatcher;
- import flash.events.KeyboardEvent;
-
- public class BonusesManager extends EventDispatcher
- {
-
- public static const BONUS_ACTIVATE:String = "BonusActivate";
-
- public static const BONUS_COLLECT:String = "BonusCollect";
-
- public static const BONUS_DEACTIVATE:String = "BonusDeactivate";
-
-
- private var engine:CoreEngine;
-
- private var bonusAttach:BonusAttach;
-
- private var bonuses:Array;
-
- private var bonusInverse:BonusInverse;
-
- private var bonusPorwerup:BonusPowerup;
-
- private var bonusFreeze:BonusFreeze;
-
- private var bonusPushField:BonusPushField;
-
- public var starsNum:int;
-
- private var currentTime:int;
-
- public var starsCollected:uint;
-
- private var bonusElastic:BonusElastic;
-
- public function BonusesManager()
- {
- super();
- init();
- }
-
- private function updateHandler(e:CoreEvent) : void
- {
- currentTime = e.data as int;
- }
-
- private function createBonus(name:String) : AbstractBonus
- {
- var bonus:AbstractBonus = null;
- switch(name)
- {
- case BonusBall.FREEZE:
- bonus = new BonusFreeze();
- break;
- case BonusBall.POWERUP:
- bonus = new BonusPowerup();
- break;
- case BonusBall.PUSH_FIELD:
- bonus = new BonusPushField();
- break;
- case BonusBall.ATTACH:
- bonus = new BonusAttach();
- break;
- case BonusBall.ELASTIC:
- bonus = new BonusElastic();
- break;
- case BonusBall.INVERSE:
- bonus = new BonusInverse();
- }
- bonus.addEventListener(BONUS_DEACTIVATE,bonusDeactivateHandler);
- bonuses.push(bonus);
- return bonus;
- }
-
- private function init() : void
- {
- engine = CoreEngine.getInstance();
- engine.dispatcher.addEventListener(CoreEvent.UPDATE,updateHandler);
- engine.canvas.objectsContainer.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
- engine.dispatcher.addEventListener(CoreEvent.DESTROY,destroyHandler);
- engine.dispatcher.addEventListener(CoreEvent.PAUSE_SIMULATION,pauseSimulationHandler);
- bonuses = [];
- bonusFreeze = createBonus(BonusBall.FREEZE) as BonusFreeze;
- bonusPorwerup = createBonus(BonusBall.POWERUP) as BonusPowerup;
- bonusPushField = createBonus(BonusBall.PUSH_FIELD) as BonusPushField;
- bonusAttach = createBonus(BonusBall.ATTACH) as BonusAttach;
- bonusElastic = createBonus(BonusBall.ELASTIC) as BonusElastic;
- bonusInverse = createBonus(BonusBall.INVERSE) as BonusInverse;
- starsNum = 0;
- starsCollected = 0;
- }
-
- private function bonusDeactivateHandler(e:CoreEvent) : void
- {
- dispatchEvent(new CoreEvent(BONUS_DEACTIVATE,e.data));
- }
-
- private function keyDownHandler(e:KeyboardEvent) : void
- {
- var bonus:AbstractBonus = null;
- switch(e.keyCode)
- {
- case 49:
- bonus = bonusPorwerup;
- break;
- case 50:
- bonus = bonusPushField;
- break;
- case 51:
- bonus = bonusAttach;
- break;
- case 52:
- bonus = bonusElastic;
- break;
- default:
- return;
- }
- if(bonus.num > 0)
- {
- --bonus.num;
- bonus.activate(currentTime);
- dispatchEvent(new CoreEvent(BONUS_ACTIVATE,bonus));
- }
- }
-
- private function pauseSimulationHandler(e:CoreEvent) : void
- {
- var isPause:Boolean = e.data as Boolean;
- if(isPause)
- {
- engine.canvas.objectsContainer.stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
- }
- else
- {
- engine.canvas.objectsContainer.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
- }
- }
-
- public function createStar(starDef:StarDef) : void
- {
- var star:Star = new Star(starDef);
- star.addEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
- star.addEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
- ++starsNum;
- }
-
- public function getBonuses() : Array
- {
- return bonuses;
- }
-
- private function destroyHandler(e:CoreEvent) : void
- {
- engine.dispatcher.removeEventListener(CoreEvent.UPDATE,updateHandler);
- engine.canvas.objectsContainer.stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
- engine.dispatcher.removeEventListener(CoreEvent.DESTROY,destroyHandler);
- engine.dispatcher.removeEventListener(CoreEvent.PAUSE_SIMULATION,pauseSimulationHandler);
- }
-
- public function createBonusBall(bonusDef:BonusDef) : void
- {
- var bonusBall:BonusBall = new BonusBall(bonusDef);
- bonusBall.addEventListener(CoreEvent.BONUS_COLLECT,bonusCollectHandler);
- }
-
- private function starCollectHandler(e:CoreEvent) : void
- {
- var star:Star = e.data as Star;
- star.removeEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
- star.removeEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
- engine.score += star.score;
- --starsNum;
- ++starsCollected;
- }
-
- private function starLifeEndHandler(e:CoreEvent) : void
- {
- var star:Star = e.data as Star;
- star.removeEventListener(CoreEvent.STAR_COLLECT,starCollectHandler);
- star.removeEventListener(CoreEvent.STAR_LIFE_END,starLifeEndHandler);
- --starsNum;
- }
-
- private function bonusCollectHandler(e:CoreEvent) : void
- {
- var bonus:AbstractBonus = null;
- var bonusBall:BonusBall = e.data as BonusBall;
- var bonusName:String = bonusBall.bonusDef.type;
- switch(bonusName)
- {
- case BonusBall.FREEZE:
- bonus = bonusFreeze;
- break;
- case BonusBall.POWERUP:
- bonus = bonusPorwerup;
- break;
- case BonusBall.PUSH_FIELD:
- bonus = bonusPushField;
- break;
- case BonusBall.ATTACH:
- bonus = bonusAttach;
- break;
- case BonusBall.ELASTIC:
- bonus = bonusElastic;
- break;
- case BonusBall.INVERSE:
- bonus = bonusInverse;
- }
- if(bonus.isGood)
- {
- ++bonus.num;
- dispatchEvent(new CoreEvent(BONUS_COLLECT,bonus));
- }
- else
- {
- bonus.activate(currentTime);
- dispatchEvent(new CoreEvent(BONUS_ACTIVATE,bonus));
- }
- }
- }
- }
-