//THIS METHOD IS USED TO CALCULATE THE ATTACK COMMANDS OF THE PLAYER //AND CHANGE THE ANIMATION PARAMETERS TO THE ABILITY USED void CalculateAttack(DmgDataclass.type abilityType, PlayerState StateAttacking, float range, float cdr_, float cdr_timestamp, float manaCost) { switch (abilityType) { case DmgDataclass.type.lockedShot_rangue: if (!playerStScript.charLocked && !playerStScript.abilityLocked) { if (targetObj) { if (targetObj.GetComponent <PlayerStats>().myHealth <= 0) { targetObj = null; playerStatus = PlayerState.idle; return; } } else { playerStatus = PlayerState.idle; } if (Vector3.Distance(targetObj.transform.position, this.transform.position) < range) { agent.Stop(); if (cdr_timestamp <= Time.time) { //DRAIN MANA FROM THE PLAYER playerStScript.mana = playerStScript.mana - manaCost; playerStScript.UpdateManaToClients(); //ROTATE TO FACE THE TARGET Vector3 fromPosition = transform.position; fromPosition.y = 0; Vector3 toPosition = targetObj.transform.position; toPosition.y = 0; Quaternion targetRotation = Quaternion.LookRotation(toPosition - fromPosition); transform.rotation = targetRotation; UpdateCdr(StateAttacking, cdr_); cdr_timestamp = Time.time + cdr_; playerStScript.charLocked = true; playerStScript.abilityLocked = true; animator.SetInteger("AnimType", (int)StateAttacking); playerSpellScript.AttackDestination = targetObj.transform.position; playerSpellScript.target_obj = targetObj; } else { //ROTATE TO FACE THE TARGET Vector3 fromPosition = transform.position; fromPosition.y = 0; Vector3 toPosition = targetObj.transform.position; toPosition.y = 0; Quaternion targetRotation = Quaternion.LookRotation(toPosition - fromPosition); transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 1); animator.SetInteger("AnimType", (int)PlayerState.idle); } } else { animator.SetInteger("AnimType", (int)PlayerState.running); MoveOrChase(); } } break; case DmgDataclass.type.skillShot_front: if (!playerStScript.charLocked && !playerStScript.abilityLocked) { if (Vector3.Distance(destinationPos, this.transform.position) < range) { //ROTATE TO FACE THE TARGET Vector3 fromPosition = transform.position; fromPosition.y = 0; Vector3 toPosition = destinationPos; toPosition.y = 0; Quaternion targetRotation = Quaternion.LookRotation(toPosition - fromPosition); agent.Stop(); if (cdr_timestamp <= Time.time && playerStScript.mana >= manaCost) { //DRAIN MANA FROM THE PLAYER playerStScript.mana = playerStScript.mana - manaCost; playerStScript.UpdateManaToClients(); transform.rotation = targetRotation; UpdateCdr(StateAttacking, cdr_); cdr_timestamp = Time.time + cdr_; playerStScript.charLocked = true; playerStScript.abilityLocked = true; animator.SetInteger("AnimType", (int)StateAttacking); playerSpellScript.AttackDestination = destinationPos; playerSpellScript.target_obj = targetObj; } else { transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 1); animator.SetInteger("AnimType", (int)PlayerState.idle); } } else { animator.SetInteger("AnimType", (int)PlayerState.running); MoveOrChase(); } } break; case DmgDataclass.type.skillShot_floor: if (!playerStScript.charLocked && !playerStScript.abilityLocked) { if (Vector3.Distance(destinationPos, this.transform.position) < range) { //ROTATE TO FACE THE TARGET Vector3 fromPosition = transform.position; fromPosition.y = 0; Vector3 toPosition = destinationPos; toPosition.y = 0; Quaternion targetRotation = Quaternion.LookRotation(toPosition - fromPosition); agent.Stop(); if (cdr_timestamp <= Time.time && playerStScript.mana >= manaCost) { //DRAIN MANA FROM THE PLAYER playerStScript.mana = playerStScript.mana - manaCost; playerStScript.UpdateManaToClients(); transform.rotation = targetRotation; UpdateCdr(StateAttacking, cdr_); cdr_timestamp = Time.time + cdr_; playerStScript.charLocked = true; playerStScript.abilityLocked = true; animator.SetInteger("AnimType", (int)StateAttacking); playerSpellScript.AttackDestination = destinationPos; playerSpellScript.target_obj = targetObj; } else { transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 1); animator.SetInteger("AnimType", (int)PlayerState.idle); } } else { animator.SetInteger("AnimType", (int)PlayerState.running); MoveOrChase(); } } break; case DmgDataclass.type.aoe_instant: if (cdr_timestamp <= Time.time && playerStScript.mana >= manaCost) { //DRAIN MANA FROM THE PLAYER playerStScript.mana = playerStScript.mana - manaCost; playerStScript.UpdateManaToClients(); UpdateCdr(StateAttacking, cdr_); cdr_timestamp = Time.time + cdr_; playerSpellScript.Attacking((int)StateAttacking); } break; } }