Example #1
0
    void UpdatePathing(Unit unit)
    {
        NavMeshAgent navAgent = unit.parts.navMeshAgent;

        if (navAgent == null || !navAgent.isActiveAndEnabled)
        {
            return;
        }

        const float epsilon = 0.001f;

        Unit.State.Persistent persistent = unit.state.persistent;

        if (persistent.navTarget == null)
        {
            navAgent.isStopped = true;
            navAgent.ResetPath();
        }
        else
        {
            NavMeshHit hitInfo;
            bool       validNavTarget = NavMesh.SamplePosition(
                persistent.navTarget.Value,
                out hitInfo,
                maxDistance: Mathf.Infinity,
                areaMask: 1 << 0
                );

            if (!validNavTarget)
            {
                persistent.navTarget = null;
                return;
            }

            float diff = Vector3.Distance(hitInfo.position, navAgent.destination);
            if (diff > epsilon)
            {
                //Dbg.Log("Setting new destination");
                bool success = navAgent.SetDestination(persistent.navTarget.Value);
                if (!success)
                {
                    persistent.navTarget = null;
                }
            }

            if (persistent.navTarget != null)
            {
                bool reached = ReachedDestination(unit);

                if (reached)
                {
                    //Dbg.Log("Reached destination");
                    persistent.navTarget = null;
                }
            }
        }
    }
Example #2
0
#pragma warning restore 0649
    #endregion     // Serialized Fields


    #endregion     // Fields

    #region Properties
    #endregion     // Properties

    #region Methods
    public override void DoUpdate()
    {
        Unit.State.Persistent    persistent = unit.state.persistent;
        Unit.State.Momentary     momentary  = unit.state.momentary;
        Unit.ManagerState        manState   = unit.manState;
        Unit.ManagerState.AiData aiData     = manState.aiData;

        switch (aiData.state)
        {
        case Unit.AiState.Idle:
            persistent.navTarget = manState.homePoint;
            break;

        case Unit.AiState.Chasing:
            persistent.navTarget = aiData.closestTarget.transform.position;
            break;
        }
    }