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

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;
}
}
}