Esempio n. 1
0
    IEnumerator Task1(MissionTriggerNPC tt)
    {
        UpdateState(GuardState.guarding);
        tt.onoff = false;


        Vector3 target = Map.instance.kitchen.transform.position;

        navMeshAgent.SetDestination(target);
        yield return(new WaitUntil(() => Vector3.Distance(transform.position, target) <= 1));

        // Third trigger
        if (GameManager.instance.missionCheckpoints[1] == 2)
        {
            GameManager.instance.mission0Checkpoints[2].SetActive(true);
        }

        // Second trigger
        if (GameManager.instance.missionCheckpoints[1] == 0)
        {
            GameManager.instance.mission1Checkpoints[0].SetActive(true);
            yield return(sec5);

            GameManager.instance.mission1Checkpoints[0].SetActive(false);
        }
    }
Esempio n. 2
0
    IEnumerator Task3(MissionTriggerNPC tt)
    {
        UpdateState(GuardState.guarding);
        tt.onoff = false;

        // Go to pharmacy.
        Vector3 target = Map.instance.pharmacy.transform.position;

        navMeshAgent.SetDestination(target);
        yield return(new WaitUntil(() => Vector3.Distance(transform.position, target) <= 1));

        // Go to room 17.
        foreach (Cell c in Map.instance.cells)
        {
            if (c.cellNumber == 17)
            {
                target = c.transform.position;
                break;
            }
        }
        navMeshAgent.SetDestination(target);
        yield return(new WaitUntil(() => Vector3.Distance(transform.position, target) <= 1));

        // Trigger on
        if (GameManager.instance.missionCheckpoints[3] == 0)
        {
            GameManager.instance.mission3Checkpoints[0].SetActive(true);
        }

        // Play sound.
        audioS.loop = true;
        PlaySFX(fX.sreams);

        yield return(new WaitUntil(() => Clock.instance.hour >= 4));

        audioS.loop = false;

        // Trigger off.
        GameManager.instance.mission3Checkpoints[0].SetActive(false);

        // Check if player detected.
        if (GameManager.instance.missionCheckpoints[3] >= 0)
        {
            GameManager.instance.mission3Checkpoints[1].SetActive(true);
            yield break;
        }
        tt.onoff = true;
    }
Esempio n. 3
0
    void TaskSelector(MissionTriggerNPC tt)
    {
        // Select right task for guard.
        UpdateHeader("Mission trigger");
        //int taskNumber = tt.taskNumber+11;
        switch (tt.taskNumber)
        {
        case 11:
            if (guardNumber == tt.taskNumber)
            {
                StartCoroutine(Task0(tt));
            }
            break;

        case 12:
            if (guardNumber == tt.taskNumber)
            {
                StartCoroutine(Task1(tt));
            }
            break;

        case 13:
            if (guardNumber == tt.taskNumber)
            {
                StartCoroutine(Task3(tt));
            }
            break;

        case 14:
            if (guardNumber == tt.taskNumber)
            {
                StartCoroutine(Task3(tt));
            }
            break;

        case 15:
            if (guardNumber == tt.taskNumber)
            {
                StartCoroutine(Task4(tt));
            }

            break;

        default:
            break;
        }
    }
Esempio n. 4
0
    private void OnTriggerEnter(Collider other)
    {
        MissionTriggerNPC tt = other.GetComponent <MissionTriggerNPC>();

        if (tt && tt.onoff && guardState == GuardState.patrolling) // If there is an active trigger, call selector.
        {
            TaskSelector(tt);
        }

        if (guardState == GuardState.passive && other.tag == "Place")
        {
            currentPlace = other.GetComponent <Place>();

            if (currentPlace.placeType == place.placeType)
            {
                //ArriveAtPlace(other.GetComponent<Place>());
            }
        }
    }
Esempio n. 5
0
 IEnumerator Task5(MissionTriggerNPC tt)
 {
     yield break;
 }
Esempio n. 6
0
    IEnumerator Task0(MissionTriggerNPC tt)
    {
        UpdateState(GuardState.guarding);
        tt.onoff = false;

        // Third trigger
        if (GameManager.instance.missionCheckpoints[1] == 2)
        {
            GameManager.instance.mission0Checkpoints[2].SetActive(true);
        }

        // Go to the sink.
        Waitpoint sink = FindRandomWaitpoint(Map.instance.bathroomCentre.sinks, true);

        yield return(StartCoroutine(WaitpointQueue(sink)));

        // Drop baton in sink.
        yield return(StartCoroutine("UseHands"));

        PlaySFX(fX.tap);
        GameObject bt = null;

        if (GameManager.instance.missionCheckpoints[1] == 2)
        {
            bt = Instantiate(baton, sink.transform.position + new Vector3(-0.5f, 0, 0), Quaternion.Euler(90, 0, 0));
        }
        sink.IsBusy = false;
        isBusy      = false;

        // Go to a toilet.
        Waitpoint toilet = FindRandomWaitpoint(Map.instance.bathroomCentre.toilets, true);

        yield return(StartCoroutine(WaitpointQueue(toilet)));

        StartCoroutine("UseHands");

        // Delay so player can retrieve baton.
        yield return(sec5);

        yield return(sec5);

        toilet.IsBusy = false;
        PlaySFX(fX.pee);

        // Retrieve baton from sink.
        yield return(StartCoroutine(WaitpointQueue(sink)));

        PlaySFX(fX.tap);
        yield return(StartCoroutine("UseHands"));

        sink.IsBusy = false;

        // If player retrieved baton.
        if (GameManager.instance.missionCheckpoints[1] == 3 && !bt)
        {
            PlaySFX(fX.whatTheHell);
            yield return(sec2);

            // Routine broken!
            GameManager.instance.Checkpoint(0);

            // Look for baton.
            navMeshAgent.SetDestination(toilet.transform.position);
            yield return(sec3);

            navMeshAgent.SetDestination(toilet.transform.position);
            yield return(sec3);

            // Move on
            UpdateState(GuardState.patrolling);
            yield break;
        }

        GameManager.instance.mission0Checkpoints[2].SetActive(false);

        // Go to cell.
        Vector3 target = Map.instance.cells[7].door.transform.position;

        navMeshAgent.SetDestination(target);
        yield return(new WaitUntil(() => Vector3.Distance(transform.position, target) <= 2));

        // Open door.
        Map.instance.cells[7].door.InteractHands();
        yield return(sec2);

        target = Map.instance.cells[7].transform.position;
        navMeshAgent.SetDestination(target);
        yield return(new WaitUntil(() => Vector3.Distance(transform.position, target) <= 1));

        // Lock door.
        Map.instance.cells[7].door.InteractHands();
        Map.instance.cells[7].door.isLocked = true;

        // First trigger.
        if (GameManager.instance.missionCheckpoints[1] == 0)
        {
            GameManager.instance.mission0Checkpoints[0].SetActive(true);
        }

        //// Beating event for 1min.
        //for (int i = 0; i < 12; i++)
        //{
        //    audioS.clip = fX.beating;
        //    audioS.loop = true;
        //    audioS.Play();
        //    //PlaySFX(fX.beating);
        //    yield return sec5;
        //}
        //audioS.loop = false;

        yield return(sec5);

        UpdateState(GuardState.patrolling);
        tt.onoff = true;

        if (GameManager.instance.missionCheckpoints[1] == 0)
        {
            GameManager.instance.mission0Checkpoints[0].SetActive(false);
        }

        // Second trigger
        if (GameManager.instance.missionCheckpoints[1] == 1)
        {
            GameManager.instance.mission0Checkpoints[1].SetActive(true);
            yield return(sec5);

            GameManager.instance.mission0Checkpoints[1].SetActive(false);
        }
    }