public static void Create() { Debug.Assert(instance == null); // Do the initialization if (instance == null) { instance = new RandomManager(); } Debug.Assert(instance != null); }
public override void Execute(float deltaTime) { float NewTime = RandomManager.RandomInt(45, 61); UFORoot pUFORoot = (UFORoot)GameObjectManager.Find(GameObject.Name.UFORoot); OrangeSaucer pUFO = (OrangeSaucer)pUFORoot.GetFirstChild(); pUFO.RandomizeDirection(); // Add itself back to timer TimerManager.Add(TimeEvent.Name.UFOSpawn, this, NewTime); TimerManager.Add(TimeEvent.Name.PlayUFOSound, this.pSoundEvent, 0.17f); }
public void RandomizeDirection() { float NewDelta = 0.0f; float NewX = 0.0f; float randF = RandomManager.RandomInt(1, 3); switch (randF) { case 1: NewX = 20f; NewDelta = 1f; break; case 2: NewX = SpaceInvaders.ScreenWidth - 20f; NewDelta = -1f; break; } Debug.Assert(NewX != 0.0f); Debug.Assert(NewDelta != 0.0f); this.Reset(NewX, NewDelta); }
public static void RandomizeBombType(Bomb pBomb) { BombManager pBombMan = BombManager.GetInstance(); float rand = RandomManager.RandomInt(1, 4); switch (rand) { case 1: pBomb.pStrategy = pBomb.pZigZag; pBomb.pProxySprite.Set(GameSprite.Name.BombZigZag); break; case 2: pBomb.pStrategy = pBomb.pDaggers; pBomb.pProxySprite.Set(GameSprite.Name.BombDagger); break; case 3: pBomb.pStrategy = pBomb.pStraight; pBomb.pProxySprite.Set(GameSprite.Name.BombStraight); break; } pBomb.poColObj.poColRect.Set(pBomb.pProxySprite.pSprite.GetScreenRect()); }
public override void Execute(float deltaTime) { float NewTime = RandomManager.RandomInt(1, 3); float randColumn = RandomManager.RandomInt(1, 12); AlienGrid pGrid = (AlienGrid)GameObjectManager.Find(GameObject.Name.AlienGrid); AlienColumn pColumn = (AlienColumn)pGrid.GetFirstChild(); AlienColumn temp = pColumn; int col = 0; while (temp != null) { col++; if (col == randColumn) { temp.DropBomb(); } temp = (AlienColumn)Iterator.GetSibling(temp); } // Add itself back to timer TimerManager.Add(TimeEvent.Name.DropBomb, this, NewTime); }
public override void Initialize() { this.poGameObjectManager = new GameObjectManager(3, 1); GameObjectManager.SetActive(this.poGameObjectManager); this.poTimerManager = new TimerManager(3, 1); TimerManager.SetActive(this.poTimerManager); this.poCollisionPairManager = new CollisionPairManager(3, 1); CollisionPairManager.SetActive(this.poCollisionPairManager); //--------------------------------------------------------------------------------------------------------- // Create SpriteBatch //--------------------------------------------------------------------------------------------------------- this.poSpriteBatchManager = new SpriteBatchManager(3, 1); SpriteBatchManager.SetActive(this.poSpriteBatchManager); SpriteBatch pAliensBatch = SpriteBatchManager.Add(SpriteBatch.Name.Aliens, 1); SpriteBatch pBoxBatch = SpriteBatchManager.Add(SpriteBatch.Name.Boxes, 2); SpriteBatch pShieldsBatch = SpriteBatchManager.Add(SpriteBatch.Name.Shields, 3); SpriteBatch pNullBatch = SpriteBatchManager.Add(SpriteBatch.Name.NullObjects, 4); SpriteBatch pTexts = SpriteBatchManager.Add(SpriteBatch.Name.Texts, 5); pBoxBatch.SetDrawBool(false); //--------------------------------------------------------------------------------------------------------- // Input //--------------------------------------------------------------------------------------------------------- this.poInputManager = new InputManager(); InputManager.SetActive(this.poInputManager); InputSubject pInputSubject; pInputSubject = InputManager.GetArrowRightSubject(); pInputSubject.Attach(new MoveRightObserver()); pInputSubject = InputManager.GetArrowLeftSubject(); pInputSubject.Attach(new MoveLeftObserver()); pInputSubject = InputManager.GetSpaceSubject(); pInputSubject.Attach(new ShootObserver()); pInputSubject.Attach(new ShootSoundObserver()); pInputSubject = InputManager.GetCKeySubject(); pInputSubject.Attach(new ToggleCollisionBoxObserver()); Simulation.SetState(Simulation.State.Realtime); //--------------------------------------------------------------------------------------------------------- // Create Texts //--------------------------------------------------------------------------------------------------------- this.poFontManager = new FontManager(3, 1); FontManager.SetActive(this.poFontManager); FontManager.Add(Font.Name.Header, SpriteBatch.Name.Texts, "SCORE<1> HI-SCORE SCORE<2>", 20f, SpaceInvaders.ScreenHeight - 20f, 15f, 25f); FontManager.Add(Font.Name.Player1Score, SpriteBatch.Name.Texts, "0000", 65f, SpaceInvaders.ScreenHeight - 70f, 15f, 25f); FontManager.Add(Font.Name.Player2Score, SpriteBatch.Name.Texts, "0000", SpaceInvaders.ScreenWidth - 156f, SpaceInvaders.ScreenHeight - 70f, 15f, 25f); FontManager.Add(Font.Name.HiScore, SpriteBatch.Name.Texts, "0000", 380f, SpaceInvaders.ScreenHeight - 70f, 15f, 25f); FontManager.Add(Font.Name.Lives, SpriteBatch.Name.Texts, "3", 40f, 40f, 15f, 25f); //--------------------------------------------------------------------------------------------------------- // Create Walls //--------------------------------------------------------------------------------------------------------- // Wall Root WallGroup pWallGroup = new WallGroup(GameObject.Name.WallGroup, GameSprite.Name.NullObject, 0.0f, 0.0f); pWallGroup.ActivateGameSprite(pAliensBatch);//even need this? pWallGroup.ActivateCollisionSprite(pBoxBatch); WallRight pWallRight = new WallRight(GameObject.Name.WallRight, GameSprite.Name.NullObject, SpaceInvaders.ScreenWidth - 15, SpaceInvaders.ScreenHeight / 2, 20, SpaceInvaders.ScreenHeight - 110); pWallRight.ActivateCollisionSprite(pBoxBatch); WallLeft pWallLeft = new WallLeft(GameObject.Name.WallLeft, GameSprite.Name.NullObject, 20, SpaceInvaders.ScreenHeight / 2, 20, SpaceInvaders.ScreenHeight - 110); pWallLeft.ActivateCollisionSprite(pBoxBatch); WallTop pWallTop = new WallTop(GameObject.Name.WallTop, GameSprite.Name.NullObject, 450, SpaceInvaders.ScreenHeight - 70, SpaceInvaders.ScreenWidth - 10, 30); pWallTop.ActivateCollisionSprite(pBoxBatch); WallBottom pWallBottom = new WallBottom(GameObject.Name.WallBottom, GameSprite.Name.Ground, 450, 60, SpaceInvaders.ScreenWidth - 10, 5); pWallBottom.ActivateGameSprite(pAliensBatch); pWallBottom.ActivateCollisionSprite(pBoxBatch); // Add to the composite the children pWallGroup.Add(pWallRight); pWallGroup.Add(pWallLeft); pWallGroup.Add(pWallTop); pWallGroup.Add(pWallBottom); GameObjectManager.Attach(pWallGroup); //--------------------------------------------------------------------------------------------------------- // Create Bomb Root //--------------------------------------------------------------------------------------------------------- BombRoot pBombRoot = new BombRoot(GameObject.Name.BombRoot, GameSprite.Name.NullObject, 0.0f, 0.0f); pBombRoot.ActivateGameSprite(pAliensBatch);//change? even need this? pBombRoot.ActivateCollisionSprite(pBoxBatch); GameObjectManager.Attach(pBombRoot); DropBombEvent pBombEvent = new DropBombEvent(); TimerManager.Add(TimeEvent.Name.DropBomb, pBombEvent, 3.0f); //--------------------------------------------------------------------------------------------------------- // Create Missile Root //--------------------------------------------------------------------------------------------------------- // Missile Root MissileGroup pMissileGroup = new MissileGroup(GameObject.Name.MissileGroup, GameSprite.Name.NullObject, 0.0f, 0.0f); pMissileGroup.ActivateGameSprite(pAliensBatch);//change? even need this? pMissileGroup.ActivateCollisionSprite(pBoxBatch); GameObjectManager.Attach(pMissileGroup); //--------------------------------------------------------------------------------------------------------- // Create Ship Root //--------------------------------------------------------------------------------------------------------- ShipRoot pShipRoot = new ShipRoot(GameObject.Name.ShipRoot, GameSprite.Name.NullObject, 0.0f, 0.0f); pShipRoot.ActivateGameSprite(pAliensBatch);//change? even need this? pShipRoot.ActivateCollisionSprite(pBoxBatch); GameObjectManager.Attach(pShipRoot); ShipManager.ActivateShip(); ShipManager.ActivateMissile(); //--------------------------------------------------------------------------------------------------------- // Create UFO and UFO Root //--------------------------------------------------------------------------------------------------------- UFORoot pUFORoot = new UFORoot(GameObject.Name.UFORoot, GameSprite.Name.NullObject, 0.0f, 0.0f); pUFORoot.ActivateGameSprite(pAliensBatch);//change? even need this? pUFORoot.ActivateCollisionSprite(pBoxBatch); GameObjectManager.Attach(pUFORoot); OrangeSaucer pUFO = new OrangeSaucer(GameObject.Name.OrangeSaucer, GameSprite.Name.OrangeSaucer, 20f, SpaceInvaders.ScreenHeight - 110f); pUFO.ActivateGameSprite(pAliensBatch);//change? even need this? pUFO.ActivateCollisionSprite(pBoxBatch); pUFORoot.Add(pUFO); pUFO.Remove(); SpawnUFOEvent pUFOEvent = new SpawnUFOEvent(); TimerManager.Add(TimeEvent.Name.UFOSpawn, pUFOEvent, RandomManager.RandomInt(15, 45)); //--------------------------------------------------------------------------------------------------------- // Create Aliens //--------------------------------------------------------------------------------------------------------- AlienFactory AF = new AlienFactory(SpriteBatch.Name.Aliens, SpriteBatch.Name.Boxes); AlienGrid pAlienGrid = (AlienGrid)AF.Create(GameObject.Name.AlienGrid); for (int i = 0; i < 11; i++) { GameObject pCol = AF.Create(GameObject.Name.AlienColumn); GameObject pGameObject; pGameObject = AF.Create(GameObject.Name.PurpleOctopus, 50.0f + 66 * i, SpaceInvaders.ScreenHeight - 364f); pCol.Add(pGameObject); pGameObject = AF.Create(GameObject.Name.PurpleOctopus, 50.0f + 66 * i, SpaceInvaders.ScreenHeight - 298f); pCol.Add(pGameObject); pGameObject = AF.Create(GameObject.Name.BlueCrab, 50.0f + 66 * i, SpaceInvaders.ScreenHeight - 232f); pCol.Add(pGameObject); pGameObject = AF.Create(GameObject.Name.BlueCrab, 50.0f + 66 * i, SpaceInvaders.ScreenHeight - 166f); pCol.Add(pGameObject); pGameObject = AF.Create(GameObject.Name.GreenSquid, 50.0f + 66 * i, SpaceInvaders.ScreenHeight - 100f); pCol.Add(pGameObject); pAlienGrid.Add(pCol); } GameObjectManager.Attach(pAlienGrid); pAlienGrid.Attach(new MoveAlienSoundObserver()); pAlienGrid.Attach(new MoveAlienGridObserver()); AlienGridMoveEvent pGridMoveEvent = new AlienGridMoveEvent(); TimerManager.Add(TimeEvent.Name.MoveAlienGrid, pGridMoveEvent, pAlienGrid.GetMoveRate()); //--------------------------------------------------------------------------------------------------------- // Timer Animations //--------------------------------------------------------------------------------------------------------- // Create an animation sprite AnimationSprite pAnimOctopus = new AnimationSprite(GameSprite.Name.PurpleOctopus); AnimationSprite pAnimCrab = new AnimationSprite(GameSprite.Name.BlueCrab); AnimationSprite pAnimSquid = new AnimationSprite(GameSprite.Name.GreenSquid); // attach several images to cycle pAnimOctopus.Attach(Image.Name.OctopusA); pAnimOctopus.Attach(Image.Name.OctopusB); pAnimCrab.Attach(Image.Name.AlienA); pAnimCrab.Attach(Image.Name.AlienB); pAnimSquid.Attach(Image.Name.SquidA); pAnimSquid.Attach(Image.Name.SquidB); // add AnimationSprite to timer TimerManager.Add(TimeEvent.Name.SpriteAnimation, pAnimOctopus, pAlienGrid.GetMoveRate()); TimerManager.Add(TimeEvent.Name.SpriteAnimation, pAnimCrab, pAlienGrid.GetMoveRate()); TimerManager.Add(TimeEvent.Name.SpriteAnimation, pAnimSquid, pAlienGrid.GetMoveRate()); //--------------------------------------------------------------------------------------------------------- // Shield //--------------------------------------------------------------------------------------------------------- // Create the factory Composite pShieldRoot = (Composite) new ShieldRoot(GameObject.Name.ShieldRoot, GameSprite.Name.NullObject, 0.0f, 0.0f); GameObjectManager.Attach(pShieldRoot); ShieldFactory SF = new ShieldFactory(SpriteBatch.Name.Shields, SpriteBatch.Name.Boxes, pShieldRoot); float start_x = 160.0f; float start_y = 200.0f; float off_x; float brickWidth = 12.0f; float brickHeight = 7.0f; GameObject pShieldGrid; GameObject pShieldCol; for (int i = 0; i < 4; i++) { off_x = 0; SF.SetParent(pShieldRoot); pShieldGrid = SF.Create(GameObject.Name.ShieldGrid); //------Col1 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick_LeftTop1, start_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick_LeftTop0, start_x, start_y + 9 * brickHeight); //-------Col2 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 9 * brickHeight); //-------Col3 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick_LeftBottom, start_x + off_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 9 * brickHeight); //-------Col4 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 9 * brickHeight); //-------Col5 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick_RightBottom, start_x + off_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 9 * brickHeight); //-------Col6 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 0 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 1 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 9 * brickHeight); //-------Col7 SF.SetParent(pShieldGrid); pShieldCol = SF.Create(GameObject.Name.ShieldColumn); SF.SetParent(pShieldCol); off_x += brickWidth; SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 0 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 1 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 2 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 3 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 4 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 5 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 6 * brickHeight); SF.Create(GameObject.Name.ShieldBrick, start_x + off_x, start_y + 7 * brickHeight); SF.Create(GameObject.Name.ShieldBrick_RightTop1, start_x + off_x, start_y + 8 * brickHeight); SF.Create(GameObject.Name.ShieldBrick_RightTop0, start_x + off_x, start_y + 9 * brickHeight); start_x += 170; } //--------------------------------------------------------------------------------------------------------- // Create Null Ship Lives //--------------------------------------------------------------------------------------------------------- ScenePlay.ShipLives = 3; PlayerLivesComposite pNullObjs = new PlayerLivesComposite(); Ship pNullShip1 = new Ship(GameObject.Name.Null_Object, GameSprite.Name.Ship, 120.0f, 40.0f); pNullShip1.ActivateGameSprite(pNullBatch); pNullObjs.Add(pNullShip1); Ship pNullShip2 = new Ship(GameObject.Name.Null_Object, GameSprite.Name.Ship, 180.0f, 40.0f); pNullShip2.ActivateGameSprite(pNullBatch); pNullObjs.Add(pNullShip2); GameObjectManager.Attach(pNullObjs); //--------------------------------------------------------------------------------------------------------- // Create CollisionPairs //--------------------------------------------------------------------------------------------------------- //Why does the order that left/right wall are added matter??????? reverse order breaks game CollisionPair pShipWallRightPair = CollisionPairManager.Add(CollisionPair.Name.Ship_Wall_Right, pShipRoot, pWallRight); Debug.Assert(pShipWallRightPair != null); CollisionPair pShipWallLeftPair = CollisionPairManager.Add(CollisionPair.Name.Ship_Wall_Left, pShipRoot, pWallLeft); Debug.Assert(pShipWallLeftPair != null); CollisionPair pAlienMissilePair = CollisionPairManager.Add(CollisionPair.Name.Alien_Missile, pMissileGroup, pAlienGrid); Debug.Assert(pAlienMissilePair != null); CollisionPair pMissileWallPair = CollisionPairManager.Add(CollisionPair.Name.Missile_Wall_Top, pMissileGroup, pWallTop); Debug.Assert(pMissileWallPair != null); CollisionPair pAlienWallPair = CollisionPairManager.Add(CollisionPair.Name.Alien_Wall, pAlienGrid, pWallGroup); Debug.Assert(pAlienWallPair != null); CollisionPair pAlienWallBottomPair = CollisionPairManager.Add(CollisionPair.Name.Alien_WallBottom, pAlienGrid, pWallBottom); Debug.Assert(pAlienWallBottomPair != null); CollisionPair pBombWallPair = CollisionPairManager.Add(CollisionPair.Name.Bomb_Wall_Bottom, pBombRoot, pWallBottom); Debug.Assert(pBombWallPair != null); CollisionPair pBombShieldPair = CollisionPairManager.Add(CollisionPair.Name.Bomb_Shield, pBombRoot, pShieldRoot); Debug.Assert(pBombShieldPair != null); CollisionPair pMissileShieldPair = CollisionPairManager.Add(CollisionPair.Name.Missile_Shield, pMissileGroup, pShieldRoot); Debug.Assert(pMissileShieldPair != null); CollisionPair pBombShipPair = CollisionPairManager.Add(CollisionPair.Name.Bomb_Ship, pBombRoot, ShipManager.GetShip()); Debug.Assert(pBombShipPair != null); CollisionPair pBombMissilePair = CollisionPairManager.Add(CollisionPair.Name.Bomb_Missile, pBombRoot, ShipManager.GetMissile()); Debug.Assert(pBombMissilePair != null); CollisionPair pAlienShieldPair = CollisionPairManager.Add(CollisionPair.Name.Alien_Shield, pShieldRoot, pAlienGrid); Debug.Assert(pAlienShieldPair != null); CollisionPair pUFOMissilePair = CollisionPairManager.Add(CollisionPair.Name.UFO_Missile, pMissileGroup, pUFORoot); Debug.Assert(pUFOMissilePair != null); //TODO consolidate these news pShipWallLeftPair.Attach(new ShipStopLeftObserver()); pShipWallRightPair.Attach(new ShipStopRightObserver()); pMissileWallPair.Attach(new ShipRemoveMissileObserver()); pAlienMissilePair.Attach(new ShipRemoveMissileObserver()); pAlienMissilePair.Attach(new RemoveAlienObserver()); pAlienMissilePair.Attach(new DeadAlienSoundObserver()); pAlienMissilePair.Attach(new AddP1PointsObserver()); pAlienMissilePair.Attach(new IncreaseAlienSpeedObserver()); pAlienWallPair.Attach(new GridObserver()); pBombWallPair.Attach(new RemoveBombObserver()); pBombShieldPair.Attach(new RemoveBombObserver()); pBombShieldPair.Attach(new RemoveBrickObserver()); pMissileShieldPair.Attach(new ShipRemoveMissileObserver()); pMissileShieldPair.Attach(new RemoveBrickObserver()); pBombShipPair.Attach(new RemoveBombObserver()); pBombShipPair.Attach(new RemoveShipObserver()); pBombShipPair.Attach(new DeadShipSoundObserver()); pBombShipPair.Attach(new RemoveLifeObserver()); pBombShipPair.Attach(new ChangeStateObserver()); pBombMissilePair.Attach(new RemoveBombObserver()); pBombMissilePair.Attach(new ShipRemoveMissileObserverAltPair()); pAlienShieldPair.Attach(new RemoveBrickObserver()); pUFOMissilePair.Attach(new RemoveUFOObserver()); pUFOMissilePair.Attach(new ShipRemoveMissileObserver()); pUFOMissilePair.Attach(new AddP1PointsObserver()); pUFOMissilePair.Attach(new DeadUFOSoundObserver()); pAlienWallBottomPair.Attach(new DeadShipSoundObserver()); pAlienWallBottomPair.Attach(new RemoveAllP1LivesObserver()); }
//----------------------------------------------------------------------------- // Game::LoadContent() // Allows you to load all content needed for your engine, // such as objects, graphics, etc. //----------------------------------------------------------------------------- public override void LoadContent() { ScreenWidth = this.GetScreenWidth(); ScreenHeight = this.GetScreenHeight(); //--------------------------------------------------------------------------------------------------------- // Init Managers //--------------------------------------------------------------------------------------------------------- //Constant Managers TextureManager.Create(1, 1); ImageManager.Create(5, 2); SoundManager.Create(3, 1); GameSpriteManager.Create(4, 2); BoxSpriteManager.Create(3, 1); CollisionStateManager.Create(); GlyphManager.Create(3, 1); Simulation.Create(); RandomManager.Create(); BombManager.Create(); ShipManager.Create(); //State-unique Managers SpriteBatchManager.Create(); GameObjectManager.Create(); InputManager.Create(); FontManager.Create(); TimerManager.Create(); CollisionPairManager.Create(); //ProxySpriteManager.Create(10, 1);//not in use currently //--------------------------------------------------------------------------------------------------------- // Load the Textures //--------------------------------------------------------------------------------------------------------- TextureManager.Add(Texture.Name.SpaceInvaders, "SpaceInvaders.tga"); //--------------------------------------------------------------------------------------------------------- // Load Sounds //--------------------------------------------------------------------------------------------------------- SoundManager.Add(Sound.Name.Invader1, "fastinvader1.wav"); SoundManager.Add(Sound.Name.Invader2, "fastinvader2.wav"); SoundManager.Add(Sound.Name.Invader3, "fastinvader3.wav"); SoundManager.Add(Sound.Name.Invader4, "fastinvader4.wav"); SoundManager.Add(Sound.Name.Shoot, "invaderkilled.wav"); SoundManager.Add(Sound.Name.DeadAlien, "shoot.wav"); SoundManager.Add(Sound.Name.UFO, "ufo_highpitch.wav"); SoundManager.Add(Sound.Name.UFOExplosion, "ufo_lowpitch.wav"); SoundManager.Add(Sound.Name.Explosion, "explosion.wav"); //--------------------------------------------------------------------------------------------------------- // Create Images //--------------------------------------------------------------------------------------------------------- // --- aliens --- ImageManager.Add(Image.Name.OctopusA, Texture.Name.SpaceInvaders, 3, 3, 12, 8); ImageManager.Add(Image.Name.OctopusB, Texture.Name.SpaceInvaders, 18, 3, 12, 8); ImageManager.Add(Image.Name.AlienA, Texture.Name.SpaceInvaders, 33, 3, 11, 8); ImageManager.Add(Image.Name.AlienB, Texture.Name.SpaceInvaders, 47, 3, 11, 8); ImageManager.Add(Image.Name.SquidA, Texture.Name.SpaceInvaders, 61, 3, 8, 8); ImageManager.Add(Image.Name.SquidB, Texture.Name.SpaceInvaders, 72, 3, 8, 8); ImageManager.Add(Image.Name.Saucer, Texture.Name.SpaceInvaders, 99, 3, 16, 8); ImageManager.Add(Image.Name.Missile, Texture.Name.SpaceInvaders, 3, 29, 1, 4); ImageManager.Add(Image.Name.Ship, Texture.Name.SpaceInvaders, 3, 14, 13, 8); ImageManager.Add(Image.Name.AlienExplosion, Texture.Name.SpaceInvaders, 83, 3, 13, 8); ImageManager.Add(Image.Name.SaucerExplosion, Texture.Name.SpaceInvaders, 118, 3, 21, 8); ImageManager.Add(Image.Name.ShipExplosionA, Texture.Name.SpaceInvaders, 19, 14, 16, 8); ImageManager.Add(Image.Name.ShipExplosionB, Texture.Name.SpaceInvaders, 38, 14, 16, 8); ImageManager.Add(Image.Name.MissileExplosion, Texture.Name.SpaceInvaders, 7, 25, 8, 8); ImageManager.Add(Image.Name.BombExplosion, Texture.Name.SpaceInvaders, 86, 25, 6, 8); ImageManager.Add(Image.Name.BombDagger, Texture.Name.SpaceInvaders, 42, 27, 3, 6); ImageManager.Add(Image.Name.BombZigZag, Texture.Name.SpaceInvaders, 18, 26, 3, 7); ImageManager.Add(Image.Name.BombStraight, Texture.Name.SpaceInvaders, 65, 26, 3, 7); ImageManager.Add(Image.Name.ShieldBrick, Texture.Name.SpaceInvaders, 120, 35, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_LeftTop0, Texture.Name.SpaceInvaders, 115, 30, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_LeftTop1, Texture.Name.SpaceInvaders, 116, 31, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_LeftBottom, Texture.Name.SpaceInvaders, 119, 43, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_RightTop0, Texture.Name.SpaceInvaders, 132, 31, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_RightTop1, Texture.Name.SpaceInvaders, 130, 31, 4, 2); ImageManager.Add(Image.Name.ShieldBrick_RightBottom, Texture.Name.SpaceInvaders, 126, 43, 4, 2); //--------------------------------------------------------------------------------------------------------- // Create Glyphs //--------------------------------------------------------------------------------------------------------- GlyphManager.Add(Glyph.Name.Space, 32, Texture.Name.SpaceInvaders, 99, 56, 5, 7); GlyphManager.Add(Glyph.Name.Asterisk, 42, Texture.Name.SpaceInvaders, 115, 56, 5, 7); GlyphManager.Add(Glyph.Name.Hyphen, 45, Texture.Name.SpaceInvaders, 131, 56, 5, 7); GlyphManager.Add(Glyph.Name.Zero, 48, Texture.Name.SpaceInvaders, 3, 56, 5, 7); GlyphManager.Add(Glyph.Name.One, 49, Texture.Name.SpaceInvaders, 11, 56, 5, 7); GlyphManager.Add(Glyph.Name.Two, 50, Texture.Name.SpaceInvaders, 19, 56, 5, 7); GlyphManager.Add(Glyph.Name.Three, 51, Texture.Name.SpaceInvaders, 27, 56, 5, 7); GlyphManager.Add(Glyph.Name.Four, 52, Texture.Name.SpaceInvaders, 35, 56, 5, 7); GlyphManager.Add(Glyph.Name.Five, 53, Texture.Name.SpaceInvaders, 43, 56, 5, 7); GlyphManager.Add(Glyph.Name.Six, 54, Texture.Name.SpaceInvaders, 51, 56, 5, 7); GlyphManager.Add(Glyph.Name.Seven, 55, Texture.Name.SpaceInvaders, 59, 56, 5, 7); GlyphManager.Add(Glyph.Name.Eight, 56, Texture.Name.SpaceInvaders, 67, 56, 5, 7); GlyphManager.Add(Glyph.Name.Nine, 57, Texture.Name.SpaceInvaders, 75, 56, 5, 7); GlyphManager.Add(Glyph.Name.LessThan, 60, Texture.Name.SpaceInvaders, 83, 56, 5, 7); GlyphManager.Add(Glyph.Name.Equals, 61, Texture.Name.SpaceInvaders, 107, 56, 5, 7); GlyphManager.Add(Glyph.Name.GreaterThan, 62, Texture.Name.SpaceInvaders, 91, 56, 5, 7); GlyphManager.Add(Glyph.Name.Question, 63, Texture.Name.SpaceInvaders, 123, 56, 5, 7); GlyphManager.Add(Glyph.Name.A, 65, Texture.Name.SpaceInvaders, 3, 36, 5, 7); GlyphManager.Add(Glyph.Name.B, 66, Texture.Name.SpaceInvaders, 11, 36, 5, 7); GlyphManager.Add(Glyph.Name.C, 67, Texture.Name.SpaceInvaders, 19, 36, 5, 7); GlyphManager.Add(Glyph.Name.D, 68, Texture.Name.SpaceInvaders, 27, 36, 5, 7); GlyphManager.Add(Glyph.Name.E, 69, Texture.Name.SpaceInvaders, 35, 36, 5, 7); GlyphManager.Add(Glyph.Name.F, 70, Texture.Name.SpaceInvaders, 43, 36, 5, 7); GlyphManager.Add(Glyph.Name.G, 71, Texture.Name.SpaceInvaders, 51, 36, 5, 7); GlyphManager.Add(Glyph.Name.H, 72, Texture.Name.SpaceInvaders, 59, 36, 5, 7); GlyphManager.Add(Glyph.Name.I, 73, Texture.Name.SpaceInvaders, 67, 36, 5, 7); GlyphManager.Add(Glyph.Name.J, 74, Texture.Name.SpaceInvaders, 75, 36, 5, 7); GlyphManager.Add(Glyph.Name.K, 75, Texture.Name.SpaceInvaders, 83, 36, 5, 7); GlyphManager.Add(Glyph.Name.L, 76, Texture.Name.SpaceInvaders, 91, 36, 5, 7); GlyphManager.Add(Glyph.Name.M, 77, Texture.Name.SpaceInvaders, 99, 36, 5, 7); GlyphManager.Add(Glyph.Name.N, 78, Texture.Name.SpaceInvaders, 3, 46, 5, 7); GlyphManager.Add(Glyph.Name.O, 79, Texture.Name.SpaceInvaders, 11, 46, 5, 7); GlyphManager.Add(Glyph.Name.P, 80, Texture.Name.SpaceInvaders, 19, 46, 5, 7); GlyphManager.Add(Glyph.Name.Q, 81, Texture.Name.SpaceInvaders, 27, 46, 5, 7); GlyphManager.Add(Glyph.Name.R, 82, Texture.Name.SpaceInvaders, 35, 46, 5, 7); GlyphManager.Add(Glyph.Name.S, 83, Texture.Name.SpaceInvaders, 43, 46, 5, 7); GlyphManager.Add(Glyph.Name.T, 84, Texture.Name.SpaceInvaders, 51, 46, 5, 7); GlyphManager.Add(Glyph.Name.U, 85, Texture.Name.SpaceInvaders, 59, 46, 5, 7); GlyphManager.Add(Glyph.Name.V, 86, Texture.Name.SpaceInvaders, 67, 46, 5, 7); GlyphManager.Add(Glyph.Name.W, 87, Texture.Name.SpaceInvaders, 75, 46, 5, 7); GlyphManager.Add(Glyph.Name.X, 88, Texture.Name.SpaceInvaders, 83, 46, 5, 7); GlyphManager.Add(Glyph.Name.Y, 89, Texture.Name.SpaceInvaders, 91, 46, 5, 7); GlyphManager.Add(Glyph.Name.Z, 90, Texture.Name.SpaceInvaders, 99, 46, 5, 7); //--------------------------------------------------------------------------------------------------------- // Create Sprites //--------------------------------------------------------------------------------------------------------- // --- aliens --- GameSpriteManager.Add(GameSprite.Name.PurpleOctopus, Image.Name.OctopusA, 50, 300, 49, 33); GameSpriteManager.Add(GameSprite.Name.BlueCrab, Image.Name.AlienB, 200, 100, 45, 33); GameSpriteManager.Add(GameSprite.Name.GreenSquid, Image.Name.SquidA, 200, 300, 33, 33); GameSpriteManager.Add(GameSprite.Name.OrangeSaucer, Image.Name.Saucer, 50, 550, 59, 33, new Azul.Color(1.0f, 0.0f, 0.0f, 1.0f)); //-----Missile---- GameSpriteManager.Add(GameSprite.Name.Missile, Image.Name.Missile, 50, 50, 3, 15); //----Player Ship---- GameSpriteManager.Add(GameSprite.Name.Ship, Image.Name.Ship, 500, 100, 50, 30, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); //---Explosions--- GameSpriteManager.Add(GameSprite.Name.AlienExplosion, Image.Name.AlienExplosion, 50, 50, 33, 33); GameSpriteManager.Add(GameSprite.Name.ShipExplosion, Image.Name.ShipExplosionA, 50, 50, 55, 35); GameSpriteManager.Add(GameSprite.Name.SaucerExplosion, Image.Name.SaucerExplosion, 50, 50, 45, 35, new Azul.Color(1.0f, 0.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.BombExplosion, Image.Name.BombExplosion, 50, 50, 25, 25); GameSpriteManager.Add(GameSprite.Name.MissileExplosionRed, Image.Name.MissileExplosion, 50, 50, 20, 20, new Azul.Color(1.0f, 0.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.MissileExplosionGreen, Image.Name.MissileExplosion, 50, 50, 20, 20, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.MissileExplosionWhite, Image.Name.MissileExplosion, 50, 50, 20, 20); //----Bombs---- GameSpriteManager.Add(GameSprite.Name.BombDagger, Image.Name.BombDagger, 50, 50, 10, 25); GameSpriteManager.Add(GameSprite.Name.BombZigZag, Image.Name.BombZigZag, 50, 50, 10, 25); GameSpriteManager.Add(GameSprite.Name.BombStraight, Image.Name.BombStraight, 50, 50, 10, 25); //----Shield---- GameSpriteManager.Add(GameSprite.Name.ShieldBrick, Image.Name.ShieldBrick, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_LeftTop0, Image.Name.ShieldBrick_LeftTop0, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_LeftTop1, Image.Name.ShieldBrick_LeftTop1, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_LeftBottom, Image.Name.ShieldBrick_LeftBottom, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_RightTop0, Image.Name.ShieldBrick_RightTop0, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_RightTop1, Image.Name.ShieldBrick_RightTop1, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); GameSpriteManager.Add(GameSprite.Name.ShieldBrick_RightBottom, Image.Name.ShieldBrick_RightBottom, 50, 25, 12, 7, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); //----Ground---- GameSpriteManager.Add(GameSprite.Name.Ground, Image.Name.ShieldBrick, 50, 50, SpaceInvaders.ScreenWidth - 10, 5, new Azul.Color(0.0f, 1.0f, 0.0f, 1.0f)); //-------------------------------------------------------------------------- //Create Scenes //-------------------------------------------------------------------------- pHiScore = 0; pPlayer1Score = 0; pPlayer2Score = 0; pSceneContext = new SceneContext(); }