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

163 lines
4.6 KiB
C#

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<ClinicSystem>();
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<ClinicSystem>();
// 切换相机
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<BodyModuleSystem>();
var cablePanel = FixPanelSystem.GetRepairPanel<CablePanel>();
// 拔出插头
// 切换Body或Head
if (Enum.TryParse<ModuleState>(_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);
}
// 加载气泡
var data = FixPanelSystem.Instance.BubbleSlotGroup.CollectData();
DialogUIManager.Instance.LoadBubbles(data);
// 开启交互
bodyModuleSystem.EnableSystem();
}
public IEnumerator Exit()
{
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
// 拔出插头
FixPanelSystem.GetRepairPanel<CablePanel>().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<OpenSystem>();
DialogUIManager.Instance.LoadBubbles(openSystem.bubbleSlotGroup.CollectData());
}
}
public IEnumerator Exit()
{
// 无
yield break;
}
}
}