Files
Echo/Assets/_Project/Scripts/EndingSystem/EndingWinConditionService.cs
2026-07-08 20:42:51 +08:00

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;
}
}
}