Files
BH3/Assets/Scripts/Assembly-CSharp/MoleMole/LevelManager.cs
2025-08-13 09:26:42 +08:00

221 lines
6.0 KiB
C#

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<RuntimeIDManager>.Create();
Singleton<StageManager>.Create();
Singleton<AvatarManager>.Create();
Singleton<CameraManager>.Create();
Singleton<MonsterManager>.Create();
Singleton<PropObjectManager>.Create();
Singleton<DynamicObjectManager>.Create();
Singleton<EventManager>.Create();
Singleton<LevelDesignManager>.Create();
Singleton<AuxObjectManager>.Create();
Singleton<DetourManager>.Create();
Singleton<ShaderDataManager>.Create();
Singleton<CinemaDataManager>.Create();
gameMode = new OriginalSPGameMode();
}
public virtual void InitAtAwake()
{
Singleton<RuntimeIDManager>.Instance.InitAtAwake();
Singleton<StageManager>.Instance.InitAtAwake();
Singleton<AvatarManager>.Instance.InitAtAwake();
Singleton<CameraManager>.Instance.InitAtAwake();
Singleton<MonsterManager>.Instance.InitAtAwake();
Singleton<PropObjectManager>.Instance.InitAtAwake();
Singleton<DynamicObjectManager>.Instance.InitAtAwake();
Singleton<WwiseAudioManager>.Instance.InitAtAwake();
Singleton<EventManager>.Instance.InitAtAwake();
Singleton<LevelDesignManager>.Instance.InitAtAwake();
Singleton<AuxObjectManager>.Instance.InitAtAwake();
Singleton<DetourManager>.Instance.InitAtAwake();
Singleton<ShaderDataManager>.Instance.InitAtAwake();
Singleton<CinemaDataManager>.Instance.InitAtAwake();
CreateBehaviorManager();
}
public virtual void InitAtStart()
{
Singleton<StageManager>.Instance.InitAtStart();
Singleton<AvatarManager>.Instance.InitAtStart();
Singleton<CameraManager>.Instance.InitAtStart();
Singleton<MonsterManager>.Instance.InitAtStart();
Singleton<PropObjectManager>.Instance.InitAtStart();
Singleton<DynamicObjectManager>.Instance.InitAtStart();
Singleton<EventManager>.Instance.InitAtStart();
Singleton<LevelDesignManager>.Instance.InitAtStart();
Singleton<AuxObjectManager>.Instance.InitAtStart();
Singleton<DetourManager>.Instance.InitAtStart();
}
public virtual void Core()
{
Singleton<StageManager>.Instance.Core();
Singleton<AvatarManager>.Instance.Core();
Singleton<CameraManager>.Instance.Core();
Singleton<MonsterManager>.Instance.Core();
Singleton<PropObjectManager>.Instance.Core();
Singleton<DynamicObjectManager>.Instance.Core();
Singleton<EffectManager>.Instance.Core();
Singleton<EventManager>.Instance.Core();
Singleton<LevelDesignManager>.Instance.Core();
Singleton<AuxObjectManager>.Instance.Core();
Singleton<DetourManager>.Instance.Core();
if (Singleton<WwiseAudioManager>.Instance != null)
{
Singleton<WwiseAudioManager>.Instance.Core();
}
}
public virtual void Destroy()
{
Singleton<DynamicObjectManager>.Instance.Destroy();
Singleton<PropObjectManager>.Instance.Destroy();
Singleton<MonsterManager>.Instance.Destroy();
Singleton<AvatarManager>.Instance.Destroy();
Singleton<EventManager>.Instance.Destroy();
Singleton<LevelDesignManager>.Instance.Destroy();
Singleton<AuxObjectManager>.Instance.Destroy();
Singleton<EffectManager>.Instance.Clear();
Singleton<DynamicObjectManager>.Destroy();
Singleton<MonsterManager>.Destroy();
Singleton<PropObjectManager>.Destroy();
Singleton<CameraManager>.Destroy();
Singleton<AvatarManager>.Destroy();
Singleton<RuntimeIDManager>.Destroy();
Singleton<StageManager>.Destroy();
Singleton<EventManager>.Destroy();
Singleton<LevelDesignManager>.Destroy();
Singleton<AuxObjectManager>.Destroy();
Singleton<DetourManager>.Destroy();
Singleton<ShaderDataManager>.Destroy();
Singleton<CinemaDataManager>.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<LevelDesignManager>.Instance.SetPause(pause);
Singleton<AvatarManager>.Instance.SetPause(pause);
Singleton<MonsterManager>.Instance.SetPause(pause);
Singleton<EventManager>.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<BehaviorManager>();
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()
{
}
}
}