using System; using System.Collections; using System.Collections.Generic; using PixelCrushers; using PixelCrushers.DialogueSystem; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.SceneManagement; namespace Beyond { [RequireComponent(typeof(BoxCollider))] public class PortalController : MonoBehaviour { [SerializeField] private LevelLoaderData _levelLoaderData; [SerializeField] private string LevelToLoadName; [SerializeField] private string m_spawnPoint; // [SerializeField] private GameObject _portalAudioToSpawn; private LevelData _levelToLoadData; private BoxCollider _trigger; private static bool s_luaMethodRegistered = false; private void RegisterLuaFunctions() { Lua.RegisterFunction("LoadLevel", this, SymbolExtensions.GetMethodInfo(() => LoadLevel((string)null))); s_luaMethodRegistered = true; } private void UnregisterLuaFunctions() { Lua.UnregisterFunction("LoadLevel"); s_luaMethodRegistered = false; } private void Awake() { if (!s_luaMethodRegistered) { RegisterLuaFunctions(); } } private void OnDestroy() { if (s_luaMethodRegistered) { UnregisterLuaFunctions(); } } private void OnEnable() { _levelToLoadData = _levelLoaderData.GetData(LevelToLoadName); FadeCanvasGroup.Instance.OnLoadingFadeOutEnd.AddListener(LoadLevel); _trigger = GetComponent(); } private void OnDisable() { FadeCanvasGroup.Instance.OnLoadingFadeOutEnd.RemoveListener(LoadLevel); } public void OnTriggerEnter(Collider other) { if (!other.CompareTag("Player")) { return; } if (_levelLoaderData == null) { Debug.LogError("_levelLoaderData == null"); return; } if (_levelToLoadData == null) { Debug.LogError("Probably there is no data for scene : " + LevelToLoadName + " in levelLoaderData"); return; } if (!_levelToLoadData.IsUnlocked) { return; } _trigger.enabled = false; FadeCanvasGroup.Instance.BeforeLoadingFade(); } private void LoadLevel(string name) { _levelToLoadData = _levelLoaderData.GetData(name); FadeCanvasGroup.Instance.BeforeLoadingFade(); } [Button] private void LoadLevel() { if (string.IsNullOrEmpty(m_spawnPoint)) { //SaveSystem.LoadScene(_levelToLoadData.LevelName); ProxySceneLoader.LoadScene(_levelToLoadData.LevelName); } else { //SaveSystem.LoadScene(_levelToLoadData.LevelName + "@" + m_spawnPoint); ProxySceneLoader.LoadScene(_levelToLoadData.LevelName + "@" + m_spawnPoint); } } } }