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

74 lines
1.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using PixelCrushers;
using UnityEngine;
using UnityEngine.Events;
namespace Beyond
{
public class GameStateTrigger : Saver
{
[SerializeField] private GameStateManager.State m_fireOnState = GameStateManager.State.NORMAL;
public UnityEvent OnStateTrigger;
public enum State
{
INACTIVE,
ACTIVE,
FIRED
}
[Serializable]
public class SaveData
{
public State state;
}
private SaveData m_data = new SaveData();
// Start is called before the first frame update
void Start()
{
if (GameStateManager.Instance != null)
GameStateManager.Instance.m_OnStateChanged.AddListener(OnStateChanged);
}
public void EnableTrigger(bool enable)
{
m_data.state = enable ? State.ACTIVE : State.INACTIVE;
if (enable)
{
CheckActivationConditions();
}
}
void OnDestroy()
{
if (GameStateManager.Instance != null)
GameStateManager.Instance.m_OnStateChanged.RemoveListener(OnStateChanged);
}
void CheckActivationConditions()
{
if (m_data.state == State.ACTIVE && GameStateManager.Instance.CurrentState == m_fireOnState)
{
m_data.state = State.FIRED;
OnStateTrigger?.Invoke();
}
}
private void OnStateChanged(GameStateManager.State gameState)
{
CheckActivationConditions();
}
public override string RecordData()
{
return SaveSystem.Serialize(m_data);
}
public override void ApplyData(string s)
{
var data = SaveSystem.Deserialize<SaveData>(s);
if (data != null)
m_data = data;
}
}
}