/// <summary> /// Unit special action selected event behaviour. /// </summary> /// <remarks> /// Returns special ability selection state for specified type of unit /// or executes special ability if no animation specified. /// </remarks> /// <returns>New state of single player turn state machine.</returns> public override TurnState SpecialActionSelected() { switch (unit.UnitType) { case UnitTypeEnum.IFV: IFVUnit ifv = (IFVUnit)unit; ifv.UseSpecial(); return(new ReadyState(ui, player)); case UnitTypeEnum.Tank: return(new TankSpecialAttackSelectedState(ui, player, unit)); case UnitTypeEnum.HeavyTank: HeavyTank heayTank = (HeavyTank)unit; heayTank.UseSpecial(); return(new ReadyState(ui, player)); case UnitTypeEnum.Helicopter: return(new HelicopterSpecialAttackSelectedState(ui, player, unit)); case UnitTypeEnum.Artillery: return(new ArtillerySpecialAttackSelectedState(ui, player, unit)); default: throw new InvalidProgramException("Unreacheable code path."); } }
public static Enemy CreateEnemy(Vector2i coords, string enemyType, string AIMCType, List <Vector2i> patrolRoute, int health, Region region) { if (EnemyTypes.ContainsKey(enemyType) && AIMCTypes.ContainsKey(AIMCType)) { Enemy newEnemy = EnemyTypes[enemyType](new Vector2f(coords.X, coords.Y)); if (health != -1) { newEnemy.Health = health; } newEnemy.MovementController = AIMCTypes[AIMCType](newEnemy switch { LightTank _ => 0.75, MediumTank _ => 1.5, HeavyTank _ => 2.25, _ => 1 }, newEnemy, patrolRoute);