Global Game Jam 2022
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

113 lines
2.1 KiB

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using NaughtyAttributes;
using Variables;
public class LevelManager : MonoBehaviour
{
[SerializeField, Header("References")]
Reference<bool> m_isPlayerDead;
[SerializeField]
Reference<bool> m_freezePlayer;
[SerializeField]
Reference<bool> m_isVictory;
[SerializeField]
Reference<float> m_timer;
[SerializeField, BoxGroup("Level Settings")]
private string m_levelName = "Level 1";
[SerializeField, BoxGroup("Level Settings")]
private float m_timeInLevel = 10;
[SerializeField]
private float m_resetTime = 1;
[SerializeField]
private string m_nextSceneToLoad = "Level 2";
private IResettable[] m_allResetable;
private void Start()
{
m_allResetable = FindObjectsOfType<MonoBehaviour>().OfType<IResettable>().ToArray();
m_timer.Value = m_timeInLevel;
foreach (IResettable resettable in m_allResetable)
{
resettable.OnLevelLoad();
}
}
private void Update()
{
if (!m_freezePlayer)
m_timer.Value -= Time.deltaTime;
}
private void OnEnable()
{
m_isPlayerDead.OnValueChanged += OnPlayerDeadChange;
m_isVictory.OnValueChanged += OnPlayerVictoryChange;
}
private void OnDisable()
{
m_isPlayerDead.OnValueChanged -= OnPlayerDeadChange;
m_isVictory.OnValueChanged -= OnPlayerVictoryChange;
}
private IEnumerator DeathRoutine()
{
m_freezePlayer.Value = true;
m_timer.Value = m_timeInLevel;
foreach (IResettable resettable in m_allResetable)
StartCoroutine(resettable.OnResetStart(m_resetTime));
yield return new WaitForSeconds(m_resetTime);
foreach (IResettable resettable in m_allResetable)
resettable.OnResetEnd();
m_freezePlayer.Value = false;
}
private void OnPlayerDeadChange(bool value)
{
if (value)
{
StartCoroutine(DeathRoutine());
}
}
private void OnPlayerVictoryChange(bool value)
{
}
}