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(s); if (data != null) m_data = data; } } }