217 lines
8.3 KiB
C#
217 lines
8.3 KiB
C#
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<ExpressionManager>();
|
|
|
|
// 先切 BodyModule(如果需要)
|
|
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
|
|
{
|
|
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
|
|
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<PlayToolPanel>().FadeInAsync(0.5f);
|
|
expressionManager.OpenView();
|
|
// 切换到深度表达相机
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.ExpressionDeep);
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
|
|
yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入");
|
|
}
|
|
|
|
public IEnumerator Exit()
|
|
{
|
|
var expressionManager = FixSystemCenter.SystemDic.Get<ExpressionManager>();
|
|
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
|
|
|
|
// 重置身体模块
|
|
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
|
|
|
|
// 关闭表达系统视图
|
|
expressionManager.CloseView();
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression);
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().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<EmoManager>();
|
|
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
|
|
{
|
|
var bodyModule = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
|
|
bodyModule.SwitchModuleGroup(ModuleState.Head);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
|
|
}
|
|
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Emo);
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
|
|
//emoManager.OpenView();
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EmoDeep);
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
|
|
}
|
|
|
|
public IEnumerator Exit()
|
|
{
|
|
FixPanelSystem.GetRepairPanel<CablePanel>().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<BodyModuleSystem>();
|
|
var analysisModeManager = FixSystemCenter.SystemDic.Get<MiniGame.Language.AnalysisModeManager>();
|
|
|
|
// 先切 BodyModule(如果需要)
|
|
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
|
|
{
|
|
bodyModuleSystem.SwitchModuleGroup(ModuleState.Head);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
|
|
}
|
|
|
|
// 插头回到初始插孔
|
|
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
|
|
|
|
// 切换到分析模式相机
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.AnalysisMode);
|
|
// 进入分析模式
|
|
if (analysisModeManager != null)
|
|
{
|
|
analysisModeManager.OnEnter();
|
|
}
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(0.5f);
|
|
}
|
|
|
|
public IEnumerator Exit()
|
|
{
|
|
float duration = 0.5f;
|
|
var analysisModeManager = FixSystemCenter.SystemDic.Get<MiniGame.Language.AnalysisModeManager>();
|
|
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
|
|
|
|
// 退出分析模式
|
|
if (analysisModeManager != null)
|
|
{
|
|
analysisModeManager.OnExit();
|
|
}
|
|
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().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<BodyModuleSystem>();
|
|
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<AibisDream.MiniGame.Language.SalesManager>();
|
|
if (salesManager != null)
|
|
{
|
|
// FadeIn
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(0.5f);
|
|
|
|
// 打开销售系统视图,传入systemView参数
|
|
salesManager.OpenView();
|
|
|
|
// FadeOut
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().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<AibisDream.MiniGame.Language.SalesManager>();
|
|
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeInAsync(duration);
|
|
|
|
// 关闭销售系统视图
|
|
if (salesManager != null)
|
|
{
|
|
salesManager.CloseView();
|
|
}
|
|
// 关闭前先播放钳子放下盖子,完成后再结
|
|
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
|
|
yield return TimelineCenter.Instance.PlayTimelineAsync("钳子/放下盖子");
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|