Esempio n. 1
0
 public IEnumerator attack(GameObject enemy)
 {
     isAttacking  = true;
     unitMovement = gameObject.GetComponent <unitMovement>();
     while (enemy != null)
     {
         unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(gameObject, enemy.transform.position));
         if (Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range))
         {
             while (enemy != null && Vector3.Distance(transform.position, enemy.transform.position) > Mathf.Abs(range))
             {
                 transform.position = Vector3.MoveTowards(gameObject.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime);
                 yield return(new WaitForEndOfFrame());
             }
         }
         attackCooldown = Time.time - lastAttackTime;
         if (attackCooldown >= 1f / attackSpeed && enemy != null)
         {
             lastAttackTime            = Time.time;
             enemyUnitMovement         = enemy.GetComponent <unitMovement>();
             enemyUnitMovement.health -= unitMovement.attack;
             // anim = GetComponent<Animation>();
             // anim.Play();
         }
         yield return(new WaitForEndOfFrame());
     }
     isAttacking = false;
     yield return(null);
 }
Esempio n. 2
0
 public IEnumerator arrowAttack(GameObject enemy)
 {
     shooting     = true;
     unitMovement = unit.GetComponent <unitMovement>();
     while (enemy != null)
     {
         unitMovement.rotateCoroutine = StartCoroutine(unitMovement.turnTowards(unit, enemy.transform.position));
         if (Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range))
         {
             while (enemy != null && Vector3.Distance(unit.transform.position, enemy.transform.position) > Mathf.Abs(range))
             {
                 unit.transform.position = Vector3.MoveTowards(unit.transform.position, enemy.transform.position, unitMovement.speed * Time.deltaTime);
                 yield return(new WaitForEndOfFrame());
             }
         }
         attackCooldown = Time.time - lastAttackTime;
         if (attackCooldown >= 1f / attackSpeed && enemy != null)
         {
             lastAttackTime = Time.time;
             Vector3    Vo    = calculateVelocity(enemy.transform.position, unit.transform.GetChild(1).position, 1f);
             GameObject spawn = Instantiate(arrowPrefab, arrowSpawn.position, Quaternion.identity);
             Rigidbody  rb    = spawn.GetComponent <Rigidbody>();
             rb.transform.rotation = Quaternion.Euler(transform.rotation.x, transform.rotation.y, transform.rotation.z);
             rb.velocity           = Vo;
         }
         yield return(new WaitForEndOfFrame());
     }
     shooting = false;
     yield return(null);
 }