using System; using System.Collections; using AibisDream.Framework; using AibisDream.UI; using UnityEngine; namespace AibisDream.FixSystem { public struct DefaultCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Default; public IEnumerator Enter(FixTransition transition) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic, true); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Clinic); } public IEnumerator EnterImmediate(FixTransition transition) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic, true); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Clinic); } public IEnumerator Exit(FixTransition transition) { yield break; } } public struct ClinicCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Clinic; public IEnumerator Enter(FixTransition transition) { // 先加载对话气泡,避免 Yarn 对话(如 测试 节点 me: 释放log)在相机切换完成前执行时找不到 Player 槽位 // 切换相机 yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Clinic); } public IEnumerator EnterImmediate(FixTransition transition) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Clinic, true); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Clinic); } public IEnumerator Exit(FixTransition transition) { // 无 yield break; } } public struct BodyModuleCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.BodyModule; public IEnumerator Enter(FixTransition transition) { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var cablePanel = FixPanelSystem.GetRepairPanel(); // 拔出插头 // 切换Body或Head if (Enum.TryParse(transition.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); } BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.BodyModule); // 开启交互 bodyModuleSystem.EnableSystem(); } public IEnumerator EnterImmediate(FixTransition transition) { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); // 切换Body或Head if (Enum.TryParse(transition.Args, out var moduleState)) { bodyModuleSystem.SwitchModuleGroup(moduleState); } FixPanelSystem.GetRepairPanel().ResetPlug(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule, true); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.BodyModule); // 开启交互 bodyModuleSystem.EnableSystem(); yield break; } public IEnumerator Exit(FixTransition transition) { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); // 拔出插头 FixPanelSystem.GetRepairPanel().ResetPlug(); // 关闭交互 bodyModuleSystem.DisableSystem(); yield break; } } public struct OpCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Op; public IEnumerator Enter(FixTransition transition) { if (!CameraKit.Instance.EqualToCameraState(CameraEnum.Op)) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Op); } } public IEnumerator EnterImmediate(FixTransition transition) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.Op, true); } public IEnumerator Exit(FixTransition transition) { // 无 yield break; } } public struct DreamCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Dream; public IEnumerator Enter(FixTransition transition) { if (!CameraKit.Instance.EqualToCameraState(CameraEnum.DreamCamera)) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.DreamCamera); } BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Open); } public IEnumerator EnterImmediate(FixTransition transition) { yield return CameraKit.Instance.SwitchCamera(CameraEnum.DreamCamera, true); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Open); } public IEnumerator Exit(FixTransition transition) { // 无 yield break; } } }