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

227 lines
4.9 KiB
C#

using System;
using System.Collections;
using AibisDream.Framework;
using UnityEngine.PlayerLoop;
namespace AibisDream.FixSystem
{
public class FixStateMachine
{
private IState _curState;
private string _curArgs;
public void SwitchState(FixState nextState, string args = "")
{
_curArgs = args;
_curState?.Exit();
GameLoopManager.Instance.UpdateFixState(nextState, _curArgs);
_curState = CreateState(nextState, _curArgs);
_curState.Enter();
}
private static IState CreateState(FixState nextState, string args)
{
IState res = nextState switch
{
FixState.Clinic => new ClinicState(),
FixState.Engine => new EngineState(),
FixState.CoolingMachine => new CoolingMachineState(),
FixState.BodyModule => new BodyModuleState(),
FixState.Memory => new MemoryState(),
FixState.Eye => new EyeState(),
FixState.UF => new UfState(),
FixState.Gear => new GearState(),
_ => new ClinicState()
};
res.SetArgs(args);
return res;
}
}
public interface IState
{
public FixState GetState { get; }
public void SetArgs(string args);
public IEnumerator Enter();
public IEnumerator Exit();
}
public class ClinicState : IState
{
public FixState GetState => FixState.Clinic;
public void SetArgs(string args)
{
// 无
}
public IEnumerator Enter()
{
// 切换相机
yield break;
}
public IEnumerator Exit()
{
// 似乎没有?
yield break;
}
}
public class BodyModuleState : IState
{
public FixState GetState => FixState.BodyModule;
public void SetArgs(string args)
{
// 无
}
public IEnumerator Enter()
{
// 切换相机
yield break;
}
public IEnumerator Exit()
{
// 似乎没有?
yield break;
}
}
public class GearState : IState
{
public FixState GetState => FixState.Gear;
private string _configKey;
public void SetArgs(string args)
{
_configKey = args;
}
public IEnumerator Enter()
{
// 切换相机
yield break;
}
public IEnumerator Exit()
{
// 切换相机
yield break;
}
}
public class EngineState : IState
{
public FixState GetState => FixState.Engine;
public void SetArgs(string args)
{
// 无
}
public IEnumerator Enter()
{
// 切换相机
yield break;
// 加载Level
// 解锁
}
public IEnumerator Exit()
{
// 上锁
// 切换相机
yield break;
}
}
public class CoolingMachineState : IState
{
public FixState GetState => FixState.CoolingMachine;
public void SetArgs(string args)
{
throw new NotImplementedException();
}
public IEnumerator Enter()
{
throw new NotImplementedException();
}
public IEnumerator Exit()
{
throw new NotImplementedException();
}
}
public class UfState : IState
{
public FixState GetState => FixState.UF;
public void SetArgs(string args)
{
throw new NotImplementedException();
}
public IEnumerator Enter()
{
throw new NotImplementedException();
}
public IEnumerator Exit()
{
throw new NotImplementedException();
}
}
public class EyeState : IState
{
public FixState GetState => FixState.Eye;
public void SetArgs(string args)
{
throw new NotImplementedException();
}
public IEnumerator Enter()
{
throw new NotImplementedException();
}
public IEnumerator Exit()
{
throw new NotImplementedException();
}
}
public class MemoryState : IState
{
public FixState GetState => FixState.Memory;
public void SetArgs(string args)
{
throw new NotImplementedException();
}
public IEnumerator Enter()
{
throw new NotImplementedException();
}
public IEnumerator Exit()
{
throw new NotImplementedException();
}
}
}