Files
aibis-dream/Assets/Scripts/FixSystemNew/States/CoreFixCues.cs
T

175 lines
5.6 KiB
C#

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<BodyModuleSystem>();
var cablePanel = FixPanelSystem.GetRepairPanel<CablePanel>();
// 拔出插头
// 切换Body或Head
if (Enum.TryParse<ModuleState>(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<PlayToolPanel>().FadeOutAsync(0.5f);
yield return new WaitForSeconds(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
yield return FixPanelSystem.Instance.StartAllSystems();
}
else
{
FixPanelSystem.GetRepairPanel<CablePanel>().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<BodyModuleSystem>();
// 切换Body或Head
if (Enum.TryParse<ModuleState>(transition.Args, out var moduleState))
{
bodyModuleSystem.SwitchModuleGroup(moduleState);
}
FixPanelSystem.GetRepairPanel<CablePanel>().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<BodyModuleSystem>();
// 拔出插头
FixPanelSystem.GetRepairPanel<CablePanel>().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;
}
}
}