using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System.Collections; using DG.Tweening; using TMPro; using AibisDream; using Yarn.Unity; using System; public class ClueBoardManager : MonoBehaviour { public Canvas clueBoardUI; // ClueBoard UI的GameObject public GameObject iamgePointer; // ClueBoard UI的GameObject [SerializeField] private Button toggleButton; // 开启/关闭ClueBoard的按钮 //[SerializeField] private Button submitButton; // 提交按钮 // [SerializeField] private TMP_Text conclue; // 提交按钮 //[SerializeField] private ClueSlotBase initialClueSlotPrefab; // 初始的ClueSlot预制体 // [SerializeField] private Transform clueSlotContainer; // ClueSlot的容器 private RectTransform clueBoardRectTransform; // ClueBoard的RectTransform private List clueSlots = new List(); // 当前存在的所有ClueSlot private int currentStep = 0; // 当前步骤编号 private int maxStep = 3; // 当前步骤编号 private bool isBoardOpen = false; private Vector2 hiddenPosition; // ClueBoard隐藏时的位置 private Vector2 visiblePosition; // ClueBoard显示时的位置 public event Action OnClueBoardOpen; public event Action OnClueBoardClose; [YarnCommand("wait_for_ClueBoard_close")] public IEnumerator WaitForClose() { // 这里等待关闭按钮点击事件 while (isBoardOpen) { yield return null; // 每帧检查一次 } } private void Start() { clueBoardRectTransform = clueBoardUI.transform.GetComponent(); // 定义ClueBoard UI的位置 // hiddenPosition = new Vector2(-Screen.width, clueBoardRectTransform.anchoredPosition.y); // 屏幕右侧 // visiblePosition = new Vector2(0, clueBoardRectTransform.anchoredPosition.y); // 屏幕内 // // 设置初始位置和状态 // clueBoardRectTransform.anchoredPosition = hiddenPosition; clueBoardUI.enabled=false; iamgePointer.GetComponent().enabled=false; toggleButton.onClick.AddListener(ToggleClueBoard); // 绑定按钮事件 //submitButton.onClick.AddListener(CheckCurrentSlot); // 绑定提交事件 //conclue.text="待分析症状"; // 初始化第一个ClueSlot //AddNewClueSlot(); } // 开启或关闭 ClueBoard private void ToggleClueBoard() { Debug.Log("触发打开关闭诊疗面板"); if (isBoardOpen) { CloseClueBoard(); } else { OpenClueBoard(); } } [YarnCommand("OpenClueBoard")] public void OpenClueBoard() { clueBoardUI.enabled=true; iamgePointer.GetComponent().enabled=true; isBoardOpen = true; OnClueBoardOpen?.Invoke(); MouseCursorManager.Instance.ClueBoardIn(); // 用DOTween从右侧移动到可见区域 // clueBoardRectTransform.DOAnchorPos(visiblePosition, 0.5f); } [YarnCommand("CloseClueBoard")] public void CloseClueBoard() { isBoardOpen = false; // 用DOTween移动回右侧屏幕外 // clueBoardRectTransform.DOAnchorPos(hiddenPosition, 0.5f).OnComplete(() => // { // clueBoardUI.SetActive(false); // 移动完成后隐藏UI // }); clueBoardUI.enabled=false; iamgePointer.GetComponent().enabled=false; OnClueBoardClose?.Invoke(); MouseCursorManager.Instance.ClueBoardOut(); } [YarnCommand("SkipClueBoard")] public void SkipClueBoard() { DialogController.Instance.StartDialogNode("SkipClueBoard"); } // 添加新的 ClueSlot // [YarnCommand("AddNewClueSlot")] // public void AddNewClueSlot() // { // ClueSlotBase newSlot = Instantiate(initialClueSlotPrefab, clueSlotContainer); // newSlot.ReleaseSlot(); // clueSlots.Add(newSlot); // } // [YarnCommand("SetSlotCorrect")] // public void SetSlotCorrect() // { // clueSlots[currentStep].SetSlotCorrect(); // currentStep++; // } // private void CheckCurrentSlot() // { // if (currentStep >= clueSlots.Count) return; // ClueSlotBase currentSlot = clueSlots[currentStep]; // Clue currentClue = currentSlot.GetComponentInChildren()?.GetClueData(); // if (currentClue == null) // { // TriggerDialogue("", "", "", currentStep); // return; // } // // Trigger Yarn to handle the current clue, name, and step // TriggerDialogue(currentClue.Category, currentClue.MatchCode, currentClue.ClueName, currentStep); // } // private void TriggerDialogue(string clueCategory, string matchCode, string clueName, int step) // { // if (DialogController.Instance.CheckIfNodeExistInCurrentYarnProject("ClueBoard")) // { // // Set Yarn variables // DialogController.Instance.SetVariable("$clueBoardStep", step); // DialogController.Instance.SetVariable("$clueCategory", clueCategory); // DialogController.Instance.SetVariable("$clueMatchCode", matchCode); // DialogController.Instance.SetVariable("$clueName", clueName); // // Set the previous MatchCode for comparison in Yarn // if (step > 0) // { // Clue previousClue = clueSlots[step - 1].GetComponentInChildren()?.GetClueData(); // if (previousClue != null) // { // DialogController.Instance.SetVariable("$previousMatchCode", previousClue.MatchCode); // } // } // // Start the Yarn dialog node // DialogController.Instance.StartDialogNode("ClueBoard"); // } // } // 根据步骤判定当前 Clue 是否符合条件 // private bool IsValidClueForStep(int step, Clue clue) // { // switch (step) // { // case 0: // return clue.Category == "UFView"; // 第一关要求Clue的Category为"UF" // case 1: // Clue previousClue = clueSlots[step - 1].GetComponentInChildren()?.GetClueData(); // return clue.Category == "MemoryView" && clue.MatchCode == previousClue?.MatchCode; // 第二关要求Category为"Memory"且匹配MatchCode // // 可以根据需要继续添加更多步骤和判定规则 // case 2: // Clue previousClue2 = clueSlots[step - 1].GetComponentInChildren()?.GetClueData(); // return clue.Category == "EyeView" && clue.MatchCode == previousClue2?.MatchCode; // 第二关要求Category为"EyeView"且匹配MatchCode // // 可以根据需要继续添加更多步骤和判定规则 // default: // return false; // } // } // // 检查是否包含下一步 // private bool HasNextStep() // { // return currentStep < 3; // } }