コード例 #1
0
        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);
            }
        }