Ejemplo n.º 1
0
    override public void Do(NPC npc)
    {
        NavMeshTestNPC cast = (NavMeshTestNPC)npc;

        Vector3    direction = cast.target.transform.position - cast.transform.position;
        RaycastHit hit;

        if (Physics.Raycast(cast.transform.position, direction, out hit, 30f))
        {
            if (hit.collider.gameObject == cast.target)
            {
                cast.lastKnownLocation = cast.target.transform.position;
                visibleClock           = 0f;

                if (!cast.navMeshAgent.pathPending)
                {
                    cast.navMeshAgent.SetDestination(cast.lastKnownLocation);
                }
            }
        }

        if (visibleClock > 5.0f)
        {
            cast.target     = null;
            cast.alertLevel = MyEnum.AlertLevel.Normal;
        }

        visibleClock += Time.deltaTime;
    }
Ejemplo n.º 2
0
    override public void Do(NPC npc)
    {
        NavMeshTestNPC cast = (NavMeshTestNPC)npc;

        // Waiting Action
        if (cast.status == NavMeshTestNPC.STATUS_WAIT)
        {
            cast.waitTime += Time.deltaTime;

            if (cast.waitTime >= 3.0f)
            {
                Random rand    = new Random();
                int    randint = (int)Random.Range(0, cast.wayPoints.collection.Length);

                cast.lastKnownLocation = cast.wayPoints.collection[randint];
                cast.navMeshAgent.SetDestination(cast.lastKnownLocation);

                cast.status = NavMeshTestNPC.STATUS_PATROL;
            }
        }

        // Moving action
        if (cast.status == NavMeshTestNPC.STATUS_PATROL)
        {
            if (!cast.navMeshAgent.pathPending)
            {
                if (cast.navMeshAgent.remainingDistance <= cast.navMeshAgent.stoppingDistance)
                {
                    cast.waitTime = 0.0f;
                    cast.status   = NavMeshTestNPC.STATUS_WAIT;
                }
            }
        }

        //Field Of View Operation()
        foreach (Humanoid h in cast.listHumanoid)
        {
            if (h.gameObject != cast.gameObject) // The NPC seeing has to be excluded
            {
                Vector3 direction = h.transform.position - cast.transform.position;
                float   viewCheck = Vector3.Angle(h.transform.position - cast.transform.position, cast.transform.forward);
                if (viewCheck <= cast.fov * 0.5f) // if there is a person in the field of view
                {
                    RaycastHit hit;
                    if (Physics.Raycast(cast.transform.position, direction.normalized, out hit, 30f))
                    {
                        if (hit.collider.gameObject == h.gameObject)
                        {
                            if (cast.enemyGroups.Contains(h.group))
                            {
                                Debug.Log("ENEMY !!!");
                                cast.target            = h.gameObject;
                                cast.lastKnownLocation = cast.target.transform.position;
                                cast.alertLevel        = MyEnum.AlertLevel.Fight;
                            }
                        }
                    }
                }
            }
        }
    }