using System; using System.Collections; using AibisDream.Framework; using AibisDream.UI; using DG.Tweening; using UnityEngine; namespace AibisDream.FixSystem { public struct ExpressionCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Expression; public IEnumerator Enter(FixTransition transition) { // 获取表达系统 var expressionManager = FixSystemCenter.SystemDic.Get(); // 先切 BodyModule(如果需要) if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) { var bodyModule = FixSystemCenter.SystemDic.Get(); bodyModule.SwitchModuleGroup(ModuleState.Head); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); } // 开启表达系统视图,并播放火山表达深入 // 切换到表达相机 yield return TimelineCenter.Instance.PlayTimelineAsync("透镜/透镜in"); yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression); yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); expressionManager.OpenView(); // 切换到深度表达相机 yield return CameraKit.Instance.SwitchCamera(CameraEnum.ExpressionDeep); yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); if (expressionManager.HasScreenPresentation) { yield return expressionManager.PlayScreenDeepAndWait(); } else { yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入"); } BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Expression); } public IEnumerator Exit(FixTransition transition) { var expressionManager = FixSystemCenter.SystemDic.Get(); var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); // 离开表达深入:保持线缆收起,回到 BodyModule 后由 Yarn DropCable 再放线 FixPanelSystem.GetRepairPanel()?.PullUpCable(); // 关闭表达系统视图 expressionManager.CloseView(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression); yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); yield return TimelineCenter.Instance.PlayTimelineAsync("透镜/透镜out"); yield break; } } public struct EmoCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Emo; public IEnumerator Enter(FixTransition transition) { var emoManager = FixSystemCenter.SystemDic.Get(); if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) { var bodyModule = FixSystemCenter.SystemDic.Get(); bodyModule.SwitchModuleGroup(ModuleState.Head); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); } yield return CameraKit.Instance.SwitchCamera(CameraEnum.Emo); yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); //emoManager.OpenView(); yield return CameraKit.Instance.SwitchCamera(CameraEnum.EmoDeep); yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); } public IEnumerator Exit(FixTransition transition) { FixPanelSystem.GetRepairPanel()?.PullUpCable(); yield break; } } public struct AnalysisModeCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.AnalysisMode; public IEnumerator Enter(FixTransition transition) { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var analysisModeManager = FixSystemCenter.SystemDic.Get(); // 先切 BodyModule(如果需要) if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) { bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); } FixPanelSystem.GetRepairPanel()?.PullUpCable(); // 切换到分析模式相机 yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); yield return CameraKit.Instance.SwitchCamera(CameraEnum.AnalysisMode); // 进入分析模式 if (analysisModeManager != null) { analysisModeManager.OnEnter(); } yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); } public IEnumerator Exit(FixTransition transition) { float duration = 0.5f; var analysisModeManager = FixSystemCenter.SystemDic.Get(); yield return UIManager.Instance.GetPanel().FadeInAsync(duration); // 退出分析模式 if (analysisModeManager != null) { analysisModeManager.OnExit(); } yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); } } public struct SalesCue : IFixSceneCue { public FixSceneMode Mode => FixSceneMode.Sales; public IEnumerator Enter(FixTransition transition) { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) { bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); } // 进入前先播放钳子摘盖子,完成后深入 yield return TimelineCenter.Instance.PlayTimelineAsync("钳子/摘走盖子"); // 获取销售系统管理器 var salesManager = FixSystemCenter.SystemDic.Get(); if (salesManager != null) { // FadeIn yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); // 打开销售系统视图,传入systemView参数 salesManager.OpenView(); // FadeOut yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); // 销售模块使用自身的气泡槽位;缺失时再回退到 ScreenSystem,避免读到错误的槽位配置 if (BubbleSlotKit.Instance.TryGet(BubbleSlotEnum.Sales, out _)) { BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Sales); Debug.Log("[SalesCue] Loaded bubble slots from BubbleSlotKit (Sales)."); } else { Debug.LogWarning("[SalesCue] Sales 气泡槽组未注册,回退到 BodyModule。"); BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.BodyModule); } } } public IEnumerator Exit(FixTransition transition) { float duration = 0.5f; var salesManager = FixSystemCenter.SystemDic.Get(); yield return UIManager.Instance.GetPanel().FadeInAsync(duration); // 关闭销售系统视图 if (salesManager != null) { salesManager.CloseView(); } // 关闭前先播放钳子放下盖子,完成后再结 yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); yield return TimelineCenter.Instance.PlayTimelineAsync("钳子/放下盖子"); yield return null; } } }