Ejemplo n.º 1
0
    // Update is called once per frame
    void Update()
    {
        switch (state)
        {
        //Player should run to the furthest goal unless a guard is near
        case State.TONEWGOAL:
            float closestGuard = findDistToClosestGuard();
            if (closestGuard < 10.0f)
            {
                transitionToNearestSafeZone();
            }
            else if (aiSteer.waypointsComplete())
            {
                transitionToNewGoal();
            }
            break;

        //Player should run towards the closest safeZone
        case State.SAFEZONE:
            if (aiSteer.waypointsComplete() && !enteredZone)
            {
                enteredZone   = true;
                beginWaitTime = Time.timeSinceLevelLoad;
            }
            if (aiSteer.waypointsComplete() && Time.timeSinceLevelLoad - beginWaitTime > SafeZoneWaitTime)
            {
                transitionToNewGoal();
                enteredZone = false;
            }
            break;

        //player is tagged and out of play
        case State.TAGGED:
            if (aiSteer.waypointsComplete())
            {
                GameObject levelManager = GameObject.Find("LevelManager");
                levelManager.GetComponent <LevelManager> ().addTagged();
            }
            break;


        default:

            print("Weird?");
            break;
        }
    }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        switch (state)
        {
        case State.A:

            if (aiSteer.waypointsComplete())
            {
                transitionToStateB();
            }
            break;

        case State.B:
            if (aiSteer.waypointsComplete())
            {
                transitionToStateC();
            }
            break;

        case State.C:
            if (aiSteer.waypointsComplete())
            {
                transitionToStateD();
            }
            break;

        case State.D:
            if (Time.timeSinceLevelLoad - beginWaitTime > waitTime)
            {
                transitionToStateE();
            }
            break;

        case State.E:
            if (aiSteer.waypointsComplete())
            {
                break;
            }
//					transitionToStateA();
            break;

        default:

            print("Weird?");
            break;
        }
    }
Ejemplo n.º 3
0
    public override bool IsAt(Vector3 aPosition)
    {
        //TODO: this logic should probably be a bit more robust
        //Maybe check if waypointsComplete() AND we aren't
        //too far away

        bool result = navController.waypointsComplete();

        return(result);
    }
Ejemplo n.º 4
0
    // Update is called once per frame
    void Update()
    {
        switch (state)
        {
        //Walk from post to post unless they do not have ammo or are near a prisoner
        case State.WALKAROUND:
            closestPrisoner = findClosestPrisoner();
            if (closestPrisoner != null)
            {
                transitionToChase(closestPrisoner);
            }
            else if (!armed)
            {
                transitionToGetAmmo();
            }
            else if (!isWalking)
            {
                int random = Random.Range(0, walkingPoints.Length);
                aiSteer.setWayPoint(walkingPoints [random]);
                setSpeed(0.25f);
                isWalking = true;
            }

            if (aiSteer.waypointsComplete())
            {
                isWalking = false;
            }
            break;

        case State.GETAMMO:
            if (aiSteer.waypointsComplete())
            {
                addAmmo();
                transitionToWalkingState();
            }
            break;

        case State.CHASEPRISONER:
            //if the closest prisoner has transition to a safe state then we should shoot and walk around
            if (closestPrisoner != null && closestPrisoner.GetComponent <AIPrisonerController>().isSafe())
            {
                shootBullet();
                closestPrisoner = null;
                state           = State.WALKAROUND;
                break;
            }
            else
            {
                //if we find a new closer prisoner then we should shoot at the old
                //one and chase the new closer prisoner
                GameObject nearPrisoner = findClosestPrisoner();
                if (nearPrisoner != closestPrisoner)
                {
                    transitionToThrowandChase(nearPrisoner);
                }
                //Chase the old/current closest prisoner
                if (closestPrisoner != null)
                {
                    aiSteer.setWayPoint(closestPrisoner.transform);
                }
            }

            break;


        default:

            print("Weird?");
            break;
        }
    }
Ejemplo n.º 5
0
    // Update is called once per frame
    void Update()
    {
        switch (state)
        {
        case State.R:
            int r = Random.Range(0, 4);
            if (r == 0)
            {
                transitionToStateA();
            }
            else if (r == 1)
            {
                transitionToStateB();
            }
            else if (r == 2)
            {
                transitionToStateC();
            }
            else if (r == 3)
            {
                transitionToStateD();
            }
            break;

        case State.A:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        case State.B:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        case State.C:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        case State.D:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        default:

            print("Weird?");
            break;
        }
    }
Ejemplo n.º 6
0
    // Update is called once per frame
    void Update()
    {
        GameObject target           = GameObject.Find("NPC_1");
        float      p                = 15;
        float      d                = Vector3.Distance(this.transform.position, target.transform.position);
        float      ballToTargetTime = d / p;
        Vector3    interceptPoint   = target.transform.position + target.transform.forward * targetVel.magnitude * 50 * ballToTargetTime;

        Vector3 targetPosition = interceptPoint;

        switch (state)
        {
        case State.R:
            int r = Random.Range(0, 4);
            //r = 3;
            if (r == 0)
            {
                transitionToStateA();
            }
            else if (r == 1)
            {
                transitionToStateB();
            }
            else if (r == 2)
            {
                transitionToStateC();
            }
            else if (r == 3)
            {
                transitionToStateD();
            }
            break;

        case State.A:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        case State.B:
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            break;

        case State.C:
            if (d <= 1)
            {
                aiSteer.clearWaypoints();
                transitionToStateR();
            }
            if (aiSteer.waypointsComplete())
            {
                EventManager.TriggerEvent <NpcEvent, Vector3, int>(this.transform.position, 1);
                transitionToStateR();
            }
            else
            {
                aiSteer.setWaypoint(targetPosition);
            }
            break;

        case State.D:
            aiSteer.setWaypoint(targetPosition);

            float minD = (float)System.Math.Sqrt(System.Math.Pow(15, 4) / 100);
            if (Vector3.Distance(this.transform.position, target.transform.position) < minD - 5)
            //if (Time.timeSinceLevelLoad - beginWaitTime > waitTime)
            //if (true)
            {
                transitionToStateE();
            }
            break;

        case State.E:
            aiSteer.mecanimInputForwardSpeedCap = 0;
            aiSteer.setWaypoint(targetPosition);
            if (Time.timeSinceLevelLoad - beginWaitTime > waitTime)
            {
                print("y tho");
                aiSteer.mecanimInputForwardSpeedCap = 1;
                transitionToStateR();
            }

            break;

        default:

            print("Weird?");
            break;
        }
    }