diff --git a/Assets/Scripts/FixSystemNew/FixStateMachine.cs b/Assets/Scripts/FixSystemNew/FixStateMachine.cs index 2f9ada0c5..de833a639 100644 --- a/Assets/Scripts/FixSystemNew/FixStateMachine.cs +++ b/Assets/Scripts/FixSystemNew/FixStateMachine.cs @@ -1,10 +1,5 @@ -using System; using System.Collections; using AibisDream.Framework; -using AibisDream.Kit; -using AibisDream.UI; -using DG.Tweening; -using UnityEngine; namespace AibisDream.FixSystem { @@ -88,722 +83,4 @@ namespace AibisDream.FixSystem return res; } } - - public enum FixState - { - Default = 0, - Clinic = 1, - BodyModule = 2, - Memory = 3, - Eye = 4, - UF = 5, - Expression = 6, - Emo = 9, - Op = 10, - EmoCut = 11, - MemoryCut = 12, - LogicCut = 13, - Dream = 14, - AnalysisMode = 15, - Sales = 16, - BlockPuzzle = 17 - } - - 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 UfState : IFixState - { - public FixState GetState => FixState.UF; - - public void SetArgs(string args) - { - } - - public IEnumerator Enter() - { - var ufSystem = FixSystemCenter.SystemDic.Get(); - var eyeSystem = FixSystemCenter.SystemDic.Get(); - // 先切BodyModule - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - - // 插头回到初始插孔 - FixPanelSystem.GetRepairPanel().ResetPlug(); - // 切换相机 - yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); - ufSystem.OpenUFView(); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep); - eyeSystem.OnEnter(); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); - var data = eyeSystem.bubbleSlotGroup.CollectData(); - DialogUIManager.Instance.LoadBubbles(data); - } - - public IEnumerator Exit() - { - float duration = 0.5f; - var ufSystem = FixSystemCenter.SystemDic.Get(); - var eyeSystem = FixSystemCenter.SystemDic.Get(); - yield return UIManager.Instance.GetPanel().FadeInAsync(duration); - eyeSystem.OnExit(); - ufSystem.CloseUFView(); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF); - yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); - } - } - - public struct EyeState : IFixState - { - public FixState GetState => FixState.Eye; - - public void SetArgs(string args) - { - } - - public IEnumerator Enter() - { - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); - var eyeSystem = FixSystemCenter.SystemDic.Get(); - // 先切BodyModule - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - - //打开盖子 - var eyeModule = bodyModuleSystem.FindBodyModuleByType(); - yield return eyeModule.OpenEye(); - - // 插头回到初始插孔 - FixPanelSystem.GetRepairPanel().ResetPlug(); - // 切换相机 - yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep); - eyeSystem.OnEnter(); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); - - var data = eyeSystem.bubbleSlotGroup.CollectData(); - DialogUIManager.Instance.LoadBubbles(data); - } - - public IEnumerator Exit() - { - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - float duration = 0.5f; - var eyeSystem = FixSystemCenter.SystemDic.Get(); - yield return UIManager.Instance.GetPanel().FadeInAsync(duration); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye); - eyeSystem.OnExit(); - yield return new WaitForSeconds(0.1f); - yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); - //关上 - var eyeModule = bodyModuleSystem.FindBodyModuleByType(); - yield return eyeModule.CloseEye(); - yield return new WaitForSeconds(0.5f); - } - } - - public struct MemoryState : IFixState - { - public FixState GetState => FixState.Memory; - - public void SetArgs(string args) - { - } - - public IEnumerator Enter() - { - float duration = 0.5f; - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - var memorySystem = FixSystemCenter.SystemDic.Get(); - // 先切BodyModule - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - - yield return memorySystem.DropMemoryProjector(); - // 插头回到初始插孔 - FixPanelSystem.GetRepairPanel().ResetPlug(); - // 相机聚焦到目标位 - yield return CameraKit.Instance.SwitchCamera(CameraEnum.Memory); - yield return UIManager.Instance.GetPanel().FadeInAsync(duration); - memorySystem.OnEnter(); - yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); - var data = memorySystem.BubbleSlotGroup.CollectData(); - DialogUIManager.Instance.LoadBubbles(data); - } - - public IEnumerator Exit() - { - float duration = 0.5f; - var memorySystem = FixSystemCenter.SystemDic.Get(); - yield return UIManager.Instance.GetPanel().FadeInAsync(duration); - memorySystem.OnExit(); - memorySystem.CloseMemoryView(); - yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - memorySystem.PullMemoryProjector(); - } - } - - public struct ExpressionState : IFixState - { - public FixState GetState => FixState.Expression; - - public void SetArgs(string args) - { - // 无 - } - - public IEnumerator Enter() - { - // 获取表达系统 - 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); - yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入"); - } - - public IEnumerator Exit() - { - var expressionManager = FixSystemCenter.SystemDic.Get(); - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); - - // 重置身体模块 - FixPanelSystem.GetRepairPanel().ResetPlug(); - - // 关闭表达系统视图 - 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 EmoState : IFixState - { - public FixState GetState => FixState.Emo; - - public void SetArgs(string args) - { - } - - public IEnumerator Enter() - { - 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() - { - FixPanelSystem.GetRepairPanel().ResetPlug(); - 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; - } - } - - public struct EmoCutState : IFixState - { - public FixState GetState => FixState.EmoCut; - - public void SetArgs(string args) - { - // 无 - } - - public IEnumerator Enter() - { - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - var cuttingManager = FixSystemCenter.SystemDic.Get(); - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - // Cut的气泡统一放在BodyModule下 - DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); - - FixPanelSystem.GetRepairPanel().ResetPlug(); - var bodyModule = bodyModuleSystem.FindBodyModuleByName("Emo"); - if (bodyModule != null) - { - bodyModule.GetCutSpriteRenderer().sortingOrder = 100; - bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; - bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); - bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = - new Color(1f, 1f, 1f, 1f); - } - - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmoDeep); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - yield return cuttingManager.StartCutting(bodyModule); - } - - public IEnumerator Exit() - { - // 无 - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - var cuttingManager = FixSystemCenter.SystemDic.Get(); - cuttingManager.ClearCutLine(); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - } - } - - public struct MemoryCutState : IFixState - { - public FixState GetState => FixState.MemoryCut; - - public void SetArgs(string args) - { - // 无 - } - - public IEnumerator Enter() - { - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - var cuttingManager = FixSystemCenter.SystemDic.Get(); - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - // Cut的气泡统一放在BodyModule下 - DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); - - FixPanelSystem.GetRepairPanel().ResetPlug(); - var bodyModule = bodyModuleSystem.FindBodyModuleByName("Memory"); - if (bodyModule != null) - { - bodyModule.GetCutSpriteRenderer().sortingOrder = 100; - bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; - bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); - bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = - new Color(1f, 1f, 1f, 1f); - } - - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemoryDeep); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - yield return cuttingManager.StartCutting(bodyModule); - } - - - public IEnumerator Exit() - { - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - var cuttingManager = FixSystemCenter.SystemDic.Get(); - cuttingManager.ClearCutLine(); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - } - } - - public struct LogicCutState : IFixState - { - public FixState GetState => FixState.LogicCut; - - public void SetArgs(string args) - { - // 无 - } - - public IEnumerator Enter() - { - var cuttingManager = FixSystemCenter.SystemDic.Get(); - var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); - if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) - { - bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - } - // Cut的气泡统一放在BodyModule下 - DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); - - var bodyModule = bodyModuleSystem.FindBodyModuleByName("Logic"); - if (bodyModule != null) - { - bodyModule.GetCutSpriteRenderer().sortingOrder = 100; - bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; - bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); - bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = - new Color(1f, 1f, 1f, 1f); - } - - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic); - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogicDeep); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - yield return cuttingManager.StartCutting(bodyModule); - } - - public IEnumerator Exit() - { - yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); - var cuttingManager = FixSystemCenter.SystemDic.Get(); - cuttingManager.ClearCutLine(); - yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic); - yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); - } - } - - public struct AnalysisModeState : IFixState - { - public FixState GetState => FixState.AnalysisMode; - - public void SetArgs(string args) - { - // 无 - } - - public IEnumerator Enter() - { - 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().ResetPlug(); - - // 切换到分析模式相机 - 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() - { - 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 SalesState : IFixState - { - private string _systemView; - - public FixState GetState => FixState.Sales; - - public void SetArgs(string args) - { - _systemView = args; - } - - public IEnumerator Enter() - { - 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 (salesManager.bubbleSlotGroup != null) - { - var data = salesManager.bubbleSlotGroup.CollectData(); - Debug.Log("[SalesState] Loaded bubble slots from SalesManager."); - DialogUIManager.Instance.LoadBubbles(data); - } - else - { - Debug.LogWarning("[SalesState] SalesManager.bubbleSlotGroup is null, fallback to ScreenSystem bubble slots."); - var data = FixPanelSystem.Instance.BubbleSlotGroup.CollectData(); - DialogUIManager.Instance.LoadBubbles(data); - } - } - } - - public IEnumerator Exit() - { - 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; - } - } - - public struct BlockPuzzleState : IFixState - { - private const string puzzleName = "Game2"; - private const float blockPuzzleScale = 1.6f; - private static BlockPuzzleSystem BlockPuzzleSystem => FixSystemCenter.SystemDic.Get(); - private static BodyModuleSystem BodyModuleSystem => FixSystemCenter.SystemDic.Get(); - - public FixState GetState => FixState.BlockPuzzle; - - public void SetArgs(string args) - { - } - - public IEnumerator Enter() - { - // 基本操作(其实应该早就处理好了) - yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); - var bubbleData = FixPanelSystem.Instance.BubbleSlotGroup.CollectData(); - DialogUIManager.Instance.LoadBubbles(bubbleData); - yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.EngineModuleEnter); - // 视角移动 - var engineModule = BodyModuleSystem.FindBodyModuleByName("Heart"); - Tween tween = RepairSystemManager.Instance.ScaleCurrentSystem(blockPuzzleScale, engineModule.transform.position); - if (tween != null) - { - yield return tween.WaitForCompletion(); - } - // 初始化拼图 - BlockPuzzleSystem.Initialize(puzzleName); - // 开启遮罩 - yield return FixPanelSystem.Instance.MaskFadeIn(); - RepairSystemManager.Instance.SwitchSystem(); - yield return new WaitForSeconds(0.5f); - yield return FixPanelSystem.Instance.MaskFadeOut(); - - // 播放进场动画 - yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.CablePanelExit); - yield return new WaitForSeconds(0.5f); - yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.BlockPuzzleEnter); - // 解锁 - BlockPuzzleSystem.SetLocked(false); - } - - public IEnumerator Exit() - { - yield break; - } - } -} \ No newline at end of file +} diff --git a/Assets/Scripts/FixSystemNew/States.meta b/Assets/Scripts/FixSystemNew/States.meta new file mode 100644 index 000000000..5fecc9dbe --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2c41d75ab4cb4d338c0288b83f61c94e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs b/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs new file mode 100644 index 000000000..b2c6a15da --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using AibisDream.Framework; +using AibisDream.UI; +using DG.Tweening; +using UnityEngine; + +namespace AibisDream.FixSystem +{ + public struct BlockPuzzleState : IFixState + { + private const string puzzleName = "Game2"; + private const float blockPuzzleScale = 1.6f; + private static BlockPuzzleSystem BlockPuzzleSystem => FixSystemCenter.SystemDic.Get(); + private static BodyModuleSystem BodyModuleSystem => FixSystemCenter.SystemDic.Get(); + + public FixState GetState => FixState.BlockPuzzle; + + public void SetArgs(string args) + { + } + + public IEnumerator Enter() + { + // 基本操作(其实应该早就处理好了) + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + var bubbleData = FixPanelSystem.Instance.BubbleSlotGroup.CollectData(); + DialogUIManager.Instance.LoadBubbles(bubbleData); + yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.EngineModuleEnter); + // 视角移动 + var engineModule = BodyModuleSystem.FindBodyModuleByName("Heart"); + Tween tween = RepairSystemManager.Instance.ScaleCurrentSystem(blockPuzzleScale, engineModule.transform.position); + if (tween != null) + { + yield return tween.WaitForCompletion(); + } + // 初始化拼图 + BlockPuzzleSystem.Initialize(puzzleName); + // 开启遮罩 + yield return FixPanelSystem.Instance.MaskFadeIn(); + RepairSystemManager.Instance.SwitchSystem(); + yield return new WaitForSeconds(0.5f); + yield return FixPanelSystem.Instance.MaskFadeOut(); + + // 播放进场动画 + yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.CablePanelExit); + yield return new WaitForSeconds(0.5f); + yield return TimelineCenter.Instance.PlayTimelineAsync(TimelineAssetRef.BlockPuzzleEnter); + // 解锁 + BlockPuzzleSystem.SetLocked(false); + } + + public IEnumerator Exit() + { + yield break; + } + } +} diff --git a/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs.meta b/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs.meta new file mode 100644 index 000000000..9954f7787 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/BlockPuzzleFixState.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 84691c3d316643b98c99ca16c4560013 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs b/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs new file mode 100644 index 000000000..d0bb46fe1 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs @@ -0,0 +1,162 @@ +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; + } + } +} diff --git a/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs.meta b/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs.meta new file mode 100644 index 000000000..f424c565e --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/CoreFixStates.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1e85329d3d1e47c18bec82ccfe25f6ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/CutFixStates.cs b/Assets/Scripts/FixSystemNew/States/CutFixStates.cs new file mode 100644 index 000000000..c5fb3d537 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/CutFixStates.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections; +using AibisDream.Framework; +using AibisDream.UI; +using DG.Tweening; +using UnityEngine; + +namespace AibisDream.FixSystem +{ + public struct EmoCutState : IFixState + { + public FixState GetState => FixState.EmoCut; + + public void SetArgs(string args) + { + // 无 + } + + public IEnumerator Enter() + { + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + var cuttingManager = FixSystemCenter.SystemDic.Get(); + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + // Cut的气泡统一放在BodyModule下 + DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); + + FixPanelSystem.GetRepairPanel().ResetPlug(); + var bodyModule = bodyModuleSystem.FindBodyModuleByName("Emo"); + if (bodyModule != null) + { + bodyModule.GetCutSpriteRenderer().sortingOrder = 100; + bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; + bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); + bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = + new Color(1f, 1f, 1f, 1f); + } + + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmoDeep); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + yield return cuttingManager.StartCutting(bodyModule); + } + + public IEnumerator Exit() + { + // 无 + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + var cuttingManager = FixSystemCenter.SystemDic.Get(); + cuttingManager.ClearCutLine(); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutEmo); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + } + } + + public struct MemoryCutState : IFixState + { + public FixState GetState => FixState.MemoryCut; + + public void SetArgs(string args) + { + // 无 + } + + public IEnumerator Enter() + { + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + var cuttingManager = FixSystemCenter.SystemDic.Get(); + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + // Cut的气泡统一放在BodyModule下 + DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); + + FixPanelSystem.GetRepairPanel().ResetPlug(); + var bodyModule = bodyModuleSystem.FindBodyModuleByName("Memory"); + if (bodyModule != null) + { + bodyModule.GetCutSpriteRenderer().sortingOrder = 100; + bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; + bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); + bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = + new Color(1f, 1f, 1f, 1f); + } + + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemoryDeep); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + yield return cuttingManager.StartCutting(bodyModule); + } + + + public IEnumerator Exit() + { + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + var cuttingManager = FixSystemCenter.SystemDic.Get(); + cuttingManager.ClearCutLine(); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutMemory); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + } + } + + public struct LogicCutState : IFixState + { + public FixState GetState => FixState.LogicCut; + + public void SetArgs(string args) + { + // 无 + } + + public IEnumerator Enter() + { + var cuttingManager = FixSystemCenter.SystemDic.Get(); + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + // Cut的气泡统一放在BodyModule下 + DialogUIManager.Instance.LoadBubbles(cuttingManager.bubbleSlotGroup.CollectData()); + + var bodyModule = bodyModuleSystem.FindBodyModuleByName("Logic"); + if (bodyModule != null) + { + bodyModule.GetCutSpriteRenderer().sortingOrder = 100; + bodyModule.GetCutTextSpriteRenderer().sortingOrder = 101; + bodyModule.GetCutSpriteRenderer().color = new Color(1f, 1f, 1f, 1f); + bodyModule.GetCutSpriteRenderer().GetComponentInChildren().color = + new Color(1f, 1f, 1f, 1f); + } + + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogicDeep); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + yield return cuttingManager.StartCutting(bodyModule); + } + + public IEnumerator Exit() + { + yield return UIManager.Instance.GetPanel().FadeInAsync(0.1f); + var cuttingManager = FixSystemCenter.SystemDic.Get(); + cuttingManager.ClearCutLine(); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.CutLogic); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.1f); + } + } +} diff --git a/Assets/Scripts/FixSystemNew/States/CutFixStates.cs.meta b/Assets/Scripts/FixSystemNew/States/CutFixStates.cs.meta new file mode 100644 index 000000000..94dca6566 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/CutFixStates.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f31682a5a8144cfa8ba7f2d8619feaf2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/FixState.cs b/Assets/Scripts/FixSystemNew/States/FixState.cs new file mode 100644 index 000000000..da83c1cc6 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/FixState.cs @@ -0,0 +1,22 @@ +namespace AibisDream.FixSystem +{ + public enum FixState + { + Default = 0, + Clinic = 1, + BodyModule = 2, + Memory = 3, + Eye = 4, + UF = 5, + Expression = 6, + Emo = 9, + Op = 10, + EmoCut = 11, + MemoryCut = 12, + LogicCut = 13, + Dream = 14, + AnalysisMode = 15, + Sales = 16, + BlockPuzzle = 17 + } +} \ No newline at end of file diff --git a/Assets/Scripts/FixSystemNew/States/FixState.cs.meta b/Assets/Scripts/FixSystemNew/States/FixState.cs.meta new file mode 100644 index 000000000..7c903fd0d --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/FixState.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9dc0800bbef347d5810d82e445a872cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs b/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs new file mode 100644 index 000000000..b654ec853 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs @@ -0,0 +1,216 @@ +using System; +using System.Collections; +using AibisDream.Framework; +using AibisDream.UI; +using DG.Tweening; +using UnityEngine; + +namespace AibisDream.FixSystem +{ + public struct ExpressionState : IFixState + { + public FixState GetState => FixState.Expression; + + public void SetArgs(string args) + { + // 无 + } + + public IEnumerator Enter() + { + // 获取表达系统 + 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); + yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入"); + } + + public IEnumerator Exit() + { + var expressionManager = FixSystemCenter.SystemDic.Get(); + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); + + // 重置身体模块 + FixPanelSystem.GetRepairPanel().ResetPlug(); + + // 关闭表达系统视图 + 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 EmoState : IFixState + { + public FixState GetState => FixState.Emo; + + public void SetArgs(string args) + { + } + + public IEnumerator Enter() + { + 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() + { + FixPanelSystem.GetRepairPanel().ResetPlug(); + yield break; + } + } + + public struct AnalysisModeState : IFixState + { + public FixState GetState => FixState.AnalysisMode; + + public void SetArgs(string args) + { + // 无 + } + + public IEnumerator Enter() + { + 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().ResetPlug(); + + // 切换到分析模式相机 + 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() + { + 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 SalesState : IFixState + { + private string _systemView; + + public FixState GetState => FixState.Sales; + + public void SetArgs(string args) + { + _systemView = args; + } + + public IEnumerator Enter() + { + 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 (salesManager.bubbleSlotGroup != null) + { + var data = salesManager.bubbleSlotGroup.CollectData(); + Debug.Log("[SalesState] Loaded bubble slots from SalesManager."); + DialogUIManager.Instance.LoadBubbles(data); + } + else + { + Debug.LogWarning("[SalesState] SalesManager.bubbleSlotGroup is null, fallback to ScreenSystem bubble slots."); + var data = FixPanelSystem.Instance.BubbleSlotGroup.CollectData(); + DialogUIManager.Instance.LoadBubbles(data); + } + } + } + + public IEnumerator Exit() + { + 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; + } + } +} diff --git a/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs.meta b/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs.meta new file mode 100644 index 000000000..c8b6c6653 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/HuoShanFixStates.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 98f122636e424c2199a237d2850a03b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: + diff --git a/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs b/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs new file mode 100644 index 000000000..20abf617c --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections; +using AibisDream.Framework; +using AibisDream.UI; +using DG.Tweening; +using UnityEngine; + +namespace AibisDream.FixSystem +{ + public struct UfState : IFixState + { + public FixState GetState => FixState.UF; + + public void SetArgs(string args) + { + } + + public IEnumerator Enter() + { + var ufSystem = FixSystemCenter.SystemDic.Get(); + var eyeSystem = FixSystemCenter.SystemDic.Get(); + // 先切BodyModule + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + + // 插头回到初始插孔 + FixPanelSystem.GetRepairPanel().ResetPlug(); + // 切换相机 + yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); + ufSystem.OpenUFView(); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep); + eyeSystem.OnEnter(); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); + var data = eyeSystem.bubbleSlotGroup.CollectData(); + DialogUIManager.Instance.LoadBubbles(data); + } + + public IEnumerator Exit() + { + float duration = 0.5f; + var ufSystem = FixSystemCenter.SystemDic.Get(); + var eyeSystem = FixSystemCenter.SystemDic.Get(); + yield return UIManager.Instance.GetPanel().FadeInAsync(duration); + eyeSystem.OnExit(); + ufSystem.CloseUFView(); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.UF); + yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); + } + } + + public struct EyeState : IFixState + { + public FixState GetState => FixState.Eye; + + public void SetArgs(string args) + { + } + + public IEnumerator Enter() + { + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + bodyModuleSystem.SwitchModuleGroup(ModuleState.Head); + var eyeSystem = FixSystemCenter.SystemDic.Get(); + // 先切BodyModule + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + + //打开盖子 + var eyeModule = bodyModuleSystem.FindBodyModuleByType(); + yield return eyeModule.OpenEye(); + + // 插头回到初始插孔 + FixPanelSystem.GetRepairPanel().ResetPlug(); + // 切换相机 + yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye); + yield return UIManager.Instance.GetPanel().FadeInAsync(0.5f); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.EyeDeep); + eyeSystem.OnEnter(); + yield return UIManager.Instance.GetPanel().FadeOutAsync(0.5f); + + var data = eyeSystem.bubbleSlotGroup.CollectData(); + DialogUIManager.Instance.LoadBubbles(data); + } + + public IEnumerator Exit() + { + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + float duration = 0.5f; + var eyeSystem = FixSystemCenter.SystemDic.Get(); + yield return UIManager.Instance.GetPanel().FadeInAsync(duration); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.Eye); + eyeSystem.OnExit(); + yield return new WaitForSeconds(0.1f); + yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); + //关上 + var eyeModule = bodyModuleSystem.FindBodyModuleByType(); + yield return eyeModule.CloseEye(); + yield return new WaitForSeconds(0.5f); + } + } + + public struct MemoryState : IFixState + { + public FixState GetState => FixState.Memory; + + public void SetArgs(string args) + { + } + + public IEnumerator Enter() + { + float duration = 0.5f; + var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); + var memorySystem = FixSystemCenter.SystemDic.Get(); + // 先切BodyModule + if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule)) + { + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + } + + yield return memorySystem.DropMemoryProjector(); + // 插头回到初始插孔 + FixPanelSystem.GetRepairPanel().ResetPlug(); + // 相机聚焦到目标位 + yield return CameraKit.Instance.SwitchCamera(CameraEnum.Memory); + yield return UIManager.Instance.GetPanel().FadeInAsync(duration); + memorySystem.OnEnter(); + yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); + var data = memorySystem.BubbleSlotGroup.CollectData(); + DialogUIManager.Instance.LoadBubbles(data); + } + + public IEnumerator Exit() + { + float duration = 0.5f; + var memorySystem = FixSystemCenter.SystemDic.Get(); + yield return UIManager.Instance.GetPanel().FadeInAsync(duration); + memorySystem.OnExit(); + memorySystem.CloseMemoryView(); + yield return UIManager.Instance.GetPanel().FadeOutAsync(duration); + yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule); + memorySystem.PullMemoryProjector(); + } + } +} diff --git a/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs.meta b/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs.meta new file mode 100644 index 000000000..c1779d3f1 --- /dev/null +++ b/Assets/Scripts/FixSystemNew/States/PeipeiFixStates.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 90a6a39492ca40edbf1d17ab821c5e01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +