using UnityEngine;
using AibisDream.FixSystem;
using Cinemachine;
using AibisDream.Framework;
using AibisDream.MiniGame.Language;
using System.Collections.Generic;
namespace AibisDream
{
///
/// 表达系统管理器(粒子表达系统)
///
public class ExpressionManager : MonoBehaviour
{
[Header("系统组件")]
[SerializeField] private GameObject expressionView;
// 内部组件引用(自动查找)
private LanguageParticleManager particleManager;
[Header("默认配置")]
[SerializeField] private List defaultAnxietyPhrases = new List
{
"我好怕",
"怎么办",
"不行",
"好难",
"做不到"
};
[SerializeField] private string defaultTargetSentence = "这是一个测试示例";
void Start()
{
// 注册到系统字典
FixSystemCenter.SystemDic.Register(this);
// 查找并初始化表达视图
if (expressionView == null)
{
expressionView = transform.Find("Expression View")?.gameObject;
}
if (expressionView != null)
{
expressionView.SetActive(false);
}
// 查找粒子管理器
if (particleManager == null)
{
particleManager = GetComponentInChildren(true);
}
// 注册相机
var virtualCam = transform.Find("Expression Camera")?.GetComponent();
if (virtualCam != null)
{
CameraKit.Instance.RegisterCamera(CameraEnum.Expression, virtualCam);
}
var virtualCam2 = transform.Find("Expression Deep Camera")?.GetComponent();
if (virtualCam2 != null)
{
CameraKit.Instance.RegisterCamera(CameraEnum.ExpressionDeep, virtualCam2);
}
}
///
/// 打开表达视图(只显示美术背景,不启动粒子系统)
///
public void OpenView()
{
if (expressionView != null)
{
expressionView.SetActive(true);
}
}
///
/// 启动粒子系统(在打开视图后调用,通常通过 Yarn 对话控制)
///
/// 焦虑短句列表(非目标字符会随机组成这些短句)
/// 目标句子
/// 完成时触发的对话节点名称(可选)
public void StartSystem(List anxietyPhrases, string targetSentence, string completionNodeName = null)
{
if (particleManager != null)
{
// 使用传入的配置,如果没有则使用默认配置
var phrases = anxietyPhrases ?? defaultAnxietyPhrases;
var sentence = targetSentence ?? defaultTargetSentence;
particleManager.InitializeSystem(phrases, sentence, completionNodeName);
}
}
///
/// 启动粒子系统(字符串数组版本,方便 Yarn 调用)
///
public void StartSystem(string[] anxietyPhrases, string targetSentence, string completionNodeName = null)
{
List phrasesList = anxietyPhrases != null ? new List(anxietyPhrases) : null;
StartSystem(phrasesList, targetSentence, completionNodeName);
}
///
/// 关闭表达系统
///
public void CloseView()
{
if (expressionView != null)
{
expressionView.SetActive(false);
}
if (particleManager != null)
{
particleManager.StopSystem();
}
}
///
/// 重置系统(保持当前配置)
///
public void ResetSystem(bool playEntranceEffect = true)
{
if (particleManager != null)
{
particleManager.ResetGame(playEntranceEffect);
}
}
private void OnDestroy()
{
CameraKit.Instance?.UnRegisterCamera(CameraEnum.Expression);
CameraKit.Instance?.UnRegisterCamera(CameraEnum.ExpressionDeep);
}
}
}