public RiotGuardWallMemento() { wallPos = RiotGuardWall.wallPos; drillingTime = RiotGuardWall.drillingTime; timeToDrill = RiotGuardWall.timeToDrill; mode = RiotGuardWall.mode; drillingEmitterMemento = RiotGuardWall.drillingEmitter.GenerateMementoFromCurrentFrame(); }
public static void StartMoving() { if (mode != RiotGuardMode.Moving) SoundManager.PlaySoundOnce("RiotGuardAlarm", playInReverseDuringReverse: true); drillingTime = 0; mode = RiotGuardMode.Moving; }
public static void Update(GameTime gameTime) { float seconds = gameTime.getSeconds(); drillingEmitter.active = false; int oldLevelX = levelX; switch (mode) { case RiotGuardMode.Waiting: break; case RiotGuardMode.Drilling: drillingTime += seconds; if (drillingTime >= timeToDrill) farthestLevelX++; int heroLevelX = 0; foreach (Hero hero in RetroGame.getHeroes()) { if (hero.levelX > oldHeroLevelX) heroLevelX = hero.levelX; } if(heroLevelX > farthestLevelX) farthestLevelX = heroLevelX; if (farthestLevelX > levelX) { StartMoving(); } float drillingRatio = drillingTime / timeToDrill; drillingEmitter.position = new Vector2(wallPosition + Level.TILE_SIZE / 2, guardCoverageArea.Top); drillingEmitter.positionB = new Vector2(wallPosition + Level.TILE_SIZE / 2, guardCoverageArea.Bottom); drillingEmitter.startSize = DRILLING_PARTICLE_GROWTH * drillingRatio + DRILLING_PARTICLE_BASE_SIZE; drillingEmitter.active = true; break; case RiotGuardMode.Moving: wallPosition += MOVING_SPEED * seconds; break; } drillingEmitter.Update(gameTime); updateGuards(gameTime); if(levelX > oldLevelX) mode = RiotGuardMode.Drilling; float levelInterp = 1 - (float)levelX / LEVELS_TO_MAX_SPEED; timeToDrill = levelInterp * (MAX_TIME_TO_DRILL - MIN_TIME_TO_DRILL) + MIN_TIME_TO_DRILL; foreach (Hero hero in RetroGame.getHeroes()) { if(!hero.Alive) continue; if (wallPosition - hero.position.X >= AUTO_GAMEOVER_DISTANCE) { RetroGame.GameOver(); } if (wallPosition >= hero.getLeft().X) hero.collideWithRiotGuardWall(); } }
public static void Initialize(SaveGame saveGame = null) { riotGuardTexture = TextureManager.Get(RIOTGUARD_TEXTURE_NAME); drillingEmitter = LineEmitter.getPrebuiltEmitter(PrebuiltLineEmitter.RiotGuardWallDrillSparks); farthestLevelX = (saveGame != null) ? saveGame.levelX : LevelManager.STARTING_LEVEL.X; wallPos = new Vector2((farthestLevelX - 0.5f) * Level.TEX_SIZE, 0); if(saveGame != null) farthestLevelX++; //automatically chase after reloading int heroY = (int)RetroGame.getHeroes()[0].position.Y; mode = (saveGame != null) ? RiotGuardMode.Moving : RiotGuardMode.Waiting; drillingTime = 0; heroCoverageArea = new Rectangle[RetroGame.NUM_PLAYERS]; guardOffsets = new RiotGuardOffset[GUARD_OFFSET_COUNT]; for(int i = 0; i < GUARD_OFFSET_COUNT; i++) { guardOffsets[i] = new RiotGuardOffset(); } }