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(); } }