Exemplo n.º 1
0
    internal BattleState GetWithDefeatedRemoved()
    {
        BattleStageSide newLeftSide  = LeftSide.GetRepositionedSurvivors();
        BattleStageSide newRightSide = RightSide.GetRepositionedSurvivors();

        return(new BattleState(newLeftSide, newRightSide));
    }
Exemplo n.º 2
0
    private List <BattleRound> GetProgression(BattleStageSide left, BattleStageSide right)
    {
        BattleState currentState = new BattleState(left, right);

        List <BattleRound> ret = new List <BattleRound>();

        while (ret.Count < BattleRoundLimit)
        {
            IEnumerable <BattalionBattleEffects> effects = currentState.GetUnitEffects().ToArray();
            BattleState withEffectsApplied = currentState.GetWithEffectsApplied(effects);
            if (withEffectsApplied.Status == BattleStatus.Ongoing)
            {
                BattleState withDefeatedRemoved = withEffectsApplied.GetWithDefeatedRemoved();
                BattleRound round = new BattleRound(currentState, effects, withEffectsApplied, withDefeatedRemoved);
                ret.Add(round);
                currentState = withDefeatedRemoved;
            }
            else
            {
                BattleRound round = new BattleRound(currentState, effects, withEffectsApplied, withEffectsApplied);
                ret.Add(round);
                break;
            }
        }
        return(ret);
    }
Exemplo n.º 3
0
    public Battle ToBattle()
    {
        BattleStageSide baseLeftSide  = new BattleStageSide(leftUnitsList);
        BattleStageSide baseRightSide = new BattleStageSide(rightUnitsList);

        BattleStageSide leftSide  = baseLeftSide.GetRepositionedSurvivors();
        BattleStageSide rightSide = baseRightSide.GetRepositionedSurvivors();

        return(new Battle(leftSide, rightSide));
    }
Exemplo n.º 4
0
    public override BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies)
    {
        BattalionEffectsBuilder builder = new BattalionEffectsBuilder(this);
        int rallyStrength = self.GetAttribute(BattalionAttribute.RallyStrength);

        foreach (BattalionState item in allies)
        {
            builder.Add(item.Id, BattalionAttribute.RemainingMoral, rallyStrength);
        }
        return(builder.ToEffects());
    }
Exemplo n.º 5
0
    public BattalionBattleEffects GetEffects(BattleStageSide allies, BattleStageSide enemies)
    {
        List <BattalionStateModifier> modifiers = new List <BattalionStateModifier>();
        List <BattalionSpawnEffect>   spawns    = new List <BattalionSpawnEffect>();

        foreach (BattalionEffector attack in EffectSources)
        {
            var effects = attack.GetEffect(this, allies, enemies);
            modifiers.AddRange(effects.UnitModifications);
            spawns.AddRange(effects.UnitSpawns);
        }
        return(new BattalionBattleEffects(modifiers, spawns));
    }
Exemplo n.º 6
0
    /// <summary>
    /// Returns all front units until a unit has anticharge
    /// </summary>
    private IEnumerable <BattalionState> GetChargeTargets(BattleStageSide enemies, BattalionState regularTarget)
    {
        IEnumerable <BattalionState> frontLineUnits = enemies.Where(unit => unit.Position.IsFrontLine);

        if (frontLineUnits.Any(IsAntiCharge))
        {
            return(new BattalionState[0]);
        }
        else
        {
            return(frontLineUnits.Where(unit => unit != regularTarget));
        }
    }
Exemplo n.º 7
0
    private IEnumerable <BattalionState> GetSplashTargets(BattalionState target, BattleStageSide enemies)
    {
        IEnumerable <BattalionPosition> positions = target.Position.GetAdjacentPositions().ToArray();
        HashSet <BattalionPosition>     set       = new HashSet <BattalionPosition>(positions);
        List <BattalionState>           ret       = new List <BattalionState>();

        foreach (var item in enemies)
        {
            if (set.Contains(item.Position))
            {
                ret.Add(item);
            }
        }
        return(ret);
    }
Exemplo n.º 8
0
    public override BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies)
    {
        BattalionEffectsBuilder builder = new BattalionEffectsBuilder(this);

        int reloadingState = self.GetAttribute(BattalionAttribute.ReloadingState);

        if (reloadingState > 0)
        {
            builder.Add(self.Id, BattalionAttribute.ReloadingState, -1);
        }
        else
        {
            if (IsWithinAttackingRange(self.Position))
            {
                DoAttack(builder, self, enemies);
            }
        }
        return(builder.ToEffects());
    }
Exemplo n.º 9
0
    private void DoAttack(BattalionEffectsBuilder builder, BattalionState self, BattleStageSide enemies)
    {
        BattalionState     target          = enemies.GetTargetFor(self.Position);
        BattalionAttribute damageAttribute = GetDamageAttributeFor(damageType);

        builder.Add(target.Id, damageAttribute, weaponStrength);

        if (splashDamage > 0)
        {
            IEnumerable <BattalionState> splashTargets = GetSplashTargets(target, enemies).ToArray();
            foreach (BattalionState splashTarget in splashTargets)
            {
                builder.Add(splashTarget.Id, damageAttribute, splashDamage);
            }
        }

        int reloadingSpeed = self.GetAttribute(BattalionAttribute.ReloadingSpeed);

        builder.Add(self.Id, BattalionAttribute.ReloadingState, reloadingSpeed);
    }
Exemplo n.º 10
0
    private BattleState GetNewBattleState(IEnumerable <BattalionState> modifiedUnits, IEnumerable <BattalionSpawnEffect> spawns)
    {
        ModifiedSideSorter leftSideSorter  = new ModifiedSideSorter(LeftSide);
        ModifiedSideSorter rightSideSorter = new ModifiedSideSorter(RightSide);

        foreach (BattalionState battalionState in modifiedUnits)
        {
            leftSideSorter.Incorporate(battalionState);
            rightSideSorter.Incorporate(battalionState);
        }

        foreach (BattalionSpawnEffect spawn in spawns)
        {
            IncorporateSpawn(spawn, leftSideSorter, rightSideSorter);
        }

        BattleStageSide left  = leftSideSorter.ToSide();
        BattleStageSide right = rightSideSorter.ToSide();

        return(new BattleState(left, right));
    }
Exemplo n.º 11
0
    public override BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies)
    {
        BattalionEffectsBuilder builder = new BattalionEffectsBuilder(this);

        if (self.Position.X == 0)
        {
            BattalionState target = enemies.GetTargetFor(self.Position);
            if (attackType == MeleeAttackType.Regular || attackType == MeleeAttackType.Charging)
            {
                DoMeleeAttack(builder, self, target);
            }
            if (attackType == MeleeAttackType.Charging)
            {
                IEnumerable <BattalionState> chargeTargets = GetChargeTargets(enemies, target);
                foreach (BattalionState chargeTarget in chargeTargets)
                {
                    DoMeleeAttack(builder, self, chargeTarget);
                }
            }
        }
        return(builder.ToEffects());
    }
Exemplo n.º 12
0
 public abstract BattalionBattleEffects GetEffect(BattalionState self, BattleStageSide allies, BattleStageSide enemies);
Exemplo n.º 13
0
 public Battle(BattleStageSide left, BattleStageSide right)
 {
     Progression = GetProgression(left, right).AsReadOnly();
 }
Exemplo n.º 14
0
 public BattleState(BattleStageSide leftSide, BattleStageSide rightSide)
 {
     LeftSide  = leftSide;
     RightSide = rightSide;
     Status    = GetStatus();
 }
Exemplo n.º 15
0
 public ModifiedSideSorter(BattleStageSide basis)
 {
     unitsDictionary = basis.ToDictionary(item => item.Id);
 }