public AirCombatUnit CreateAirCombatUnit(int unitId, ScenarioUnit scenarioUnit) { AirCombatUnit unit = new AirCombatUnit(); unit.UnitId = unitId; unit.Equipment = EquipmentFactory.GetEquipment(scenarioUnit.EquipmentId); unit.UnitName = String.Format("{0} {1}", unitId, unit.Equipment.EquipmentDescription); unit.CoreIndicator = scenarioUnit.CordInd; unit.CurrentExperience = scenarioUnit.Experience; unit.CurrentStrength = scenarioUnit.Strength; unit.CurrentAttackPoints = scenarioUnit.Strength; unit.Nation = Game.NationFactory.GetNation(scenarioUnit.NationId); unit.CoreIndicator = scenarioUnit.CordInd; unit.CurrentAmmo = unit.Equipment.MaxAmmo; unit.CurrentFuel = unit.Equipment.MaxFuel; unit.CanMove = true; unit.CanAttack = true; unit.CurrentTileId = scenarioUnit.StartingScenarioTileId; return unit; }
private List<Tile> GetAirAttackableTiles(AirCombatUnit airUnit, Tile tile) { List<Tile> tiles = new List<Tile>(); switch(airUnit.EquipmentClassEnum) { case EquipmentClassEnum.Fighter: //Air Target tiles = GetAdjacentTiles(tile, 1, true); tiles = tiles.Where(t => t.AirUnit != null).ToList(); tiles = tiles.Where(t => t.AirUnit.SideEnum != airUnit.SideEnum).ToList(); //Ground Target if (tile.GroundUnit != null) { if (tile.GroundUnit.SideEnum != airUnit.SideEnum) { tiles.Add(tile); } } break; case EquipmentClassEnum.TacticalBomber: //Air Target tiles = GetAdjacentTiles(tile, 1, true); tiles = tiles.Where(t => t.AirUnit != null).ToList(); tiles = tiles.Where(t => t.AirUnit.SideEnum != airUnit.SideEnum).ToList(); //Ground Target if (tile.GroundUnit != null) { if (tile.GroundUnit.SideEnum != airUnit.SideEnum) { tiles.Add(tile); } } break; case EquipmentClassEnum.StrategicBomber: //Ground Target if (tile.GroundUnit != null) { if (tile.GroundUnit.SideEnum != airUnit.SideEnum) { tiles.Add(tile); } } //Victory Tile Target if (tile.VictoryIndicator == true) { if (tile.Nation.SideEnum != airUnit.Nation.SideEnum) { tiles.Add(tile); } } break; } return tiles; }
private static TargetAndJumpOffTile DetermineAirAttackJumpOffTile(AirCombatUnit airCombatUnit, Tile currentTile) { List<Tile> adjacentTiles = null; List<TargetAndJumpOffTile> targetAndJumpOffTiles = new List<TargetAndJumpOffTile>(); TargetAndJumpOffTile targetAndJumpOffTile = null; if (airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.Fighter) { foreach (Tile tile in airCombatUnit.MoveableTiles) { adjacentTiles = Game.TileFactory.GetAdjacentTiles(tile, 1, false); adjacentTiles = adjacentTiles.Where(t => t.AirUnit != null).ToList(); adjacentTiles = adjacentTiles.Where(t => t.AirUnit.SideEnum == SideEnum.Axis).ToList(); foreach (Tile potentialTargetTile in adjacentTiles) { targetAndJumpOffTile = new TargetAndJumpOffTile(); targetAndJumpOffTile.TargetTile = potentialTargetTile; targetAndJumpOffTile.JumpOffTile = tile; targetAndJumpOffTiles.Add(targetAndJumpOffTile); } } return DetermineTarget(targetAndJumpOffTiles, TargetTypeEnum.Air); } else if(airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.TacticalBomber) { foreach (Tile tile in airCombatUnit.MoveableTiles) { if (tile.GroundUnit != null) { if (tile.GroundUnit.SideEnum == SideEnum.Axis) { targetAndJumpOffTile = new TargetAndJumpOffTile(); targetAndJumpOffTile.TargetTile = tile; targetAndJumpOffTile.JumpOffTile = tile; targetAndJumpOffTiles.Add(targetAndJumpOffTile); } } } } else if (airCombatUnit.EquipmentClassEnum == EquipmentClassEnum.StrategicBomber) { foreach (Tile tile in airCombatUnit.MoveableTiles) { if (tile.Nation.SideEnum == SideEnum.Axis && tile.VictoryIndicator == true) { targetAndJumpOffTile = new TargetAndJumpOffTile(); targetAndJumpOffTile.TargetTile = tile; targetAndJumpOffTile.JumpOffTile = tile; targetAndJumpOffTiles.Add(targetAndJumpOffTile); } } } return null; }
private static void MoveAirCombatUnit(AirCombatUnit airCombatUnit, Tile currentTile) { Tile targetTile = null; TargetAndJumpOffTile targetAndJumpOffTile = null; targetAndJumpOffTile = DetermineAirAttackJumpOffTile(airCombatUnit, currentTile); if (airCombatUnit.CanAttack && targetAndJumpOffTile != null && airCombatUnit.CurrentFuel >= airCombatUnit.Equipment.MaxFuel*.5) { Game.BoardFactory.ActiveTile = currentTile; Game.BoardFactory.ActiveUnit = airCombatUnit; Game.BoardFactory.MoveUnitForComputerPlayer(airCombatUnit, currentTile, targetAndJumpOffTile.JumpOffTile); Game.BoardFactory.ActiveTile = targetAndJumpOffTile.JumpOffTile; Game.BoardFactory.CalculateBattleForComputerPlayer(targetAndJumpOffTile.TargetTile); return; } targetTile = DetermineAirWithdrawlTile(airCombatUnit); if (targetTile != null) { Game.BoardFactory.ActiveTile = currentTile; Game.BoardFactory.ActiveUnit = airCombatUnit; Game.BoardFactory.MoveUnitForComputerPlayer(airCombatUnit, currentTile, targetTile); return; } }
private static TargetAndJumpOffTile DetermineLandAttackJumpOffTile(AirCombatUnit airCombatUnit, Tile currentTile) { List<Tile> adjacentTiles = null; List<TargetAndJumpOffTile> targetAndJumpOffTiles = new List<TargetAndJumpOffTile>(); TargetAndJumpOffTile targetAndJumpOffTile = null; foreach (Tile tile in airCombatUnit.MoveableTiles) { adjacentTiles = Game.TileFactory.GetAdjacentTiles(tile, 1, false); adjacentTiles = adjacentTiles.Where(t => t.GroundUnit != null).ToList(); adjacentTiles = adjacentTiles.Where(t => t.GroundUnit.SideEnum == SideEnum.Axis).ToList(); foreach (Tile potentialTargetTile in adjacentTiles) { targetAndJumpOffTile = new TargetAndJumpOffTile(); targetAndJumpOffTile.TargetTile = potentialTargetTile; targetAndJumpOffTile.JumpOffTile = tile; targetAndJumpOffTiles.Add(targetAndJumpOffTile); } } return DetermineTarget(targetAndJumpOffTiles, TargetTypeEnum.SoftGround); }
private static Tile DetermineAirWithdrawlTile(AirCombatUnit airCombatUnit) { foreach (Tile tile in airCombatUnit.MoveableTiles) { if(tile.Terrain.TerrainTypeEnum == TerrainTypeEnum.Airfield && tile.Nation.SideEnum == SideEnum.Allies) { return tile; } } return null; }
private void DisplayAirCombatUnitInformation(AirCombatUnit airCombatUnit) { SetCombatUnitTextBlock("Ammo", airCombatUnit.Equipment.MaxAmmo.ToString()); SetCombatUnitTextBlock("Fuel", airCombatUnit.Equipment.MaxFuel.ToString()); SetCombatUnitTextBlock("Movement Range", airCombatUnit.Equipment.BaseMovement.ToString()); SetCombatUnitTextBlock("Hard Attack", airCombatUnit.Equipment.HardAttack.ToString()); SetCombatUnitTextBlock("Soft Attack", airCombatUnit.Equipment.SoftAttack.ToString()); SetCombatUnitTextBlock("Air Attack", airCombatUnit.Equipment.AirAttack.ToString()); SetCombatUnitTextBlock("Sea Attack", airCombatUnit.Equipment.NavalAttack.ToString()); SetCombatUnitTextBlock("Ground Defense", airCombatUnit.Equipment.GroundDefense.ToString()); SetCombatUnitTextBlock("Air Defense", airCombatUnit.Equipment.AirDefense.ToString()); SetCombatUnitTextBlock("Sea Defense", airCombatUnit.Equipment.SeaDefense.ToString()); SetCombatUnitTextBlock("COST", airCombatUnit.Equipment.UnitCost.ToString()); }