// Updates door timer if on. If timer reaches 0 handles situation separately depending on level and makes timer switch appear again. private void UpdateDoorTimer(GameTime gameTime) { if (doorTimerOn) { doorTimer -= gameTime.ElapsedGameTime; if (doorTimer.Seconds <= 0) { // Turn timer diplay off doorTimerOn = false; // If door timer has been switched off reset everything that was changed // Handle situation depending on level switch (levelIndex) { case 2: // Put laser beam back in place for (int i = 0; i < 3; i++) LoadLaserTile(32, 13 + i, false, true, false, RotationDirection.None); // Put timer switch back in place Tiles[59, 5] = LoadTile("timerTile", TileCollision.Timer); break; case 5: // Put lasers back in place for (int i = 0; i < 3; i++) { LoadLaserTile(140, 49 + i, false, true, false, RotationDirection.None); LoadLaserTile(139, 59 + i, false, true, false, RotationDirection.None); } // Unblock ladder Tiles[189, 21] = new Tile(null, TileCollision.Passable); Tiles[190, 21] = new Tile(null, TileCollision.Passable); Tiles[190, 22] = new Tile(null, TileCollision.Passable); // Put timer switch back in place Tiles[215, 13] = LoadTile("timerTile", TileCollision.Timer); break; default: break; } // Remove enemies created by timer event (for timers in every level) for (int i = 0; i < Enemies.Count; i++) { Enemy enemy = Enemies[i]; if (enemy.createdByEvent) enemy.Remove(); } // Remove flashing lasers created by timer event (for timers in every level) for (int i = 0; i < lasers.Count; i++) { Laser laser = lasers[i]; if (laser.createdByEvent && laser.flashing) laser.Remove(); } } } }
/* * Reloads all levels platforms, lifts and gun pickups as the may have been disturbed during previous play */ private void reloadNonstaticComponents() { // Loop over every tileType in stored char array of level and reload only falling platforms (so dont have to reload whole // level on each death) for (int y = 0; y < Height; ++y) { for (int x = 0; x < Width; ++x) { char tileType = levelChars[x, y]; if (inSudo3D()) { switch (tileType) { case 'T': tiles[x, y] = LoadTurretTile(x, y, false, false); break; case 'M': tiles[x, y] = LoadTurretTile(x, y, false, true); break; // Reload enemies case 'r': tiles[x, y] = LoadEnemyTile(x, y, "MonsterR", false); break; case 'l': tiles[x, y] = LoadEnemyTile(x, y, "MonsterL", false); break; case 'U': tiles[x, y] = LoadEnemyTile(x, y, "MonsterU", false); break; case '|': tiles[x, y] = LoadLaserTile(x, y, false, true, false, RotationDirection.None); break; case '=': tiles[x, y] = LoadLaserTile(x, y, false, false, false, RotationDirection.None); break; case '%': tiles[x, y] = LoadLaserTile(x, y, false, true, false, RotationDirection.Clockwise); break; case 't': if (inCarRaceMode()) { // Load different triggers depending on zone in level if (x > 690) tiles[x, y] = LoadLevelTile("iceFloorTile", TileCollision.Trigger); else if (x > 524) tiles[x, y] = LoadLevelTile("pavementTile", TileCollision.Trigger); else if (x > 263) tiles[x, y] = LoadLevelTile("grassTile", TileCollision.Trigger); else tiles[x, y] = LoadTile("transparentTile", TileCollision.Trigger); } else tiles[x, y] = LoadTile("transparentTile", TileCollision.Trigger); break; // was "triggerTile" case '+': tiles[x, y] = LoadTile("iceTargetTile", TileCollision.Target); break; } } else { switch (tileType) { case '^': if (levelIndex == 11) tiles[x, y] = LoadLevelTile("flyUpTile", TileCollision.Trigger); break; case '4': tiles[x, y] = LoadLevelTile("slopeGrassFloorTile", TileCollision.Slope); break; case '-': tiles[x, y] = LoadFallingPlatformTile(x, y); break; case 'p': tiles[x, y] = LoadTile("pistolTile", TileCollision.Gun); break; case 'Z': tiles[x, y] = LoadTile("powerBulletTile", TileCollision.Gun); break; case 'v': tiles[x, y] = LoadLevelTile("vehicleTile", TileCollision.Vehicle); break; case 'L': tiles[x, y] = LoadElevatorTile(x, y); break; case '[': tiles[x, y] = LoadMovingSpikeTile(x, y, false, false, true); break; case ']': tiles[x, y] = LoadMovingSpikeTile(x, y, false, true, true); break; case '_': tiles[x, y] = LoadMovingPlatformTile(x, y, false, false, true); break; case '|': tiles[x, y] = LoadMovingPlatformTile(x, y, false, false, false); break; case ':': tiles[x, y] = LoadMovingPlatformTile(x, y, false, true, true); break; case ';': tiles[x, y] = LoadMovingPlatformTile(x, y, false, true, false); break; case 't': tiles[x, y] = LoadTile("transparentTile", TileCollision.Trigger); break; // was "triggerTile" case 'O': tiles[x, y] = LoadLevelTile("visibleTriggerTile", TileCollision.Trigger); break; case 'l': tiles[x, y] = LoadLaserTile(x, y, false, true, false, RotationDirection.None); break; case '=': tiles[x, y] = LoadLaserTile(x, y, false, false, false, RotationDirection.None); break; case '*': if (levelIndex == 9) { tiles[x, y] = LoadTile("brickTargetTile", TileCollision.Target); break; } tiles[x, y] = LoadLaserTile(x, y, false, true, true, RotationDirection.None); break; case '&': tiles[x, y] = LoadLaserTile(x, y, false, false, true, RotationDirection.None); break; case '{': tiles[x, y] = LoadLaserTile(x, y, false, true, false, RotationDirection.Clockwise); break; case '+': tiles[x, y] = LoadTile("targetTile", TileCollision.Target); break; case '!': tiles[x, y] = LoadTile("timerTile", TileCollision.Timer); break; case 'T': tiles[x, y] = LoadTurretTile(x, y, false, false); break; case 'M': tiles[x, y] = LoadTurretTile(x, y, false, true); break; // Reload enemies case 'a': tiles[x, y] = LoadEnemyTile(x, y, "MonsterA", false); break; case 'b': tiles[x, y] = LoadEnemyTile(x, y, "MonsterB", false); break; case 'c': tiles[x, y] = LoadEnemyTile(x, y, "MonsterC", false); break; case 'd': tiles[x, y] = LoadEnemyTile(x, y, "MonsterD", false); break; case 'e': tiles[x, y] = LoadEnemyTile(x, y, "Boss1", false); break; case 'f': tiles[x, y] = LoadEnemyTile(x, y, "MonsterF", false); break; case 'g': tiles[x, y] = LoadEnemyTile(x, y, "MonsterG", false); break; case 'H': tiles[x, y] = LoadEnemyTile(x, y, "MonsterH", false); break; case 'I': tiles[x, y] = LoadEnemyTile(x, y, "MonsterI", false); break; case 'j': tiles[x, y] = LoadEnemyTile(x, y, "Boss2", false); break; case 'k': tiles[x, y] = LoadEnemyTile(x, y, "MonsterK", false); break; case 'm': tiles[x, y] = LoadEnemyTile(x, y, "MonsterM", false); break; case 'n': tiles[x, y] = LoadEnemyTile(x, y, "MonsterN", false); break; case 'N': tiles[x, y] = LoadEnemyTile(x, y, "Boss3", false); break; case 'P': tiles[x, y] = LoadEnemyTile(x, y, "MonsterP", false); break; case 'q': tiles[x, y] = LoadEnemyTile(x, y, "MonsterQ", false); break; case 'x': tiles[x, y] = LoadEnemyTile(x, y, "MonsterX", false); break; case 'y': tiles[x, y] = LoadEnemyTile(x, y, "MonsterY", false); break; case 'z': tiles[x, y] = LoadEnemyTile(x, y, "Boss4", false); break; case 'Y': tiles[x, y] = LoadEnemyTile(x, y, "Boss5", false); break; case '.': tiles[x, y] = new Tile(null, TileCollision.Passable); break; case ',': if (GetTileSet() == "Street/") tiles[x, y] = LoadLevelTile("brickPlatformTile", TileCollision.Impassable); else tiles[x, y] = new Tile(null, TileCollision.Wind); break; default: break; } } } } }