183 lines
6.0 KiB
C#
183 lines
6.0 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
|
|
bool hasModuleState = Enum.TryParse(transition.Args, out ModuleState moduleState);
|
|
bool isHeadEntry = hasModuleState && moduleState == ModuleState.Head;
|
|
if (hasModuleState)
|
|
{
|
|
bodyModuleSystem.SwitchModuleGroup(moduleState);
|
|
}
|
|
|
|
if (!FixPanelSystem.Instance.IsSystemOn && isHeadEntry)
|
|
{
|
|
// 切换相机
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModuleCenter);
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
yield return new WaitForSeconds(0.5f);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
|
|
if (FixPanelSystem.Instance.ShouldAutoStartOnHeadEntry)
|
|
{
|
|
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();
|
|
// 清屏
|
|
FixPanelSystem.Instance.ScreenPanel.ClearScreen();
|
|
// 关闭交互
|
|
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, true);
|
|
}
|
|
|
|
yield return null;
|
|
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Open);
|
|
}
|
|
|
|
public IEnumerator EnterImmediate(FixTransition transition)
|
|
{
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.DreamCamera, true);
|
|
yield return null;
|
|
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Open);
|
|
}
|
|
|
|
public IEnumerator Exit(FixTransition transition)
|
|
{
|
|
// 无
|
|
yield break;
|
|
}
|
|
}
|
|
}
|