void Attack(TBC_Character _attacker, TBC_Character _reciever, Specials _special) { float damage = 0; if (!IsImmune(_special.element, _reciever)) { if (_reciever.elementalWeakness.Contains(_special.element)) { //DoubleDamage damage = Damage(doubleDamageMult, damageRandomRange, _attacker, _reciever, _special); //Add Effect Effector(_special, _reciever, 1); } else { //RegularDamage damage = Damage(damageMult, damageRandomRange, _attacker, _reciever, _special); //Add Effect Effector(_special, _reciever, 2); } } else { //HalfDamage damage = Damage(reducedDamageMult, damageRandomRange, _attacker, _reciever, _special); } //Add Damage _reciever.hitPoints -= damage; }
bool IsImmune(EElement element, TBC_Character _reciever) { if (_reciever.elementalResistance.Contains(element)) { return(true); } else { return(false); } }
/// <summary> ////DEBUG /// </summary> private void OnGUI() { TBC_Character currentCharacter = tBC_Order.lCharacters[turnOrderIndex].GetComponent <TBC_Character>(); GUI.Label(new Rect(onGuiLocation.x, onGuiLocation.y, 200, 120), "HP:\t " + currentCharacter.hitPoints + "\nSTR:\t" + currentCharacter.strength + "\nATK:\t" + currentCharacter.attack + "\nDEF:\t" + currentCharacter.defence + "\nAGL:\t" + currentCharacter.agility + "\nAP:\t" + currentCharacter.actionPoints + "\nEffector:\t" + currentCharacter.currentEffect.ToString(), "box"); }
void Effector(Specials _special, TBC_Character _reciever, float probability) { if (_special.element > 0) { if (Random.Range(0, probability) <= 1) { int effectIndex = (int)_special.element; _reciever.currentEffect = (EEffect)effectIndex; Debug.Log(_reciever.currentEffect); } else { return; } } }
public IEnumerator Targeting(string eventType) { arrow.SetActive(true); yield return(new WaitForSeconds(0)); if (!selected) { arrow.SetActive(true); smoothTarget = OffScreenTargetPosition(true); targeting = true; StartCoroutine(Targeting(eventType)); } else { arrow.SetActive(false); selected = false; target = tBC_Order.lCharacters[targetIndex]; targetCharacter = target.GetComponent <TBC_Character>(); attackingCharacter = tBC_Order.lCharacters[tBC_Manager.turnOrderIndex].GetComponent <TBC_Character>(); switch (eventType) { case "ATTACK": StartCoroutine(MoveTowards("ATTACK")); break; case "SPECIAL": tBC_specials.Special(attackingCharacter, targetCharacter, selectedSpecial); break; case "SKILL": break; case "ITEM": Item(); break; default: break; } // DeathCheck(); StartCoroutine(tBC_Manager.NextPlayer(2f)); Menu(); } }
public void Special(TBC_Character _attacker, TBC_Character _reciever, Specials _special) { switch (_special.specialType) { case ESpecialType.ATTACK: Attack(_attacker, _reciever, _special); //I.E. Bomb / Magic type break; case ESpecialType.RECOVER: //I.E Recovery type Recover(_attacker, _reciever, _special); break; default: break; } //deduct action points _attacker.actionPoints -= _special.specialCost; //Play Particle Effect PlayParticleEffect(_reciever.transform, _special, 0.5f); }
void Recover(TBC_Character _attacker, TBC_Character _reciever, Specials _special) { int effectIndex = (int)_reciever.currentEffect; if (_special.recovery == ERecovery.REMEDY) { _reciever.currentEffect = EEffect.NONE; } else if (_special.recovery == (ERecovery)effectIndex) { _reciever.currentEffect = EEffect.NONE; } else if (_special.recovery == ERecovery.CURE) { _reciever.hitPoints += Cure(_attacker, _special); } else { return; } }
float Cure(TBC_Character _attacker, Specials _special) { return(_attacker.attack + _special.specialMod); }
// Damage() retuns a damage value for use with special moves| // Algorithm: mult = Ran(mult - attackRange, mult + attackRange); // return _attacker.tbc_character.attack + SpecialModifier - reciever.TBC_Character.defence * mult; float Damage(float _damageMult, float damageRange, TBC_Character _attacker, TBC_Character _reciever, Specials _special) { float mult = Random.Range(_damageMult - damageRange, _damageMult + damageRange); return((_attacker.attack + _special.specialMod - _reciever.defence) * mult); }