public void DealDamage() { Battle.Action offensiveAction = battle.GetOffensiveAction(); Battle.Action defensiveAction = battle.GetDefensiveAction(); bool reverse = offensiveAction == Battle.Action.EMPOWERED_ATTACK && defensiveAction == Battle.Action.COUNTER; BattleParticipant target = reverse ? battle.GetAttacker() : battle.GetDefender(); Stats stats = target.GetCurrentStats(); int damage = battlePredictions.GetDamage(offensiveAction, defensiveAction); damage = damage > 0 ? damage : 0; StartCoroutine(battleAnimations.ApplyDamage(reverse ? !battle.attacking : battle.attacking, target, stats.hp > damage ? damage : stats.hp)); stats.hp = stats.hp > damage ? stats.hp - damage : 0; }
public void PerformAnimations(Battle battleInstance) { bool attacking = battleInstance.attacking; Battle.Action attack = battleInstance.GetOffensiveAction(); Battle.Action defense = battleInstance.GetDefensiveAction(); if (defense == Battle.Action.SURRENDER) { Surrender(attacking); } else { switch (attack) { case Battle.Action.ATTACK: Attack(attacking); PerformDefense(attacking, defense, defense != Battle.Action.DEFEND); break; case Battle.Action.MAGIC: Magic(attacking); PerformDefense(attacking, defense, defense != Battle.Action.MAGIC_DEFEND); break; case Battle.Action.EMPOWERED_ATTACK: // empowered attack GameObject empower = attacking ? homeEmpower : awayEmpower; StartCoroutine(FadeIn(empower, delegate() { empower.SetActive(false); bool failDefend = defense != Battle.Action.COUNTER; if (failDefend) { EmpowerAttack(attacking); } PerformDefense(attacking, defense, failDefend); })); break; case Battle.Action.ITEM: PerformDefense(attacking, defense, false); break; } } }
void PerformDefense(bool attacking, Battle.Action defense, bool fail) { GameObject defendObj; switch (defense) { case Battle.Action.DEFEND: defendObj = attacking ? awayDefend : homeDefend; StartCoroutine(FadeIn(defendObj, delegate() { if (fail) { defendObj.SetActive(false); defendObj = attacking ? awayFailDefend : homeFailDefend; } StartCoroutine(FadeOut(defendObj, 2F)); })); break; case Battle.Action.MAGIC_DEFEND: defendObj = attacking ? awayMagicDefend : homeMagicDefend; StartCoroutine(FadeIn(defendObj, delegate() { if (fail) { defendObj.SetActive(false); defendObj = attacking ? awayFailMagicDefend : homeFailMagicDefend; } StartCoroutine(FadeOut(defendObj, 2F)); })); break; case Battle.Action.COUNTER: if (!fail) { Attack(!attacking); } break; } }
public int GetDamage(Battle.Action attack, Battle.Action defense) { switch (attack) { case Battle.Action.ATTACK: return(defense == Battle.Action.DEFEND ? attackDefend : attackFail); case Battle.Action.MAGIC: return(defense == Battle.Action.MAGIC_DEFEND ? magicMagicDefend : magicFail); default: // empowered attack switch (defense) { case Battle.Action.DEFEND: return(empoweredAttackDefend); case Battle.Action.MAGIC_DEFEND: return(empoweredAttackMagicDefend); default: // counter return(empoweredAttackCounter); } } }