public Map CopyAndFlip(Map map, CoordinateFlipper flipper, Dictionary <int, Entity> flippedEntities) { var copy = new Map(map); // Copy all entities including walls for (var y = 0; y < map.Height; y++) { for (var x = 0; x < map.Width; x++) { var entity = map.GetEntity(x, y); if (entity == null) { continue; } Entity flippedEntity = null; if (entity.GetType() == typeof(Alien)) { flippedEntity = Alien.CopyAndFlip((Alien)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(Missile)) { flippedEntity = Missile.CopyAndFlip((Missile)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(Bullet)) { flippedEntity = Bullet.CopyAndFlip((Bullet)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(Shield)) { flippedEntity = Shield.CopyAndFlip((Shield)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(Ship)) { flippedEntity = Ship.CopyAndFlip((Ship)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(AlienFactory)) { flippedEntity = AlienFactory.CopyAndFlip((AlienFactory)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(MissileController)) { flippedEntity = MissileController.CopyAndFlip((MissileController)entity, flipper, flippedEntities); } else if (entity.GetType() == typeof(Wall)) { flippedEntity = Wall.CopyAndFlip((Wall)entity, flipper, flippedEntities); } if ((flippedEntity != null) && (copy.GetEntity(flippedEntity.X, flippedEntity.Y) == null)) { copy.AddEntity(flippedEntity); } } } return(copy); }
public static AlienManager CopyAndFlip(AlienManager alienManager, CoordinateFlipper flipper, Dictionary <int, Entity> flippedEntities) { var copy = new AlienManager(alienManager) { PlayerNumber = alienManager.PlayerNumber == 1 ? 2 : 1, DeltaX = -alienManager.DeltaX }; // Clear default copy of waves foreach (var wave in copy.Waves) { wave.Clear(); } copy.Waves.Clear(); // Copy waves flipped for (var i = alienManager.Waves.Count - 1; i >= 0; i--) { var wave = alienManager.Waves[i]; var waveList = new List <Alien>(); copy.Waves.Add(waveList); foreach (var alien in wave) { waveList.Add(Alien.CopyAndFlip(alien, flipper, flippedEntities)); } } return(copy); }