相机状态和维修状态解绑

This commit is contained in:
2025-01-16 11:45:37 +08:00
parent d560a8dc93
commit be558878ce
10 changed files with 83 additions and 74 deletions
@@ -109,7 +109,7 @@ public class MemoryProcess : MonoBehaviour
{
FixSystemCenter.SystemDic.Register(this);
var virtualCam = transform.Find("Memory Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.Memory, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.Memory, virtualCam);
}
@@ -67,12 +67,12 @@ namespace AibisDream.FixSystem
// 注册Camera
var virtualCam = transform.GetComponentInChildren<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.BodyModule, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.BodyModule, virtualCam);
}
private void OnDestroy()
{
CameraKit.Instance.UnRegisterCamera(FixState.BodyModule);
CameraKit.Instance.UnRegisterCamera(CameraEnum.BodyModule);
}
/// <summary>
@@ -36,7 +36,7 @@ namespace AibisDream
// 注册Camera
var virtualCam = transform.Find("Clinic Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.Clinic, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.Clinic, virtualCam);
}
private void LoadData(ClinicData data)
@@ -98,7 +98,7 @@ namespace AibisDream
_clinicData.LoadEvent -= LoadData;
GameLoopManager.FixDataContainer.Unregister<ClinicData>();
FixSystemCenter.SystemDic.Unregister<ClinicSystem>();
CameraKit.Instance.UnRegisterCamera(FixState.Clinic);
CameraKit.Instance.UnRegisterCamera(CameraEnum.Clinic);
}
private void OnCharacterChange(CharacterData characterData)
@@ -31,7 +31,7 @@ namespace AibisDream.Framework
// 注册相机
var virtualCam = transform.Find("Cooling Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.CoolingMachine, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.CoolingMachine, virtualCam);
}
private void InitRefs()
@@ -45,7 +45,7 @@ namespace AibisDream.Framework
private void OnDestroy()
{
CameraKit.Instance.UnRegisterCamera(FixState.CoolingMachine);
CameraKit.Instance.UnRegisterCamera(CameraEnum.CoolingMachine);
}
#region
+45 -48
View File
@@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections;
using AibisDream.Framework;
using UnityEngine;
@@ -8,16 +7,16 @@ namespace AibisDream.FixSystem
public class FixStateMachine
{
public FixState CurState => _curState.GetState;
private IState _curState;
private string _curArgs;
public IEnumerator SwitchState(FixState nextState, string args = "")
{
_curArgs = args;
yield return _curState?.Exit();
GameLoopManager.Instance?.UpdateFixState(nextState, _curArgs);
_curState = CreateState(nextState, _curArgs);
yield return _curState.Enter();
@@ -45,12 +44,12 @@ namespace AibisDream.FixSystem
FixState.Gear => new GearState(),
_ => new ClinicState()
};
res.SetArgs(args);
return res;
}
}
public enum FixState
{
Default,
@@ -84,7 +83,7 @@ namespace AibisDream.FixSystem
public IEnumerator Enter()
{
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.Clinic);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic);
}
public IEnumerator Exit()
@@ -97,7 +96,7 @@ namespace AibisDream.FixSystem
public struct BodyModuleState : IState
{
public FixState GetState => FixState.BodyModule;
public void SetArgs(string args)
{
// 无
@@ -109,7 +108,7 @@ namespace AibisDream.FixSystem
// 拔出插头
bodyModuleSystem.ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
}
public IEnumerator Exit()
@@ -124,9 +123,9 @@ namespace AibisDream.FixSystem
public struct GearState : IState
{
public FixState GetState => FixState.Gear;
private string _configKey;
public void SetArgs(string args)
{
_configKey = args;
@@ -135,14 +134,15 @@ namespace AibisDream.FixSystem
public IEnumerator Enter()
{
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(FixState.BodyModule))
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.Gear);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Gear);
// 加载关卡数据
if (!string.IsNullOrEmpty(_configKey))
{
@@ -161,7 +161,7 @@ namespace AibisDream.FixSystem
public struct EngineState : IState
{
public FixState GetState => FixState.Engine;
public void SetArgs(string args)
{
// 无
@@ -170,14 +170,15 @@ namespace AibisDream.FixSystem
public IEnumerator Enter()
{
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(FixState.BodyModule))
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
//yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
//yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.Engine);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Engine);
}
public IEnumerator Exit()
@@ -191,7 +192,7 @@ namespace AibisDream.FixSystem
public struct CoolingMachineState : IState
{
private bool _playLink;
public FixState GetState => FixState.CoolingMachine;
public void SetArgs(string args)
@@ -203,8 +204,8 @@ namespace AibisDream.FixSystem
{
var coolingSystem = FixSystemCenter.SystemDic.Get<CoolingSystem>();
// 切相机
yield return CameraKit.Instance.SwitchCamera(FixState.CoolingMachine);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.CoolingMachine);
// 打开泵机
coolingSystem.gameObject.SetActive(true);
yield return coolingSystem.OpenCoolingSystem();
@@ -228,34 +229,31 @@ namespace AibisDream.FixSystem
public struct UfState : IState
{
public FixState GetState => FixState.UF;
public void SetArgs(string args)
{
}
public IEnumerator Enter()
{
{
float duration = 0.5f;
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
var UFSystem = FixSystemCenter.SystemDic.Get<UFSystem>();
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(FixState.BodyModule))
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
// 插头回到初始插孔
bodyModuleSystem.ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.UF);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF);
yield return MainUIController.Instance.FadeInSync(duration);
UFSystem.OpenUFView();
yield return MainUIController.Instance.FadeOutSync(duration);
}
public IEnumerator Exit()
@@ -269,36 +267,35 @@ namespace AibisDream.FixSystem
public struct EyeState : IState
{
public FixState GetState => FixState.Eye;
public void SetArgs(string args)
{
}
public IEnumerator Enter()
{
{
float duration = 0.5f;
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
var eyeSystem = FixSystemCenter.SystemDic.Get<EyeSystem>();
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(FixState.BodyModule))
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
//打开盖子
bodyModuleSystem.FindBodyModuleByName("Eye").transform.Find("Module Pic").GetComponent<SpriteRenderer>().sprite=Resources.Load<Sprite>("Art/Fix/Peipei/视觉盖子打开");
bodyModuleSystem.FindBodyModuleByName("Eye").transform.Find("Module Pic").GetComponent<SpriteRenderer>()
.sprite = Resources.Load<Sprite>("Art/Fix/Peipei/视觉盖子打开");
// 插头回到初始插孔
bodyModuleSystem.ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(FixState.Eye);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye);
yield return MainUIController.Instance.FadeInSync(duration);
eyeSystem.OnEnter();
yield return MainUIController.Instance.FadeOutSync(duration);
}
public IEnumerator Exit()
@@ -312,10 +309,9 @@ namespace AibisDream.FixSystem
public struct MemoryState : IState
{
public FixState GetState => FixState.Memory;
public void SetArgs(string args)
{
}
public IEnumerator Enter()
@@ -323,18 +319,19 @@ namespace AibisDream.FixSystem
float duration = 0.5f;
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
var memorySystem = FixSystemCenter.SystemDic.Get<MemoryProcess>();
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(FixState.BodyModule))
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(FixState.BodyModule);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
yield return memorySystem.DropMemoryProjector();
// 插头回到初始插孔
// 插头回到初始插孔
bodyModuleSystem.ResetPlug();
// 相机聚焦到目标位
yield return CameraKit.Instance.SwitchCamera(FixState.Memory);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Memory);
yield return MainUIController.Instance.FadeInSync(duration);
memorySystem.OnEnter();
yield return MainUIController.Instance.FadeOutSync(duration);
+25 -13
View File
@@ -1,7 +1,6 @@
using System;
using System.Collections;
using System.Collections.Generic;
using AibisDream.FixSystem;
using AibisDream.Kit;
using Cinemachine;
using DG.Tweening;
@@ -21,10 +20,10 @@ namespace AibisDream.Framework
#region
private CinemachineBrain _cameraBrain;
private readonly Dictionary<FixState, ICinemachineCamera> _virtualCameraDict = new();
private readonly Dictionary<FixState, CamState> _camInitStateDict = new();
private readonly Dictionary<CameraEnum, ICinemachineCamera> _virtualCameraDict = new();
private readonly Dictionary<CameraEnum, CamState> _camInitStateDict = new();
private FixState _curFixState;
private CameraEnum _curCameraEnum;
private CamState _curInitState;
public Camera uiCamera;
@@ -43,7 +42,7 @@ namespace AibisDream.Framework
public override void OnSingletonInit()
{
_cameraBrain = Camera.main?.GetComponent<CinemachineBrain>();
_curFixState = FixState.Default;
_curCameraEnum = CameraEnum.Default;
// 获取UICamera
if (Camera.main && Camera.main.TryGetComponent<UniversalAdditionalCameraData>(out var cameraData))
@@ -77,7 +76,7 @@ namespace AibisDream.Framework
}
}
public void RegisterCamera(FixState camType, ICinemachineCamera virtualCamera)
public void RegisterCamera(CameraEnum camType, ICinemachineCamera virtualCamera)
{
_virtualCameraDict[camType] = virtualCamera;
@@ -90,7 +89,7 @@ namespace AibisDream.Framework
_camInitStateDict[camType] = initState;
}
public void UnRegisterCamera(FixState camType, ICinemachineCamera virtualCamera)
public void UnRegisterCamera(CameraEnum camType, ICinemachineCamera virtualCamera)
{
if (!_virtualCameraDict.TryGetValue(camType, out var curCam)) return;
@@ -101,7 +100,7 @@ namespace AibisDream.Framework
}
}
public void UnRegisterCamera(FixState camType)
public void UnRegisterCamera(CameraEnum camType)
{
_virtualCameraDict.Remove(camType);
_camInitStateDict.Remove(camType);
@@ -120,18 +119,18 @@ namespace AibisDream.Framework
/// </summary>
/// <param name="targetCameraState"></param>
/// <returns>是就不用切相机</returns>
public bool EqualToCameraState(FixState targetCameraState)
public bool EqualToCameraState(CameraEnum targetCameraState)
{
return _curFixState == targetCameraState;
return _curCameraEnum == targetCameraState;
}
/// <summary>
/// 切换相机
/// </summary>
/// <param name="camType"></param>
public IEnumerator SwitchCamera(FixState camType)
public IEnumerator SwitchCamera(CameraEnum camType)
{
if (_curFixState == camType)
if (_curCameraEnum == camType)
{
yield break;
}
@@ -249,7 +248,7 @@ namespace AibisDream.Framework
public static IEnumerator SwitchCamera(string targetStateStr)
{
// 字符串转枚举
if (!Enum.TryParse<FixState>(targetStateStr, out var targetState))
if (!Enum.TryParse<CameraEnum>(targetStateStr, out var targetState))
{
Debug.Log($"{targetStateStr}不在FixState枚举中");
yield break;
@@ -258,4 +257,17 @@ namespace AibisDream.Framework
yield return CameraKit.Instance.SwitchCamera(targetState);
}
}
public enum CameraEnum
{
Default,
Clinic,
CoolingMachine,
BodyModule,
Memory,
Eye,
UF,
Engine,
Gear
}
}
@@ -39,7 +39,7 @@ namespace AibisDream
// 注册相机
var virtualCam = transform.Find("Engine Camera").GetComponentInChildren<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.Engine, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.Engine, virtualCam);
}
private void Start()
@@ -59,7 +59,7 @@ namespace AibisDream
private void OnDestroy()
{
CameraKit.Instance.UnRegisterCamera(FixState.Engine);
CameraKit.Instance.UnRegisterCamera(CameraEnum.Engine);
}
private void Update()
+2 -2
View File
@@ -56,7 +56,7 @@ namespace AibisDream
// 注册相机
var virtualCam = transform.Find("Gear Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.Gear, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.Gear, virtualCam);
}
private void Start()
@@ -71,7 +71,7 @@ namespace AibisDream
private void OnDestroy()
{
CameraKit.Instance.UnRegisterCamera(FixState.Gear);
CameraKit.Instance.UnRegisterCamera(CameraEnum.Gear);
}
#endregion
@@ -35,7 +35,7 @@ public class EyeSystem : MonoBehaviour
{
FixSystemCenter.SystemDic.Register(this);
var virtualCam = transform.Find("Eye Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.Eye, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.Eye, virtualCam);
GameLoopManager.FixDataContainer.Register(_eyeData);
// 添加加载逻辑
_eyeData.LoadEvent += LoadData;
@@ -17,7 +17,7 @@ public class UFSystem : MonoBehaviour
{
FixSystemCenter.SystemDic.Register(this);
var virtualCam = transform.Find("UF Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(FixState.UF, virtualCam);
CameraKit.Instance.RegisterCamera(CameraEnum.UF, virtualCam);
}
public void OpenUFView()