using System.Diagnostics; using BehaviorDesigner.Runtime; using UnityEngine; namespace MoleMole { public class LevelManager { public LevelActor levelActor; public MonoLevelEntity levelEntity; public IGameMode gameMode; private int _pauseCount; private bool _mutePause; protected LevelManager() { ResetGlobalTimeScale(); InLevelData.InitInLevelData(); AvatarData.InitAvatarData(); MonsterData.InitMonsterData(); CreateInLevelManagers(); } protected virtual void CreateInLevelManagers() { Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); Singleton.Create(); gameMode = new OriginalSPGameMode(); } public virtual void InitAtAwake() { Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); Singleton.Instance.InitAtAwake(); CreateBehaviorManager(); } public virtual void InitAtStart() { Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); Singleton.Instance.InitAtStart(); } public virtual void Core() { Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); Singleton.Instance.Core(); if (Singleton.Instance != null) { Singleton.Instance.Core(); } } public virtual void Destroy() { Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Destroy(); Singleton.Instance.Clear(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); Singleton.Destroy(); DestroyBehaviorDesigner(); ResetGlobalTimeScale(); } public void SetPause(bool pause) { bool flag = IsPaused(); _pauseCount += (pause ? 1 : (-1)); if (_pauseCount < 0) { _pauseCount = 0; } if (_mutePause) { return; } pause = IsPaused(); if (pause != flag) { Singleton.Instance.SetPause(pause); Singleton.Instance.SetPause(pause); Singleton.Instance.SetPause(pause); Singleton.Instance.SetPauseDispatching(pause); if (pause) { levelEntity.timeScaleStack.Push(6, 0f); } else { levelEntity.timeScaleStack.Pop(6); } } } public void SetMutePause(bool mutePause) { _mutePause = mutePause; } public void SetTutorialTimeScale(float timeScale) { timeScale = Mathf.Clamp(timeScale, 0f, 1f); if (timeScale != 1f) { if (levelEntity.timeScaleStack.IsOccupied(7)) { levelEntity.timeScaleStack.Set(7, timeScale); } else { levelEntity.timeScaleStack.Push(7, timeScale); } } else if (levelEntity.timeScaleStack.IsOccupied(7)) { levelEntity.timeScaleStack.Pop(7); } else { levelEntity.timeScaleStack.Set(7, 1f); } } public bool IsPaused() { return _pauseCount > 0; } public void CreateBehaviorManager() { Behavior.CreateBehaviorManager(); } public void DestroyBehaviorDesigner() { BehaviorManager behaviorManager = Object.FindObjectOfType(); if (behaviorManager != null) { Object.Destroy(behaviorManager.gameObject); BehaviorManager.instance = null; } } private void ResetGlobalTimeScale() { Time.timeScale = 1f; Time.fixedDeltaTime = 0.02f * Time.timeScale; } [Conditional("NG_HSOD_DEBUG")] public void AssertIsNetworkedMP() { } [Conditional("NG_HSOD_DEBUG")] public void AssertIsSinglePlayer() { } } }