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

114 lines
3.2 KiB
C#

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<BoxCollider>();
}
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);
}
}
}
}