137 lines
4.0 KiB
C#
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();
|
|
}
|
|
|
|
}
|
|
} |