예제 #1
0
 public void Think()
 {
     if (m_action.target == null)
     {
         m_action.distance = Vector3.Distance(m_controller.transform.position, m_action.interactionPosition);
         if (m_action.status != UnitAction.ActionStatus.Planned && m_navigation.reachedEndOfPath && !m_navigation.pathPending)
         {
             m_action.status = UnitAction.ActionStatus.Ended;
         }
         else
         {
             m_action.status = UnitAction.ActionStatus.Moving;
         }
     }
     else //if (m_action.target)
     {
         if (m_controller.InteractionWith(m_action.target) == UnitAction.ActionType.None)
         {
             m_action.target      = null;
             m_action.status      = UnitAction.ActionStatus.Cancelled;
             m_action.cancellable = true;
         }
         else
         {
             if (!m_action.target.isStatic)
             {
                 UpdateAction(ref m_action, true);
             }
             m_action.distance = World.Distance(m_controller.unit, m_action.target);
             if ((m_action.distance < m_action.actionMinRange || m_action.distance > m_action.actionMaxRange) && !m_navigation.pathPending)
             {
                 m_navigation.isStopped = false;
                 m_action.status        = UnitAction.ActionStatus.Moving;
             }
             else if (m_action.distance < m_action.actionMaxRange)
             {
                 m_navigation.isStopped = true;
                 m_action.status        = UnitAction.ActionStatus.Working;
             }
         }
     }
     if (m_action.status == UnitAction.ActionStatus.Moving &&
         m_action.interactionPosition != m_navigation.destination)
     {
         m_navigation.destination = m_action.interactionPosition;
         m_navigation.isStopped   = false;
         m_navigation.SearchPath();
     }
 }