private IEnumerator actualUse(LowLevelAI_SCR lowBrain) { beingUsed = true; // Try to get in line of sight bool looking = true; int lookingCount = 0; while (looking) { yield return(new WaitForSeconds(0)); lookingCount++; if (!lowBrain.moving && !shooting) { // Pick a random place to move to Vector3 target = new Vector3(this.transform.parent.position.x + Random.Range(-20, 20), this.transform.parent.position.y + Random.Range(-20, 20), 0); lowBrain.MoveTo(target); } // If can see player then shoot the laser Vector3 dir = player.transform.position - this.transform.position; Ray2D ray = new Ray2D(this.transform.position, dir * 5); RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, 1000); if (hit.collider.name == "Player" && !shooting) { looking = false; StartCoroutine(ShootLaser()); lowBrain.StopMoving(); } // If cycled too many times kick out and do something else if (lookingCount > Random.Range(5, 20)) { Debug.Log("Using something else"); looking = false; } } if (!shooting) { beingUsed = false; } this.transform.parent.GetComponent <HighLevelAI_SCR>().makeDecision = true; }
private IEnumerator actualUse(LowLevelAI_SCR bossBrain) { beingUsed = true; bool looking = true; int lookingCount = 0; while (looking) { lookingCount++; // If cycled too many times kick out and do something else if (lookingCount > Random.Range(5, 10)) { Debug.Log("Using something else"); looking = false; } // Stop moving to update player target pos bossBrain.StopMoving(); // Not close to player, then move towards him if (Vector3.Distance(this.transform.position, bossBrain.god.player.transform.position) > 5) { if (!bossBrain.moving) { bossBrain.MoveTo(bossBrain.god.player.transform.position); } yield return(new WaitForSeconds(1f)); } else { Instantiate(stunner, this.transform.position, Quaternion.identity); yield return(new WaitForSeconds(1)); looking = false; } } // Make new decision beingUsed = false; this.transform.parent.GetComponent <HighLevelAI_SCR>().makeDecision = true; }