using System; using System.Collections; using AibisDream.Framework; using AibisDream.UI; using DG.Tweening; using UnityEngine; namespace AibisDream.FixSystem { public struct DefaultState : IFixState { public FixState GetState => FixState.Default; public IEnumerator Enter() { CameraKit.Instance.SwitchCamera(CameraEnum.Clinic, true); var clinicSystem = FixSystemCenter.SystemDic.Get(); var data = clinicSystem.bubbleSlotGroup.CollectData(); DialogUIManager.Instance.LoadBubbles(data); yield break; } public IEnumerator Exit() { yield break; } } public struct ClinicState : IFixState { public FixState GetState => FixState.Clinic; public void SetArgs(string args) { // 无 } public IEnumerator Enter() { // 先加载对话气泡,避免 Yarn 对话(如 测试 节点 me: 释放log)在相机切换完成前执行时找不到 Player 槽位 var clinicSystem = FixSystemCenter.SystemDic.Get(); // 切换相机 yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic); var data = clinicSystem.bubbleSlotGroup.CollectData(); DialogUIManager.Instance.LoadBubbles(data); } public IEnumerator Exit() { // 无 yield break; } } public struct BodyModuleState : IFixState { private string _args; public FixState GetState => FixState.BodyModule; public void SetArgs(string args) { // 设置参数 _args = args; } public IEnumerator Enter() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var cablePanel = FixPanelSystem.GetRepairPanel(); // 拔出插头 // 切换Body或Head if (Enum.TryParse(_args, out var moduleState)) { bodyModuleSystem.SwitchModuleGroup(moduleState); } if (cablePanel != null && !FixPanelSystem.Instance.IsSystemOn) { // 切换相机 yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModuleCenter); yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); yield return new WaitForSeconds(0.5f); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); yield return FixPanelSystem.Instance.StartAllSystems(); } else { FixPanelSystem.GetRepairPanel().ResetPlug(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); } // 加载气泡 var data = FixPanelSystem.Instance.BubbleSlotGroup.CollectData(); DialogUIManager.Instance.LoadBubbles(data); // 开启交互 bodyModuleSystem.EnableSystem(); } public IEnumerator Exit() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); // 拔出插头 FixPanelSystem.GetRepairPanel().ResetPlug(); // 关闭交互 bodyModuleSystem.DisableSystem(); yield break; } } public struct OpState : IFixState { public FixState GetState => FixState.Op; public void SetArgs(string args) { // 无 } public IEnumerator Enter() { if (!CameraKit.Instance.EqualToCameraState(CameraEnum.Op)) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Op); } } public IEnumerator Exit() { // 无 yield break; } } public struct DreamState : IFixState { public FixState GetState => FixState.Dream; public void SetArgs(string args) { // 无 } public IEnumerator Enter() { if (!CameraKit.Instance.EqualToCameraState(CameraEnum.DreamCamera)) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.DreamCamera); var openSystem = FixSystemCenter.SystemDic.Get(); DialogUIManager.Instance.LoadBubbles(openSystem.bubbleSlotGroup.CollectData()); } } public IEnumerator Exit() { // 无 yield break; } } }