public MissileModel FireMissile(ActionDirections actionDirection) { StopWatching(); ViewModel.IsAttacking = "True"; var missile = new MissileModel(new MissileViewModel()) { X = this.X, Y = this.Y, Range = 6, Direction = actionDirection, }; if (ViewModel.Image == AntViewModel.RedAntImage) { missile.ViewModel.Image = _redMissileImage; } else if (ViewModel.Image == AntViewModel.YellowAntImage) { missile.ViewModel.Image = _yellowMissileImage; } switch (actionDirection) { case ActionDirections.Up: { missile.Y -= 1; missile.ViewModel.Angle = 270; break; } case ActionDirections.Left: { missile.X -= 1; missile.ViewModel.Angle = 180; break; } case ActionDirections.Down: { missile.Y += 1; missile.ViewModel.Angle = 90; break; } case ActionDirections.Right: { missile.X += 1; missile.ViewModel.Angle = 0; break; } } return(missile); }
private void TurnMissileIntoExplosions(MissileModel missile) { missile.ViewModel.Image = _explosionImage; missile.Type = MovableObjectsTypes.Explosion; var movableObjectsToDestroy = _antWarsViewModel.MovableObjectsCollection. Where(mo => mo.Type == MovableObjectsTypes.Bot || mo.Type == MovableObjectsTypes.Missile). Where(mo => mo.X >= missile.X - 1 && mo.X <= missile.X + 1 && mo.Y >= missile.Y - 1 && mo.Y <= missile.Y + 1). Where(mo => mo != missile). Where(mo => mo.Type != MovableObjectsTypes.Explosion).ToList(); var unmovableObjectsToDestroy = _antWarsViewModel.BattlefieldObjectsCollection. Where(mo => mo.X >= missile.X - 1 && mo.X <= missile.X + 1 && mo.Y >= missile.Y - 1 && mo.Y <= missile.Y + 1). Where(mo => mo.Type == UnmovableObjectTypes.Wood).ToList(); foreach (var item in movableObjectsToDestroy) { switch (item.Type) { case MovableObjectsTypes.Bot: { _listOfAntsToRemove.Add((AntModel)item); break; } case MovableObjectsTypes.Missile: { TurnMissileIntoExplosions((MissileModel)item); break; } } } foreach (var item in unmovableObjectsToDestroy) { if (item.Type == UnmovableObjectTypes.Wood) { _antWarsViewModel.BattlefieldObjectsCollection.Remove(item); } } }