private void SelectTarget() { Entity closest = null; float minDistance = float.MaxValue; foreach (var contact in m_contacts) { var distVec = contact.Transform.Position - Parent.Transform.Position; var distance = distVec.LengthSquared(); if (distance < minDistance) { minDistance = distance; closest = contact; } } m_target = closest; // Must be trigger so that components holding a reference to the target // can immediately update. Otherwise causes crashes when the target // was destroyed m_messenger.TriggerMessage(new SetTargetMessage(m_target)); if (m_target == null) { Log.DebugFmt("{0} cleared target", Parent.FullName); SetState(AiState.Search); } else { Log.DebugFmt("{0} set target {1}", Parent.FullName, m_target.FullName); SetState(AiState.ApproachEnemy); } }