public string ElementalMovesToString(ElementalMoves move) { string moveString = ""; switch (move) { case ElementalMoves.EmptyMoveSlot: moveString = "Empty"; break; case ElementalMoves.AirStrike: moveString = "Air Strike"; break; case ElementalMoves.EarthQuake: moveString = "Earthquake"; break; case ElementalMoves.FireBlaze: moveString = "Fire Blaze"; break; case ElementalMoves.NaturesWrath: moveString = "Natures Wrath"; break; case ElementalMoves.Tackle: moveString = "Tackle"; break; case ElementalMoves.WaterBlast: moveString = "Water Blast"; break; default: break; } return(moveString); }
public void UseMove(ElementalMoves moveToUse, bool isThereTypeBoost, int attackValue, float accuracy, float critChance, GameObject target, bool isLeft) { // Use selected move switch (moveToUse) { case ElementalMoves.EmptyMoveSlot: Debug.Log("No move in this slot!"); return; case ElementalMoves.AirStrike: // Play Airstrike if (isLeft) { AirStrikeParticleLeft.Play(); } else { AirStrikeParticleRight.Play(); } break; case ElementalMoves.EarthQuake: // Play Earthquake if (isLeft) { EarthQuakeParticleRight.Play(); } else { EarthQuakeParticleLeft.Play(); } break; case ElementalMoves.FireBlaze: // Play Fire blaze if (isLeft) { FireBlazeParticleLeft.Play(); } else { FireBlazeParticleRight.Play(); } break; case ElementalMoves.NaturesWrath: // Play Natures wrath if (isLeft) { NaturesWrathParticleLeft.Play(); } else { NaturesWrathParticleRight.Play(); } break; case ElementalMoves.Tackle: // Play Tackle if (isLeft) { TackleParticleLeft.Play(); } else { TackleParticleRight.Play(); } break; case ElementalMoves.WaterBlast: // Play Water blast if (isLeft) { FireBlazeParticleLeft.Play(); } else { FireBlazeParticleRight.Play(); } break; default: Debug.Log("Error! Move not implemented!"); break; } // Accuracy check float randAcc = Random.Range(0f, 1f); if (randAcc > accuracy) { // Move misses Debug.Log("Move Missed!"); return; } // Calculate damage float typeBoost = isThereTypeBoost ? 1.5f : 1f; // Set type boost int Damage = attackValue; float damageModifier = 1f; float randCrit = Random.Range(0f, 1f); damageModifier = randCrit < critChance ? CritPower : 1f; // Check if attack will deal critical damage // Do the same thing for player and enemy but use their own scripts if (target.tag == "Enemy") { Enemy enemyRef = target.GetComponentInChildren <Enemy>(); // Loop through character types to determine damage modifier foreach (ElementType t in enemyRef.CharactersElementTypes) { if (t == MoveDictionary[moveToUse]) // If they are same type { // Reduce damage modifier by 50% damageModifier *= 0.5f; } else if (CheckTypeRelationship(t, MoveDictionary[moveToUse])) // Check for type relationship { // If item type is stronger than t then deal more damage if (ReturnStrongTypeInRelationship(t, MoveDictionary[moveToUse]) == MoveDictionary[moveToUse]) { damageModifier *= 2f; } } } // Calculate and then deal damage Damage = (int)(Damage * damageModifier); // Damage * modifier Damage = Damage - enemyRef.Defence <= DamageMin ? DamageMin : Damage - enemyRef.Defence; // Damage - defence enemyRef.ChangeHealth(-Damage); } else // Player { Character charRef = target.GetComponentInChildren <Character>(); // Loop through character types to determine damage modifier foreach (ElementType t in charRef.CharactersElementTypes) { if (t == MoveDictionary[moveToUse]) // If they are same type { // Reduce damage modifier by 50% damageModifier *= 0.5f; } else if (CheckTypeRelationship(t, MoveDictionary[moveToUse])) // Check for type relationship { // If item type is stronger than t then deal more damage if (ReturnStrongTypeInRelationship(t, MoveDictionary[moveToUse]) == MoveDictionary[moveToUse]) { damageModifier *= 2f; } } } // Calculate and then deal damage Damage = (int)(Damage * damageModifier); // Damage * modifier Damage = Damage - charRef.Defence <= DamageMin ? DamageMin : Damage - charRef.Defence; // Damage - defence charRef.ChangeHealth(-Damage); // Deal damage } }