/// <summary> /// Triggers the end level. /// </summary> /// <param name="triggerName">Trigger name.</param> public void triggerEndLevel(string triggerName) { string nextLevel = ""; if (triggerName.Contains("Air")) { airLevelComplete = true; // Track the end air time totalStats.endAirTime = Time.time; nextLevel = "FireRoom"; } else if (triggerName.Contains("Fire")) { fireLevelComplete = true; // Track the end fire time totalStats.endFireTime = Time.time; nextLevel = "WaterRoom"; } else if (triggerName.Contains("Water")) { waterLevelComplete = true; // Track the end water time totalStats.endWaterTime = Time.time; nextLevel = "ComboRoom"; } else if (triggerName.Contains("Combo")) { comboLevelComplete = true; // Track the end combo time totalStats.endComboTime = Time.time; // Track the end time totalStats.endTime = Time.time; nextLevel = "NinjaMorph"; } // Disable control for the time being setControllable(false); // Enable the Stats UI statsUI.SetActive(true); // Set the next level statsUI.GetComponentInChildren <StatsMenuHandler> ().nextLevel = nextLevel; // Transfer relevant stats to the total stats totalStats.transferLevelSpecificStats(ninjaController.currentStats); // Set the stats statsUI.GetComponentInChildren <ShowStats> ().setStats(nextLevel, ninjaController.currentStats, totalStats); // Reset the ninja controller stats ninjaController.currentStats = new StatsInfo(); // Enable the Stats UI showStats = true; // Disable the ability to pause pauseScript.allowed = false; }
/// <summary> /// Checks for the game over. /// </summary> void CheckGameOver() { // Check for ninja zen being less than 0 if (ninjaController.getZen() <= 0.0f) { gameActive = false; // Set the stats data currentStats.endTime = Time.time; currentStats.transferLevelSpecificStats(ninjaController.currentStats); ninjaController.currentStats = new StatsInfo(); StartCoroutine(GameOver()); } // Still alive else { // Check for level completion if (!airLevelComplete) { if (totalStats.startAirTime < 0.0f) { totalStats.startAirTime = Time.time; } if (airLevelComplete) { ninjaController.createMessage("Air Room complete!"); } } else if (!fireLevelComplete) { if (totalStats.startFireTime < 0.0f) { totalStats.startFireTime = Time.time; } if (Application.loadedLevelName == "FireRoom") { if (firePuzzle == null) { return; } InteractiveObject[] objects = firePuzzle.GetComponentsInChildren <InteractiveObject>(); int numberLit = 0; foreach (InteractiveObject io in objects) { if (io.getObjectType() == ObjectType.Fire) { numberLit++; if (!torchOrder.Contains(io.gameObject.name)) { torchOrder.Add(io.gameObject.name); } } } if (numberLit == objects.Length) { fireLevelComplete = true; for (int i = 0; i < torchOrder.Count; i++) { string name = (string)torchOrder[i]; if (!name.Contains(i.ToString())) { ninjaController.createMessage("Incorrect order!"); fireLevelComplete = false; break; } } if (fireLevelComplete) { // Find all of the crates and allow them to be moved. Rigidbody[] crates = GameObject.FindGameObjectWithTag("Crates").GetComponentsInChildren <Rigidbody>(); foreach (Rigidbody crate in crates) { crate.isKinematic = false; } // Make the cannon ball fire Bullet cannonBall = GameObject.FindGameObjectWithTag("Cannon Ball").GetComponent <Bullet>(); cannonBall.speed = 0.3f; ninjaController.createMessage("Fire Room complete!"); } else { // Clear fire from torches foreach (InteractiveObject io in objects) { io.removeFire(); } // Clear the order torchOrder.Clear(); // Increment the failure count totalStats.failedFirePuzzles++; } } } } else if (!waterLevelComplete) { if (totalStats.startWaterTime < 0.0f) { totalStats.startWaterTime = Time.time; } if (Application.loadedLevelName == "WaterRoom") { int numberFilled = 0; ArrayList bucketWaters = new ArrayList(4); ArrayList triggers = new ArrayList(4); if (waterPuzzle == null) { return; } WaterPuzzleTimer wptimer = waterPuzzle.GetComponent <WaterPuzzleTimer>(); //fill up arrays with waters and fill triggers, and keep track of which buckets are filled for (int i = 0; i < bucketWaters.Capacity; i++) { bucketWaters.Add(GameObject.Find("Fillable Bucket " + i).transform.FindChild("bucket_water").GetComponent <InteractiveObject>()); triggers.Add(((InteractiveObject)bucketWaters[i]).transform.parent.Find("bottom_trigger" + i).GetComponent <FillableObject>()); if (((FillableObject)triggers[i]).filled) { numberFilled++; } } if (!firstWaterMessage && wptimer.getStarted()) { ninjaController.createMessage("Fill the buckets before time runs out! You have 30 seconds left!"); firstWaterMessage = true; } if (wptimer.getTimer() >= 30.0f) { //clear the buckets foreach (FillableObject fo in triggers) { fo.clearBucket(); fo.filled = false; } //restart timer wptimer.setTimer(0.0f); wptimer.setStarted(false); firstWaterMessage = false; timerThreshhold = 5; //tell user he/she ran out of time ninjaController.createMessage("You ran out of time!"); totalStats.failedWaterPuzzles++; } else if (wptimer.getStarted() && wptimer.getTimer() > timerThreshhold) { ninjaController.createMessage("You have " + (30 - timerThreshhold) + " seconds left!"); timerThreshhold += 5; } else if (numberFilled == bucketWaters.Capacity) { //tell them they've completed the room ninjaController.createMessage("Water Room complete!"); waterLevelComplete = true; GameObject.Destroy(GameObject.Find("Exit Door")); } } } else if (!comboLevelComplete) { if (totalStats.startComboTime < 0.0f) { totalStats.startComboTime = Time.time; } if (Application.loadedLevelName == "ComboRoom") { if (comboPuzzle == null) { return; } // Check the buckets if not complete already if (!bucketsComplete) { int filledBuckets = 0; // Find all fillable objects FillableObject[] objects = comboPuzzle.GetComponentsInChildren <FillableObject>(); foreach (FillableObject fo in objects) { if (fo.filled) { filledBuckets++; } } // Buckets complete if (filledBuckets == 2) { bucketsComplete = true; // Find crane GameObject crane = null; foreach (Transform tran in comboPuzzle.GetComponentsInChildren <Transform>()) { if (tran.gameObject.name == "Crane") { crane = tran.gameObject; break; } } // Transition the crane into position iTween.RotateTo(crane, new Vector3(270.0f, 160.0f, 0.0f), 5.0f); } } // Check the torches if not complete already if (!torchesComplete) { // Find elevator GameObject elevator = null; foreach (Transform tran in comboPuzzle.GetComponentsInChildren <Transform>()) { if (tran.gameObject.name == "Elevator") { elevator = tran.gameObject; break; } } // Find all interactive objects InteractiveObject[] objects = comboPuzzle.GetComponentsInChildren <InteractiveObject>(); int numberLit = 0; foreach (InteractiveObject io in objects) { if (io.getObjectType() == ObjectType.Fire) { numberLit++; } } // Torches complete if (numberLit == 2) { torchesComplete = true; // Transition the elevator into position (from -33,60,-22 to -33,35,-22) StartCoroutine(MoveElevator(elevator, new Vector3(-33.0f, 35.0f, -22.0f), 5.0f)); } } } } else { // Create a message ninjaController.createMessage("Level Complete!"); triggerEndLevel("Combo"); // Reset the puzzles waterLevelComplete = false; airLevelComplete = false; fireLevelComplete = false; comboLevelComplete = false; } } }