77 lines
2.0 KiB
C#
77 lines
2.0 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
namespace EndingSystem
|
|
{
|
|
public class EndingWinConditionService : MonoBehaviour
|
|
{
|
|
public static EndingWinConditionService Instance { get; private set; }
|
|
|
|
[Header("Win Condition")]
|
|
[SerializeField] private bool canTriggerEnding = false;
|
|
|
|
[Header("Lifetime")]
|
|
[SerializeField] private bool dontDestroyOnLoad = true;
|
|
|
|
public event Action<bool> CanTriggerEndingChanged;
|
|
|
|
public bool CanTriggerEnding => canTriggerEnding;
|
|
|
|
private void Awake()
|
|
{
|
|
if (Instance != null && Instance != this)
|
|
{
|
|
Destroy(gameObject);
|
|
return;
|
|
}
|
|
|
|
Instance = this;
|
|
if (dontDestroyOnLoad) { DontDestroyOnLoad(gameObject); }
|
|
}
|
|
|
|
public void SetCanTriggerEnding(bool value)
|
|
{
|
|
if (canTriggerEnding == value) { return; }
|
|
canTriggerEnding = value;
|
|
CanTriggerEndingChanged?.Invoke(canTriggerEnding);
|
|
}
|
|
|
|
public void UnlockEnding()
|
|
{
|
|
SetCanTriggerEnding(true);
|
|
}
|
|
|
|
public void DebugUnlockEnding()
|
|
{
|
|
EnsureInstance().UnlockEnding();
|
|
}
|
|
|
|
public void LockEnding()
|
|
{
|
|
SetCanTriggerEnding(false);
|
|
}
|
|
|
|
public void DebugLockEnding()
|
|
{
|
|
EnsureInstance().LockEnding();
|
|
}
|
|
|
|
public static EndingWinConditionService EnsureInstance()
|
|
{
|
|
if (Instance != null) { return Instance; }
|
|
|
|
EndingWinConditionService existing = FindObjectOfType<EndingWinConditionService>(true);
|
|
if (existing != null)
|
|
{
|
|
Instance = existing;
|
|
return Instance;
|
|
}
|
|
|
|
var go = new GameObject("EndingWinConditionService");
|
|
var service = go.AddComponent<EndingWinConditionService>();
|
|
Instance = service;
|
|
return service;
|
|
}
|
|
}
|
|
}
|