예제 #1
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());
    }
예제 #2
0
    private void DoMeleeAttack(BattalionEffectsBuilder builder, BattalionState self, BattalionState target)
    {
        int strength = self.GetAttribute(BattalionAttribute.Strength);
        BattalionAttribute damageAttribute = GetDamageAttributeFor(damageType);

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

        int retributionDamage = target.GetAttribute(BattalionAttribute.MeleeRetribution);

        if (retributionDamage > 0)
        {
            builder.Add(self.Id, BattalionAttribute.Damage, retributionDamage);
        }
    }
예제 #3
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());
    }
예제 #4
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);
    }
예제 #5
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());
    }