using System; using System.Collections; using System.Collections.Generic; using Invector; using PixelCrushers.DialogueSystem; using Sirenix.OdinInspector; using UnityEngine; namespace Beyond { [RequireComponent(typeof(DialogueSystemTrigger))] [RequireComponent(typeof(bTriggerGenericAction))] //[vClassHeader("PortalTrigger", false, iconName = "triggerIcon")] public class PortalTrigger : MonoBehaviour { private static bool s_luaMethodRegistered = false; private DialogueSystemTrigger m_dialogueTrigger; private bTriggerGenericAction m_genericTrigger; private string m_levelToLoad; private string[] m_levelVariableName = { "", "WastelandTravelUnlocked", "GardenTravelUnlocked","TempleTravelUnlocked", "ValleyTravelUnlocked", "ChamberTravelUnlocked", "CourtTravelUnlocked" }; public enum Levels { NONE, WASTELAND, GARDEN, TEMPLE, RIVER_VALLEY, SCROLL_CHAMBER, COURT, }; public Levels m_exludeLevel; private bool m_wasExluded; void SetDialogueVariable(Levels level, bool unlocked) { DialogueLua.SetVariable(m_levelVariableName[(int)level], unlocked); } bool GetDialogueVariable(Levels level) { return DialogueLua.GetVariable(m_levelVariableName[(int)level]).asBool; } public void ExcludeLevel(Levels level, bool exclude) { if (level == Levels.NONE) return; if (exclude) { if (!m_wasExluded && GetDialogueVariable(level)) { SetDialogueVariable(level, false); m_wasExluded = true; } } else if (m_wasExluded) { SetDialogueVariable(level, true); m_wasExluded = false; } } private void RegisterLuaFunctions() { if (!s_luaMethodRegistered) { Lua.RegisterFunction("LoadLevel", this, SymbolExtensions.GetMethodInfo(() => LoadLevel((string) null))); s_luaMethodRegistered = true; } } private void UnregisterLuaFunctions() { if (s_luaMethodRegistered) { Lua.UnregisterFunction("LoadLevel"); s_luaMethodRegistered = false; } } // Start is called before the first frame update protected void Start() { //base.Start(); m_dialogueTrigger = GetComponent(); m_genericTrigger = GetComponent(); FadeCanvasGroup.Instance.OnLoadingFadeOutEnd.AddListener(LoadLevel); m_genericTrigger.OnPressActionInput.AddListener(OnPressAction); m_genericTrigger.OnPlayerExit.AddListener((arg0 => { UnregisterLuaFunctions();})); } private void OnPressAction() { RegisterLuaFunctions(); ExcludeLevel(m_exludeLevel, true); if (m_exludeLevel != Levels.NONE) { } m_dialogueTrigger.OnUse(); } private void OnDestroy() { FadeCanvasGroup.Instance.OnLoadingFadeOutEnd.RemoveListener(LoadLevel); ExcludeLevel(m_exludeLevel, false); m_genericTrigger.OnPressActionInput.RemoveListener(m_dialogueTrigger.OnUse); UnregisterLuaFunctions(); } [Button] public void UnloackLevel(Levels level) { SetDialogueVariable(level, true); } private void LoadLevel() { ProxySceneLoader.LoadScene(m_levelToLoad); } private void LoadLevel(string name) { m_levelToLoad = name; FadeCanvasGroup.Instance.BeforeLoadingFade(); } } }