void ResolveCurrentBehavior() { if (_protealizingCutscene) { wander.enabled = true; pursue.enabled = false; tether.enabled = false; MaxSpeed = _wanderSpeed; MaxAcceleration = _wanderAcceleration; _pursuingAgent = null; return; } if (_protealizing) { wander.enabled = false; pursue.enabled = false; tether.enabled = false; } if (_substrate.CanBeProtealized) { ProteasomeAgent closestAgent = null; foreach (ProteasomeAgent agent in _allProteasomes) { if (closestAgent == null || (Vector3.Distance(agent.transform.position, pursue.target.transform.position) < Vector3.Distance(closestAgent.transform.position, pursue.target.transform.position)) && Vector3.Distance(agent.transform.position, pursue.target.transform.position) < _maximumDistanceToPursue) { closestAgent = agent; } } // If nobody is pursuing and we can pursue, then pursue. if (_pursuingAgent == null && Vector3.Distance(transform.position, pursue.target.transform.position) < _maximumDistanceToPursue) { MaxSpeed = _pursuitSpeed; MaxAcceleration = _pursuitAcceleration; _pursuingAgent = this; pursue.enabled = true; tether.enabled = false; wander.enabled = false; } // Give up if we're pursuing but too far away. else if (_pursuingAgent == this && Vector3.Distance(transform.position, pursue.target.transform.position) >= _maximumDistanceToPursue) { wander.enabled = true; tether.enabled = false; pursue.enabled = false; MaxSpeed = _wanderSpeed; MaxAcceleration = _wanderAcceleration; _pursuingAgent = null; } } // If we can't protealize, don't pursue. else { wander.enabled = true; pursue.enabled = false; tether.enabled = false; MaxSpeed = _wanderSpeed; MaxAcceleration = _wanderAcceleration; _pursuingAgent = null; } }
void OnDestroy() { _allProteasomes.Remove(this); _pursuingAgent = null; }