195 lines
8.2 KiB
C#
195 lines
8.2 KiB
C#
using System;
|
|
using System.Collections;
|
|
using AibisDream.Framework;
|
|
using AibisDream.UI;
|
|
using DG.Tweening;
|
|
using UnityEngine;
|
|
|
|
namespace AibisDream.FixSystem
|
|
{
|
|
public struct ExpressionCue : IFixSceneCue
|
|
{
|
|
public FixSceneMode Mode => FixSceneMode.Expression;
|
|
|
|
public IEnumerator Enter(FixTransition transition)
|
|
{
|
|
// 获取表达系统
|
|
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<ScreenTransitionPanel>().FadeInAsync(0.5f);
|
|
expressionManager.OpenView();
|
|
// 切换到深度表达相机
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.ExpressionDeep);
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
yield return TimelineCenter.Instance.PlayTimelineAsync("火山表达模块/火山表达深入");
|
|
|
|
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Expression);
|
|
}
|
|
|
|
public IEnumerator Exit(FixTransition transition)
|
|
{
|
|
var expressionManager = FixSystemCenter.SystemDic.Get<ExpressionManager>();
|
|
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
|
|
|
|
// 离开表达深入:保持线缆收起,回到 BodyModule 后由 Yarn DropCable 再放线
|
|
FixPanelSystem.GetRepairPanel<CablePanel>()?.PullUpCable();
|
|
|
|
// 关闭表达系统视图
|
|
expressionManager.CloseView();
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Expression);
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
|
|
yield return TimelineCenter.Instance.PlayTimelineAsync("透镜/透镜out");
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
public struct EmoCue : IFixSceneCue
|
|
{
|
|
public FixSceneMode Mode => FixSceneMode.Emo;
|
|
|
|
public IEnumerator Enter(FixTransition transition)
|
|
{
|
|
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<ScreenTransitionPanel>().FadeInAsync(0.5f);
|
|
//emoManager.OpenView();
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.EmoDeep);
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
}
|
|
|
|
public IEnumerator Exit(FixTransition transition)
|
|
{
|
|
FixPanelSystem.GetRepairPanel<CablePanel>()?.PullUpCable();
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
public struct AnalysisModeCue : IFixSceneCue
|
|
{
|
|
public FixSceneMode Mode => FixSceneMode.AnalysisMode;
|
|
|
|
public IEnumerator Enter(FixTransition transition)
|
|
{
|
|
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>()?.PullUpCable();
|
|
|
|
// 切换到分析模式相机
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(0.5f);
|
|
yield return CameraKit.Instance.SwitchCamera(CameraEnum.AnalysisMode);
|
|
// 进入分析模式
|
|
if (analysisModeManager != null)
|
|
{
|
|
analysisModeManager.OnEnter();
|
|
}
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
}
|
|
|
|
public IEnumerator Exit(FixTransition transition)
|
|
{
|
|
float duration = 0.5f;
|
|
var analysisModeManager = FixSystemCenter.SystemDic.Get<MiniGame.Language.AnalysisModeManager>();
|
|
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
|
|
|
|
// 退出分析模式
|
|
if (analysisModeManager != null)
|
|
{
|
|
analysisModeManager.OnExit();
|
|
}
|
|
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
|
|
}
|
|
}
|
|
|
|
public struct SalesCue : IFixSceneCue
|
|
{
|
|
public FixSceneMode Mode => FixSceneMode.Sales;
|
|
|
|
public IEnumerator Enter(FixTransition transition)
|
|
{
|
|
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<ScreenTransitionPanel>().FadeInAsync(0.5f);
|
|
|
|
// 打开销售系统视图,传入systemView参数
|
|
salesManager.OpenView();
|
|
|
|
// FadeOut
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(0.5f);
|
|
|
|
// 销售模块使用自身的气泡槽位;缺失时再回退到 ScreenSystem,避免读到错误的槽位配置
|
|
if (BubbleSlotKit.Instance.TryGet(BubbleSlotEnum.Sales, out _))
|
|
{
|
|
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.Sales);
|
|
Debug.Log("[SalesCue] Loaded bubble slots from BubbleSlotKit (Sales).");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("[SalesCue] Sales 气泡槽组未注册,回退到 BodyModule。");
|
|
BubbleSlotKit.Instance.LoadBubbles(BubbleSlotEnum.BodyModule);
|
|
}
|
|
}
|
|
}
|
|
|
|
public IEnumerator Exit(FixTransition transition)
|
|
{
|
|
float duration = 0.5f;
|
|
var salesManager = FixSystemCenter.SystemDic.Get<AibisDream.MiniGame.Language.SalesManager>();
|
|
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeInAsync(duration);
|
|
|
|
// 关闭销售系统视图
|
|
if (salesManager != null)
|
|
{
|
|
salesManager.CloseView();
|
|
}
|
|
// 关闭前先播放钳子放下盖子,完成后再结
|
|
yield return UIManager.Instance.GetPanel<ScreenTransitionPanel>().FadeOutAsync(duration);
|
|
yield return TimelineCenter.Instance.PlayTimelineAsync("钳子/放下盖子");
|
|
yield return null;
|
|
}
|
|
}
|
|
}
|