123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Mirror;
- public class PlayerAttack : NetworkBehaviour{
-
- public StatManager statManager;
- private float timeBetweenAttacks;
- public float startTimeBtwAttacks;
- //public Transform attackPosition;
- public LayerMask enemyMask;
- public float attackRange;
- public Vector3 castOffset;
- public int damage;
- public playerNetwork pnet;
- public GameObject projectile;
- public GameObject leftAnim,rightAnim,upAnim,downAnim;
- void Awake(){
- pnet.playerAttack = this;
- }
- void Start(){
- if(!isLocalPlayer){
- Destroy(this);
-
- }else{
- statManager.OnStatsChanged += onStatChange;
- }
- }
- public void onStatChange(){
- damage = statManager.GetEffectiveValue("strength");
- }
- // void Update(){
- // //Get player look dir
- // if(timeBetweenAttacks <=0){
- // if(Input.GetMouseButtonDown(0)){
- // StartCoroutine(couroutineAttack());
- // timeBetweenAttacks = startTimeBtwAttacks;
- // }
- // }else{
- // timeBetweenAttacks -= Time.deltaTime;
- // }
- // }
- IEnumerator couroutineAttack(bool isMagical){
- yield return new WaitForSecondsRealtime(0.6f);
- Attack(isMagical);
- }
- public void Attack(bool isMagical){
- if(pnet.health<=0){return;}
- Vector3 direction = GetPlayerLookDir();
- RaycastHit2D hit = Physics2D.Linecast(transform.position + castOffset, castOffset +transform.position + (direction * attackRange), enemyMask);
-
- if(hit.collider == null){return;}
-
- if(hit.collider.transform.GetComponent<enemyScript>() != null){
- int damageamount = damage + (pnet.lvl*5);
- if(isMagical){
- hit.collider.transform.GetComponent<enemyScript>().TakeMagicalDamage(damageamount, netId);
- }else{
- hit.collider.transform.GetComponent<enemyScript>().TakeDamage(damageamount, netId);
- }
- Debug.Log("Attacked enemy " + damageamount);
- }else{
- Debug.Log("Not an enemy : " + hit.collider.transform.name);
- }
- }
- public float magicalProjectileSpawnOffset = 1;
- public void MagicalAttack(){
- if(pnet.health<=0){return;}
- Vector3 direction = GetPlayerLookDir();
- //if(isServer){
- pnet.MagicalAttack(direction, magicalProjectileSpawnOffset, damage);
- /*}else{
- Debug.Log(direction);
- CmdMagicalAttack(direction);
- }*/
- }
- /* [Command]
- void CmdMagicalAttack(Vector3 direction){
- magicalAttack(direction);
- }*/
- Vector3 GetPlayerLookDir(){
- Vector3 direction = Vector3.right;
- if(leftAnim.activeSelf){
- direction = Vector3.left;
- }else if(rightAnim.activeSelf){
- direction = Vector3.right;
- }else if(upAnim.activeSelf){
- direction = Vector3.up;
- }else if(downAnim.activeSelf){
- direction = Vector3.down;
- }
- return direction;
- }
- void OnDrawGizmos(){
- Gizmos.color = Color.red;
- Gizmos.DrawLine(transform.position+castOffset, castOffset+ transform.position + (GetPlayerLookDir() * attackRange));
- }
- // void Update() {
-
- // if(timeBetweenAttacks <= 0){
- // if(Input.GetMouseButtonDown(0)){
- // Collider2D[] enemyInRange = Physics2D.OverlapCircleAll(attackPosition.position , attackRange , enemyMask);
- // for(int i = 0; i< enemyInRange.Length; i++ ){
- // enemyInRange[i].GetComponent<enemyScript>().TakeDamage(damage);
- // }
- // }
-
- // timeBetweenAttacks = startTimeBtwAttacks;
- // }
- // else{
- // timeBetweenAttacks -= Time.deltaTime;
- // }
- // }
- // void OnDrawGizmosSelected() {
- // Gizmos.color = Color.red;
- // Gizmos.DrawSphere(attackPosition.position, attackRange);
- // }
-
- }
|