public static IEnumerator KillEnemyCoroutine(GOAPEntity ent) { Node startingPoint = NodeList.allNodes.OrderBy(a => { return(Vector3.Distance(a.transform.position, ent.transform.position)); }).First(); var houses = NodeList.allNodes .Select(a => { return(a.GetComponent <HouseNode>()); }) .Where(a => a != null && a.owned && a.constructed) .Select(a => a.keyId); EnemyWaypoint target = NodeList.allNodes .Select(a => { return(a.GetComponent <EnemyWaypoint>()); }) .Where(a => a != null && a.gameObject.activeSelf && houses.Contains(a.keyId)) .OrderBy(a => { return(Vector3.Distance(a.transform.position, ent.transform.position)); }) .First(); var path = Algorithms.AStar( startingPoint, a => a == target, a => Vector3.Distance(target.transform.position, a.transform.position), a => { return(a.neighbors.Where(b => b.gameObject.activeSelf).Select(n => new Arc <Node>().SetArc(n, Vector3.Distance(n.transform.position, a.transform.position)))); } ); while (path.Count > 0) { ent.transform.forward = new Vector3(path.Peek().transform.position.x - ent.transform.position.x, ent.transform.forward.y, path.Peek().transform.position.z - ent.transform.position.z); ent.transform.position += ent.transform.forward * Mathf.Min(Vector3.Distance(path.Peek().transform.position, ent.transform.position), ent.speed * Time.deltaTime); if (Vector3.Distance(path.Peek().transform.position, ent.transform.position) <= 2f) { path.Pop(); } yield return(new WaitForEndOfFrame()); } ent.Current.Keys.Add(target.keyId); target.gameObject.SetActive(false); ent.Sequence.First().Effects(ent.Current, ent.Current); ent.Sequence = ent.Sequence.Skip(1); if (ent.Sequence.Count() > 0) { ent.Sequence.First().Act(ent); } }
protected void Spawn() { for (j = 0; j < enemies.Count; j++) { if (!enemies[j].activeInHierarchy) { enemies[j].transform.position = transform.position; enemies[j].transform.localScale = transform.localScale; EnemyWaypoint e_scr2 = enemies[j].GetComponent <EnemyWaypoint>(); e_scr2.health = e_scr2.health_max; e_scr2.SetWP(0); enemies[j].SetActive(true); break; } } Invoke("Spawn", time_spawn); }
protected void Start() { enemies = new List <GameObject>(); for (j = 0; j < enemy_count; j++) { enemy = (GameObject)Instantiate(enemy_pref); for (int i = 0; i < waypoint.Length; i++) { if (waypoint[i].activeInHierarchy) { EnemyWaypoint e_scr = enemy.GetComponent <EnemyWaypoint>(); e_scr.waypoints[i] = waypoint[i]; } } enemy.SetActive(false); enemies.Add(enemy); } Invoke("Spawn", time_spawn); }
// Use this for initialization void Start() { agent = GetComponent<NavMeshAgent>(); // StartCoroutine( SetNextWaypoint() ); if ( targets.Count > 0 ) { currTarget = targets[ 0 ]; agent.SetDestination(currTarget.transform.position); } else { rigidbody.isKinematic = true; } InvokeRepeating ("Footsteps", 0f, 0.5f); }
IEnumerator SetNextWaypoint() { agent.Stop(); agent.ResetPath(); rigidbody.isKinematic = true; if (currTarget == null) { currTarget = targets [Random.Range(0, targets.Count)]; } else { currTarget = currTarget.GetTarget(); } if (currTarget != null) { Vector3 vec = currTarget.transform.position - transform.position; Quaternion q = Quaternion.LookRotation( vec.normalized ); for( float i = 0f; i < waypointWaitTime; i += Time.deltaTime ) { transform.rotation = Quaternion.Slerp (transform.rotation, q, Time.deltaTime); yield return 0; } rigidbody.isKinematic = false; agent.SetDestination(currTarget.transform.position); } }