Files
beyond/Assets/Scripts/Triggers/PortalTrigger.cs
2024-11-20 15:21:28 +01:00

137 lines
4.0 KiB
C#

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<DialogueSystemTrigger>();
m_genericTrigger = GetComponent<bTriggerGenericAction>();
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();
}
}
}