using System.Collections; using AibisDream.Framework; using DG.Tweening; using UnityEngine; namespace AibisDream.FixSystem { public enum FixState { Clinic, CoolingMachine, BodyModule, Memory, Eye, UF, VisualSense, Engine, Gear } public interface ITransitionCommand { IEnumerator Execute(); void SetArgs(string arg); } public struct BodyModuleToClinicCommand : ITransitionCommand { private const float FadeDuration = 0.5f; public IEnumerator Execute() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var clinicSystem = FixSystemCenter.SystemDic.Get(); // 黑屏 yield return MainUIController.Instance.FadeInSync(FadeDuration); // 把线插回去 bodyModuleSystem.ResetPlug(); // 诊所显示 clinicSystem.gameObject.SetActive(true); // 黑屏淡出 yield return MainUIController.Instance.FadeOutSync(FadeDuration); } public void SetArgs(string arg) { // 暂无参数 } } public struct BodyModuleToEngineCommand : ITransitionCommand { // 引擎相机设置 private static readonly Vector3 CameraPos = new(-2.5f, 2.13f, -10); private const float OrthographicSize = 2.5f; private const float Duration = 2f; public IEnumerator Execute() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var engineSystem = FixSystemCenter.SystemDic.Get(); // 插头回到初始插孔 bodyModuleSystem.ResetPlug(); // 相机聚焦到目标位 var cameraSq = CameraKit.Instance.TransCamera(CameraPos, OrthographicSize, Duration); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } // 打开引擎盖子 var coverSq = engineSystem.OpenCover(); while (coverSq.active && !coverSq.IsComplete()) { yield return null; } } public void SetArgs(string arg) { // 添加参数 } } public partial struct EngineToBodyModuleCommand : ITransitionCommand { private const float Duration = 2f; public IEnumerator Execute() { var engineSystem = FixSystemCenter.SystemDic.Get(); // 关闭引擎盖 var coverSq = engineSystem.CloseCover(); while (coverSq.active && !coverSq.IsComplete()) { yield return null; } // 相机还原 var cameraSq = CameraKit.Instance.ReturnInitCamera(Duration); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } } public void SetArgs(string arg) { // 添加参数 } } public struct EngineToClinicCommand : ITransitionCommand { private const float FadeDuration = 0.5f; public IEnumerator Execute() { var clinicSystem = FixSystemCenter.SystemDic.Get(); var engineSystem = FixSystemCenter.SystemDic.Get(); // 盖上盖子 yield return engineSystem.CloseCoverAsync(); // 黑屏 yield return MainUIController.Instance.FadeInSync(FadeDuration); // 相机归位 CameraKit.Instance.ResetCamara(); // 打开诊所 clinicSystem.gameObject.SetActive(true); // 黑屏淡出 yield return MainUIController.Instance.FadeOutSync(FadeDuration); } public void SetArgs(string arg) { // 无需参数 } } public struct BodyModuleToEyeCommand : ITransitionCommand { // 引擎相机设置 private static readonly Vector3 CameraPos = new(0f, 0.5f, -10); private const float OrthographicSize = 2.5f; private const float Duration = 1f; public IEnumerator Execute() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var eyeSystem = FixSystemCenter.SystemDic.Get(); // 插头回到初始插孔 bodyModuleSystem.ResetPlug(); // 相机聚焦到目标位 var cameraSq = CameraKit.Instance.TransCamera(CameraPos, OrthographicSize, Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeInSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } eyeSystem.OpenEyeView(); eyeSystem.OnEnter(); //yield return MainUIController.Instance.FadeOutSync(Duration/2); } public void SetArgs(string arg) { // 添加参数 } } public partial struct EyeToBodyModuleCommand : ITransitionCommand { private const float Duration = 1f; public IEnumerator Execute() { var eyeSystem = FixSystemCenter.SystemDic.Get(); eyeSystem.CloseEyeView(); //yield return new WaitForSeconds(Duration/2); //yield return MainUIController.Instance.FadeInSync(0.1f); // 相机还原 var cameraSq = CameraKit.Instance.ReturnInitCamera(Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeOutSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } eyeSystem.OnExit(); } public void SetArgs(string arg) { // 添加参数 } } public struct BodyModuleToMemoryCommand : ITransitionCommand { // 引擎相机设置 private static readonly Vector3 CameraPos = new(-2.5f, 2.5f, -10); private const float OrthographicSize = 2.5f; private const float Duration = 2f; public IEnumerator Execute() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var memorySystem = FixSystemCenter.SystemDic.Get(); // 插头回到初始插孔 bodyModuleSystem.ResetPlug(); // 相机聚焦到目标位 var cameraSq = CameraKit.Instance.TransCamera(CameraPos, OrthographicSize, Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeInSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } memorySystem.OpenMemoryView(); memorySystem.OnShow(); } public void SetArgs(string arg) { // 添加参数 } } public partial struct MemoryToBodyModuleCommand : ITransitionCommand { private const float Duration = 2f; public IEnumerator Execute() { var memorySystem = FixSystemCenter.SystemDic.Get(); memorySystem.CloseMemoryView(); // 相机还原 var cameraSq = CameraKit.Instance.ReturnInitCamera(Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeOutSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } memorySystem.OnExit(); } public void SetArgs(string arg) { // 添加参数 } } public struct BodyModuleToUFCommand : ITransitionCommand { // 引擎相机设置 private static readonly Vector3 CameraPos = new(-4.5f, 0.5f, -10); private const float OrthographicSize = 2.5f; private const float Duration = 2f; public IEnumerator Execute() { var bodyModuleSystem = FixSystemCenter.SystemDic.Get(); var UFSystem = FixSystemCenter.SystemDic.Get(); // 插头回到初始插孔 bodyModuleSystem.ResetPlug(); // 相机聚焦到目标位 var cameraSq = CameraKit.Instance.TransCamera(CameraPos, OrthographicSize, Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeInSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } UFSystem.OpenUFView(); } public void SetArgs(string arg) { // 添加参数 } } public partial struct UFToBodyModuleCommand : ITransitionCommand { private const float Duration = 2f; public IEnumerator Execute() { var UFSystem = FixSystemCenter.SystemDic.Get(); UFSystem.CloseUFView(); // 相机还原 var cameraSq = CameraKit.Instance.ReturnInitCamera(Duration); yield return new WaitForSeconds(Duration/2); yield return MainUIController.Instance.FadeOutSync(Duration/2); while (cameraSq.active && !cameraSq.IsComplete()) { yield return null; } } public void SetArgs(string arg) { // 添加参数 } } }