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); } }
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; }
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; } }
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>()); } } }
IEnumerator Task5(MissionTriggerNPC tt) { yield break; }
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); } }