Beispiel #1
0
    private static IEnumerator _Attack(Offensive offensive)
    {
        if (offensive.Attacker.Weapon.uses <= 0)
        {
            yield break;
        }

        if (GameSettings.DoBattleAnimation)
        {
            yield return(BattleAnimController.WaitForBattleAnimation(offensive));
        }

        if (offensive.Hit)
        {
            offensive.Defender.Damage(offensive.Damage);

            Debug.Log(offensive.Attacker.Unit.name + " attacked " + offensive.Defender.Unit.name + " for " + offensive.Damage + " damage \n" +
                      offensive.Defender.Unit.name + " hp: " + offensive.Defender.CurrentHP + "/" + offensive.Defender.Unit.stats.hp);
        }
        else
        {
            Debug.Log(offensive.Attacker.Unit.name + " missed " + offensive.Defender.Unit.name);
        }

        if (!offensive.Attacker.Weapon.unbreakable)
        {
            offensive.Attacker.Weapon.uses--;
        }

        if (offensive.Defender == offensive.Attacker.LastTarget && offensive.Attacker.LastTarget != null)
        {
            offensive.Attacker.RepeatedTarget++;
        }
        else
        {
            offensive.Attacker.LastTarget     = offensive.Defender;
            offensive.Attacker.RepeatedTarget = 1;
        }

        if (offensive.Attacker.CurrentHP <= 0)
        {
            UnitManager.Kill(offensive.Attacker);
        }
        if (offensive.Defender.CurrentHP <= 0)
        {
            UnitManager.Kill(offensive.Defender);
        }

        offensive.Attacker.AddEXP(
            StatsCalc.EXPGain_Damage(
                offensive.Attacker.Unit.stats.level,
                offensive.Defender.Unit.stats.level,
                offensive.Attacker.RepeatedTarget,
                offensive.Defender == null || offensive.Defender.CurrentHP <= 0,
                false
                )
            );

        while (GameSettings.DoBattleAnimation && BattleAnimController.IsAnimating)
        {
            yield return(null);
        }

        yield return(new WaitForSeconds(0.5f));
    }