Ejemplo n.º 1
0
    /// <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);