float CalculateRating(BattleSimulation battle) { float damageDealt = (float)battle.GetAttackerDamage(); float accuracy = (float)battle.GetAttackerAccuracy(); float attacks = (float)battle.GetAttackerAttacks(); return(attacks * damageDealt * accuracy * 0.01f); }
IEnumerator Combat(GameObject attacker, GameObject defender, GameObject aPanel, GameObject dPanel, int range) { attacking = true; int aDamage = battle.GetAttackerDamage(); int aAccuracy = battle.GetAttackerAccuracy(); int aCritDamage = battle.GetAttackerCritDamage(); int aAttacks = battle.GetAttackerAttacks(); int dAttacks = battle.GetDefenderAttacks(); int dDamage = battle.GetDefenderDamage(); int dAccuracy = battle.GetDefenderAccuracy(); int dCritDamage = battle.GetDefenderCritDamage(); while (attacking) { //Initiator attacks if (aAttacks > 0) { aAttacks--; attacker.GetComponent <AttackAnimations>().Strike(defender); if (Random.Range(0, 100) < aAccuracy) { print(attacker.name + " will deal " + aDamage + " - " + (aDamage + aCritDamage) + " damage!"); //Regular hit int damageDealt = CalculateDamage(aDamage, aCritDamage); print("Hit! " + attacker.name + " dealt " + damageDealt + " damage to " + defender.name + "!"); DamageVFX(attacker, defender); SoundEffectsManager.instance.PlayStrike(); defender.GetComponent <CharacterStats>().TakeDamage(damageDealt); dPanel.GetComponent <CombatPanel>().DeductHealth(damageDealt, defender.GetComponent <CharacterStats>().GetMaxHealth()); } else { //Miss... StartCoroutine(MissVFX(defender)); SoundEffectsManager.instance.PlayMiss(); print(attacker.name + " missed!"); } yield return(new WaitForSeconds(1)); //Check if the defender died to the attacker's strike if (defender.GetComponent <CharacterStats>().GetHealth() == 0) { defender.GetComponent <UnitTracker>().Die(); break; } } //Defender attacks, if they can if (dAttacks > 0) { dAttacks--; defender.GetComponent <AttackAnimations>().Strike(attacker); if (Random.Range(0, 100) < dAccuracy) { print(attacker.name + " will deal " + dDamage + " - " + (dDamage + dCritDamage) + " damage!"); //Regular hit int damageDealt = CalculateDamage(dDamage, dCritDamage); print("Hit! " + defender.name + " dealt " + dDamage + " damage to " + attacker.name + "!"); DamageVFX(defender, attacker); SoundEffectsManager.instance.PlayStrike(); attacker.GetComponent <CharacterStats>().TakeDamage(damageDealt); aPanel.GetComponent <CombatPanel>().DeductHealth(damageDealt, defender.GetComponent <CharacterStats>().GetMaxHealth()); } else { //Miss... StartCoroutine(MissVFX(attacker)); SoundEffectsManager.instance.PlayMiss(); print(defender.name + " missed!"); } yield return(new WaitForSeconds(1)); //Check if the attacker died to the defender's strike if (attacker.GetComponent <CharacterStats>().GetHealth() == 0) { attacker.GetComponent <UnitTracker>().Die(); break; } } if (aAttacks == 0 && dAttacks == 0) { break; } } //What should happen after combat completes //For now, just disable the combat ui and finish the turn RevertToIdle(attacker, defender); attacking = false; HideBattleForecast(); MouseControl.instance.currentState = MouseControl.MouseState.FINISHED; }
void ToggleCombatDetails(GameObject attacker, GameObject defender, Vector3Int playerPos, Vector3Int enemyPos) { battle = new BattleSimulation(attacker, defender, playerPos, enemyPos); CharacterStats a = attacker.GetComponent <CharacterStats>(); CharacterStats d = defender.GetComponent <CharacterStats>(); if (attacker.tag == "Blue" || attacker.tag == "Green") { PLAYERINFO.GetComponent <CombatPanel>().InitializeInfo(attacker.name, a.GetMaxHealth(), a.GetHealth(), a.GetWeapon(), a.GetArmor(), battle.GetAttackerDamage().ToString(), battle.GetAttackerAccuracy().ToString(), battle.GetAttackerCritDamage().ToString(), battle.GetAttackerAttacks()); ENEMYINFO.GetComponent <CombatPanel>().InitializeInfo(defender.name, d.GetMaxHealth(), d.GetHealth(), d.GetWeapon(), d.GetArmor(), battle.GetDefenderDamage().ToString(), battle.GetDefenderAccuracy().ToString(), battle.GetDefenderCritDamage().ToString(), battle.GetDefenderAttacks()); } else { ENEMYINFO.GetComponent <CombatPanel>().InitializeInfo(attacker.name, a.GetMaxHealth(), a.GetHealth(), a.GetWeapon(), a.GetArmor(), battle.GetAttackerDamage().ToString(), battle.GetAttackerAccuracy().ToString(), battle.GetAttackerCritDamage().ToString(), battle.GetAttackerAttacks()); PLAYERINFO.GetComponent <CombatPanel>().InitializeInfo(defender.name, d.GetMaxHealth(), d.GetHealth(), d.GetWeapon(), d.GetArmor(), battle.GetDefenderDamage().ToString(), battle.GetDefenderAccuracy().ToString(), battle.GetDefenderCritDamage().ToString(), battle.GetDefenderAttacks()); } }