void Update() { // Determine whether to emit a new waypoint... if (Time.time > lastTimeEmitted + frequency) { // Enough time has passed since previous waypoint. if (Vector3.Distance(transform.position, lastPositionEmitted) > distanceThreshold) { // Enough distance from previous waypoint. GameObject wp = (GameObject)Instantiate(wpPrefab, transform.position + wpOffset, transform.rotation); DroneDynamicWaypoint wpScript = wp.GetComponent <DroneDynamicWaypoint>(); Debug.Assert(wpScript != null); wpScript.autoDelete = this.autoDelete; wpScript.expiration = Time.time + this.wpLifetime; wpScript.targetEmitter = this; MeshRenderer mr = wp.GetComponent <MeshRenderer>(); Debug.Assert(mr != null); mr.enabled = wpVisible; wpList.Add(wp); AssertSequence(); //Debug.Log (gameObject.name + " emitted waypoint that expires at " + wpScript.expiration); lastTimeEmitted = Time.time; lastPositionEmitted = transform.position; } } }
/* * Traverse the waypoint list as a sanity check that they are in order of expiration time. */ private void AssertSequence() { float prevExpiration = 0; float thisExpiration; foreach (GameObject wp in wpList) { DroneDynamicWaypoint wpScript = wp.GetComponent <DroneDynamicWaypoint>(); thisExpiration = wpScript.expiration; Debug.Assert(thisExpiration > prevExpiration); prevExpiration = thisExpiration; } }