You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/D2D_Scripts/Core/PausablesHub.cs

57 lines
1.9 KiB
C#

1 month ago
using System.Collections.Generic;
using D2D.Utilities;
using D2D.Tools;
using UnityEngine;
namespace D2D.Core
{
/// <summary>
/// Activates and deactivates pausables according to
/// current game state IsGameActiveDuringState option
/// </summary>
public class PausablesHub : MonoBehaviour, ILazy
{
/// <summary>
/// All existed pausable objects in game
/// </summary>
private static List<PausablesMember> _pausables = new List<PausablesMember>();
private GameStateMachine _gameStateMachine;
private void OnEnable()
{
_gameStateMachine = this.FindLazy<GameStateMachine>();
// Adjust switching pausable activity to any state
_gameStateMachine.On<GameState>(UpdatePausablesActivityAccordingToState, gameObject);
}
private void UpdatePausablesActivityAccordingToState()
{
for (int i = 0; i < _pausables.Count; i++)
{
// Remove null or already destroyed pausables
if (_pausables[i] == null || _pausables[i].gameObject == null)
{
_pausables.RemoveAt(i);
continue;
}
// If all is ok, update pausable activity according to current game state
// _pausables[i].gameObject.SetActive(_gameStateMachine.Last.IsGameActiveDuringState);
}
}
/// <summary>
/// Register pausable. So now, new object will be paused or not according to game state
/// </summary>
public void AddPausable(PausablesMember newPausable)
{
_pausables.Add(newPausable);
// if (_gameStateMachine.IsEmpty || !_gameStateMachine.Last.IsGameActiveDuringState)
// newPausable.gameObject.SetActive(false);
}
}
}