// We compare the speeds of the called object and the other data that was passed in public bool CompareSpeeds(BattleStats other) { if (ReturnModdedStat("Speed") > other.ReturnModdedStat("Speed")) { return(true); } else if (ReturnModdedStat("Speed") < other.ReturnModdedStat("Speed")) { return(false); } else { // If we have a tie in speed, we will randomly decide which one will be faster return(Random.Range(0, 2) == 1); } }
// A helper method that depending on what is passed in will determine what UI wil be updated public void SavePlayerStatsToUI(BattleStats currentPartyMember, InventoryParty currentPartyMemberStats, bool isOriginal) { // Displays the character that is levling up levelUpMenu.transform.GetChild(2).GetComponent <Image>().sprite = currentPartyMember.gameObject.transform.GetChild(0).GetComponent <SpriteRenderer>().sprite; // If true, we are going to modify the slider value that represnts the original player stats if (isOriginal) { // The base player levelUpMenu.transform.GetChild(4).GetChild(0).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("MaxHP"); levelUpMenu.transform.GetChild(4).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("MaxSP"); levelUpMenu.transform.GetChild(4).GetChild(2).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("BaseAttack"); levelUpMenu.transform.GetChild(4).GetChild(3).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("BaseDefense"); // The Demon Stats levelUpMenu.transform.GetChild(5).GetChild(0).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("PhysicalAttack"); levelUpMenu.transform.GetChild(5).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("PhysicalDefense"); levelUpMenu.transform.GetChild(5).GetChild(2).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("SpecialAttack"); levelUpMenu.transform.GetChild(5).GetChild(3).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("SpecialDefense"); levelUpMenu.transform.GetChild(5).GetChild(4).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("Speed"); levelUpMenu.transform.GetChild(5).GetChild(5).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("Luck"); } else { // The base player levelUpMenu.transform.GetChild(4).GetChild(0).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("MaxHP"); levelUpMenu.transform.GetChild(4).GetChild(1).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("MaxSP"); levelUpMenu.transform.GetChild(4).GetChild(2).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("BaseAttack"); levelUpMenu.transform.GetChild(4).GetChild(3).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("BaseDefense"); // The Demon Stats levelUpMenu.transform.GetChild(5).GetChild(0).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("PhysicalAttack"); levelUpMenu.transform.GetChild(5).GetChild(1).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("PhysicalDefense"); levelUpMenu.transform.GetChild(5).GetChild(2).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("SpecialAttack"); levelUpMenu.transform.GetChild(5).GetChild(3).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("SpecialDefense"); levelUpMenu.transform.GetChild(5).GetChild(4).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("Speed"); levelUpMenu.transform.GetChild(5).GetChild(5).GetChild(1).GetComponent <Slider>().value = currentPartyMember.ReturnModdedStat("Luck"); } levelUpMenu.transform.GetChild(3).GetComponentInChildren <TextMeshProUGUI>().text = currentPartyMemberStats.SpecifiedCharacter.characterName + " leveled up! Now at level " + currentPartyMemberStats.CharacterLevel + "!"; }
// Calculates how damage will be dealt to this entity // Returns the amount of damage done public int DealDamage(BattleStats attacker, AttackData currentAttack) { int attackPower = 0; int defensePower = 0; // If the attacker is the player, we are attacking an enemy if (attacker.battleData is CharacterData) { if (currentAttack.attackType == AttackType.PHYSICAL) { // Because the attack is physical, we calculate the math based on physical power attackPower = attacker.ReturnModdedStat("BaseAttack") + currentAttack.attackPower + attacker.ReturnModdedStat("PhysicalAttack"); defensePower = ReturnModdedStat("PhysicalDefense"); } else if (currentAttack.attackType == AttackType.SPECIAL) { // Because the attack is special, we calculate the math based on special power attackPower = attacker.ReturnModdedStat("BaseAttack") + currentAttack.attackPower + attacker.ReturnModdedStat("SpecialAttack"); defensePower = ReturnModdedStat("SpecialDefense"); // We also deduct SP from the user as well attacker.CurrentSP -= currentAttack.attackCost; } } // If the attacker is an enemy, we are attacking a party member else if (attacker.battleData is EnemyData) { if (currentAttack.attackType == AttackType.PHYSICAL) { // Because the attack is physical, we calculate the math based on physical power attackPower = currentAttack.attackPower + attacker.ReturnModdedStat("PhysicalAttack"); defensePower = ReturnModdedStat("BaseDefense") + ReturnModdedStat("PhysicalDefense"); } else if (currentAttack.attackType == AttackType.SPECIAL) { // Because the attack is special, we calculate the math based on special power attackPower = currentAttack.attackPower + attacker.ReturnModdedStat("SpecialAttack"); defensePower = ReturnModdedStat("BaseDefense") + ReturnModdedStat("SpecialDefense"); // We also deduct SP from the user as well attacker.CurrentSP -= currentAttack.attackCost; } } // Modifies the total attack power depending on the affinity of the attack switch (GetAttackEffectiveness(currentAttack)) { case AffinityValues.RESISTANT: attackPower /= 2; break; case AffinityValues.WEAK: attackPower *= 2; break; case AffinityValues.NULL: attackPower *= 0; break; } // We then calculate the final damage, clamping the damage to 0 and infinity (cannot be negative) int finalDamage = (int)Mathf.Clamp(attackPower - defensePower, 0, Mathf.Infinity); currentHP -= finalDamage; // We then return the total damage output return(finalDamage); }