using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.UI; using System.IO; using AibisDream.FixSystem; using Cinemachine; using AibisDream.Framework; using Yarn.Unity; namespace AibisDream { public class ExpressionManager : MonoBehaviour { public GameObject expressView; public Slider[] sliders; // A, P, R, E, T public TMP_Text totalPointsText; public int totalPoints = 10; public TMP_Text driverSlotText; public TMP_Text logOutput; public Button matchButton; public Button applyAndTestButton; public GameObject matchResultsPanel; public GameObject driverButtonPrefab; public string currentUser = "UserA"; private int[] valuesCurrent = new int[5]; private DriverProfile currentDriver = null; private DriverDatabase db = new DriverDatabase(); private List currentResultButtons = new List(); // 插线系统相关 public PowerSource powerSource; // 电源 public EmotionModule[] emotionModules; // 情绪模块数组 private CableSystem cableSystem; void Start() { CloseView(); FixSystemCenter.SystemDic.Register(this); var virtualCam = transform.Find("Expression Camera").GetComponent(); var virtualCam2 = transform.Find("Express Deep Camera").GetComponent(); CameraKit.Instance.RegisterCamera(CameraEnum.Expression, virtualCam); CameraKit.Instance.RegisterCamera(CameraEnum.ExpressionDeep, virtualCam2); db.LoadFromCSV(Path.Combine(Application.streamingAssetsPath, "drivers.csv")); // 初始化线缆系统 cableSystem = GetComponent(); if (cableSystem == null) { cableSystem = gameObject.AddComponent(); } matchButton.onClick.AddListener(MatchDriver); applyAndTestButton.onClick.AddListener(ApplyAndTestDriver); UpdateUI(); } // 当插头插入插槽时调用 public void OnPlugInserted(Plug plug, EmotionModule module, int socketIndex) { // 更新对应模块的值 int moduleIndex = System.Array.IndexOf(emotionModules, module); if (moduleIndex >= 0 && moduleIndex < valuesCurrent.Length) { valuesCurrent[moduleIndex]++; totalPoints--; CheckDriverStillValid(); UpdateUI(); } } // 当插头拔出时调用 public void OnPlugRemoved(Plug plug, EmotionModule module, int socketIndex) { // 更新对应模块的值 int moduleIndex = System.Array.IndexOf(emotionModules, module); if (moduleIndex >= 0 && moduleIndex < valuesCurrent.Length) { valuesCurrent[moduleIndex]--; totalPoints++; CheckDriverStillValid(); UpdateUI(); } } public void OpenView() { expressView.SetActive(true); } public void CloseView() { expressView.SetActive(false); } void AdjustValue(int index, int delta) { if (delta > 0 && totalPoints <= 0) return; if (delta < 0 && valuesCurrent[index] <= 0) return; if (valuesCurrent[index] + delta > 5) return; valuesCurrent[index] += delta; totalPoints -= delta; CheckDriverStillValid(); UpdateUI(); } void UpdateUI() { for (int i = 0; i < sliders.Length; i++) { sliders[i].value = valuesCurrent[i]; Transform valueTextTransform = sliders[i].transform.Find("Value"); if (valueTextTransform != null && valueTextTransform.TryGetComponent(out TMP_Text valueText)) valueText.text = valuesCurrent[i].ToString(); } totalPointsText.text = $"剩余点数: {totalPoints}"; } void MatchDriver() { currentResultButtons.ForEach(btn => Destroy(btn)); currentResultButtons.Clear(); var matches = db.MatchDrivers( valuesCurrent[0], valuesCurrent[1], valuesCurrent[2], valuesCurrent[3], valuesCurrent[4]); if (matches.Count > 0) { matchResultsPanel.SetActive(true); foreach (var driver in matches) { var btnObj = Instantiate(driverButtonPrefab, matchResultsPanel.transform); var text = btnObj.GetComponentInChildren(); if (text) text.text = driver.Name; var btn = btnObj.GetComponent