74 lines
1.9 KiB
C#
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;
|
|
}
|
|
}
|
|
} |