Files
aibis-dream/Assets/Scripts/FixSystemNew/FixSystemCenter.cs
T
2025-01-08 11:41:20 +08:00

88 lines
3.4 KiB
C#

using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
namespace AibisDream.FixSystem
{
public class FixSystemCenter : Singleton<FixSystemCenter>
{
public FixState curState;
public override void OnSingletonInit()
{
SystemDic ??= new IOCContainer();
InitTransitionDic();
// TODO 这个回头要改
curState = FixState.Clinic;
AudioManager.PlayAmb1Audio("amb_room");
// 初始化状态机
StateMachine = new FixStateMachine();
}
#region 系统索引
// 容纳System
public static IOCContainer SystemDic = new();
#endregion
#region 状态机相关
public static FixStateMachine StateMachine;
#endregion
#region 转场管理
private static readonly StateDictionary<ITransitionCommand> TransitionDic = new();
private void InitTransitionDic()
{
TransitionDic.Add(FixState.Clinic, FixState.BodyModule, new ClinicToBodyModuleCommand());
TransitionDic.Add(FixState.BodyModule, FixState.Clinic, new BodyModuleToClinicCommand());
TransitionDic.Add(FixState.BodyModule, FixState.Engine, new BodyModuleToEngineCommand());
TransitionDic.Add(FixState.Engine, FixState.BodyModule, new EngineToBodyModuleCommand());
TransitionDic.Add(FixState.Clinic, FixState.Engine, new ClinicToEngineCommand());
TransitionDic.Add(FixState.Engine, FixState.Clinic, new EngineToClinicCommand());
TransitionDic.Add(FixState.BodyModule, FixState.Eye, new BodyModuleToEyeCommand());
TransitionDic.Add(FixState.Eye, FixState.BodyModule, new EyeToBodyModuleCommand());
TransitionDic.Add(FixState.BodyModule, FixState.Memory, new BodyModuleToMemoryCommand());
TransitionDic.Add(FixState.Memory, FixState.BodyModule, new MemoryToBodyModuleCommand());
TransitionDic.Add(FixState.BodyModule, FixState.UF, new BodyModuleToUFCommand());
TransitionDic.Add(FixState.UF, FixState.BodyModule, new UFToBodyModuleCommand());
TransitionDic.Add(FixState.Clinic, FixState.CoolingMachine, new ClinicToCoolingCommand());
TransitionDic.Add(FixState.CoolingMachine, FixState.Clinic, new CoolingToClinicCommand());
TransitionDic.Add(FixState.BodyModule, FixState.Gear, new BodyModuleToGearCommand());
TransitionDic.Add(FixState.Gear, FixState.BodyModule, new GearToBodyModuleCommand());
TransitionDic.Add(FixState.Clinic, FixState.Gear, new ClinicToGearCommand());
TransitionDic.Add(FixState.Gear, FixState.Clinic, new GearToClinicCommand());
}
/// <summary>
/// 执行转场
/// </summary>
/// <param name="nextState">需要转换的状态</param>
public ITransitionCommand TransToNextState(FixState nextState)
{
// 没存过的先打个日志报错
if (!TransitionDic.TryGetValue(curState, nextState, out var command))
{
Debug.Log($"源为{curState.ToString()}, 目标为{nextState.ToString()}, 转场命令不存在");
return null;
}
curState = nextState;
return command;
}
protected override void OnDestroy()
{
SystemDic.Clear();
base.OnDestroy();
}
#endregion
}
}