using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; public enum DungeonStatusEnum { None, FirstEntrance, SecondEntrance, LastEntrance } public class DungeonManager : MonoBehaviour { public const string NAME = "Dungeon.Entrance"; public DungeonStatusEnum EntranceIndex = DungeonStatusEnum.None; public GameObject TeleportModel; public GameObject Wizard; public bool IsBuilded = false; public static bool hasTeleported; // well finally useless public static void SetTeleported() { hasTeleported = true; } public void Awake() { if (PlayerPrefs.HasKey(NAME)) { EntranceIndex = (DungeonStatusEnum)PlayerPrefs.GetInt(NAME); } else { EntranceIndex = DungeonStatusEnum.FirstEntrance; SaveProggress(EntranceIndex); } } public void Start() { hasTeleported = false; } public void Update() { if (!IsBuilded) { ManageTeleports(); BuildWizard(); IsBuilded = true; } } /// /// Function to manage which teleport is currently required to build on scene /// public void ManageTeleports() { switch (EntranceIndex) { case DungeonStatusEnum.FirstEntrance: { // define output map BuildTeleport("FirstLabirynthCave", new Vector3(15f, -8f, 10f)); break; } case DungeonStatusEnum.SecondEntrance: { BuildTeleport("SecondLabirynthCave", new Vector3(3.5f, 0f, 10)); break; } case DungeonStatusEnum.LastEntrance: { BuildTeleport("BossFightLabirynthCave", new Vector3(0, 0, 0)); break; } default: { break; } } } public void BuildTeleport(string outputMapName, Vector3 spawnCoords) { // 1. get coordsfor teleport Vector3 teleportCoords; do { teleportCoords = GameObject.FindObjectOfType().gameObject.GetComponent().randomCoordsForStanding(); } while (!(Vector2.Distance(teleportCoords, GameObject.FindGameObjectWithTag("Player").gameObject.transform.position) > 30)); // 2. Instantiate var newTeleport = Instantiate(TeleportModel, teleportCoords, Quaternion.identity); newTeleport.name = TeleportModel.name; // 3. Set output map & spwan player coords newTeleport.GetComponent().gateway.currentMapName = SceneManager.GetActiveScene().name; newTeleport.GetComponent().gateway.coords = new Vector3(teleportCoords.x, teleportCoords.y, 10); newTeleport.GetComponent().gateway.nextMapName = outputMapName; newTeleport.GetComponent().gateway.respawnCoords = spawnCoords; newTeleport.AddComponent(); } public void SaveProggress(DungeonStatusEnum status) { PlayerPrefs.SetInt(NAME, (int)status); } public void ChangeState() { EntranceIndex = (DungeonStatusEnum)(EntranceIndex + 1); SaveProggress(EntranceIndex); } public void BuildWizard() { Vector3 teleportCoords; do { teleportCoords = GameObject.FindObjectOfType().gameObject.GetComponent().randomCoordsForStanding(); } while (!(Vector2.Distance(teleportCoords, GameObject.FindGameObjectWithTag("Player").gameObject.transform.position) > 6 && Vector2.Distance(teleportCoords, GameObject.FindGameObjectWithTag("Player").gameObject.transform.position) < 9)); var newWizard = Instantiate(Wizard, teleportCoords, Quaternion.identity); //newWizard.transform.localPosition = teleportCoords; newWizard.name = Wizard.name; } }