private void LevelSystem_OnPlayerEnter(object sender, EventArgs e) { TeleporterSystem tp = levelSystem.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>(); tp.isBossTeleporter = true; tp.OnLevelComplete += Tp_OnLevelComplete; }
public void SetLevelComplete(bool isLevelComplete, int levelIndex) { foreach (GameObject teleporter in teleporterList) { // Disable teleporter TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>(); ts.SetLevelComplete(isLevelComplete, levelIndex); } }
public void SetPlayerHere(bool isPlayerHere) { foreach (GameObject teleporter in teleporterList) { // Disable teleporter TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>(); ts.IsPlayerHere = isPlayerHere; } }
/// <summary> /// Enable child teleporters /// </summary> public void EnableTeleporters() { if (TeleporterEnabled) { return; } if (teleporterList == null) { return; } TeleporterEnabled = true; foreach (GameObject teleporter in teleporterList) { // Enable teleporter TeleporterSystem ts = teleporter.GetComponent <TeleporterSystem>(); ts.EnableTeleporter(); } }
/// <summary> /// Generate bonds between teleporters /// </summary> public void GenerateLinks() { /*** Start area link ***/ if (generateStartArea) { if (levelsToGenerate > 0) { // link start area tp to first level LevelSystem ls = generatedStartArea.GetComponent <LevelSystem>(); TeleporterSystem ts = ls.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>(); ts.destination = generatedLevels[0]; } else { // link start area tp to boss area LevelSystem ls = generatedStartArea.GetComponent <LevelSystem>(); TeleporterSystem ts = ls.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>(); ts.destination = generatedBossArea; } } /*** Levels links ***/ for (int i = 0; i < generatedLevels.Count; i++) { // Get available levels to be linked List <GameObject> availableLevels = new List <GameObject>(generatedLevels); // Get levelSystem and remove this level from available list GameObject levelObject = availableLevels[i]; GameObject nextLevel; // Get next level if ((i + 1) < availableLevels.Count) { nextLevel = availableLevels[i + 1]; } else if (generateBossArea) { nextLevel = generatedBossArea; } else { break; } LevelSystem levelSystem = levelObject.GetComponent <LevelSystem>(); availableLevels.RemoveAt(i); // Get teleporters count int tpCount = levelSystem.teleportersExit.transform.childCount; if (tpCount == 0) { continue; } TeleporterSystem teleporterSystem; // Set one of the tp to the next level, randomly selected if (tpCount == 1) { teleporterSystem = levelSystem.teleportersExit.transform.GetChild(0).GetComponent <TeleporterSystem>(); teleporterSystem.destination = nextLevel; continue; } int rndTp = Random.Range(0, levelSystem.teleportersExit.transform.childCount); // and the others to a random available level availableLevels.Remove(nextLevel); for (int j = 0; j < tpCount; j++) { // Get teleporter at index j teleporterSystem = levelSystem.teleportersExit.transform.GetChild(j).GetComponent <TeleporterSystem>(); if (j == rndTp) { teleporterSystem.destination = nextLevel; // Remove the random level from the list availableLevels.Remove(nextLevel); } else { // If no level is available, throw an exception if (availableLevels.Count == 0) { throw new MissingComponentException("Not enough levels"); } // Take a random level int rndIndex = Random.Range(0, availableLevels.Count); GameObject rndLevel = availableLevels[rndIndex]; // Remove the random level from the list availableLevels.Remove(rndLevel); // Set target destination teleporterSystem.destination = rndLevel; } } } }