188 lines
6.8 KiB
C#
188 lines
6.8 KiB
C#
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 GameObject 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<ClueSlotBase> clueSlots = new List<ClueSlotBase>(); // 当前存在的所有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.GetComponent<RectTransform>();
|
|
|
|
// 定义ClueBoard UI的位置
|
|
// hiddenPosition = new Vector2(-Screen.width, clueBoardRectTransform.anchoredPosition.y); // 屏幕右侧
|
|
// visiblePosition = new Vector2(0, clueBoardRectTransform.anchoredPosition.y); // 屏幕内
|
|
|
|
// // 设置初始位置和状态
|
|
// clueBoardRectTransform.anchoredPosition = hiddenPosition;
|
|
clueBoardUI.SetActive(false);
|
|
iamgePointer.GetComponent<Image>().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.SetActive(true);
|
|
iamgePointer.GetComponent<Image>().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.SetActive(false);
|
|
iamgePointer.GetComponent<Image>().enabled=false;
|
|
OnClueBoardClose?.Invoke();
|
|
MouseCursorManager.Instance.ClueBoardOut();
|
|
|
|
}
|
|
|
|
// 添加新的 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<ClueItem>()?.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<ClueItem>()?.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<ClueItem>()?.GetClueData();
|
|
// return clue.Category == "MemoryView" && clue.MatchCode == previousClue?.MatchCode; // 第二关要求Category为"Memory"且匹配MatchCode
|
|
// // 可以根据需要继续添加更多步骤和判定规则
|
|
// case 2:
|
|
// Clue previousClue2 = clueSlots[step - 1].GetComponentInChildren<ClueItem>()?.GetClueData();
|
|
// return clue.Category == "EyeView" && clue.MatchCode == previousClue2?.MatchCode; // 第二关要求Category为"EyeView"且匹配MatchCode
|
|
// // 可以根据需要继续添加更多步骤和判定规则
|
|
// default:
|
|
// return false;
|
|
// }
|
|
// }
|
|
|
|
// // 检查是否包含下一步
|
|
// private bool HasNextStep()
|
|
// {
|
|
// return currentStep < 3;
|
|
// }
|
|
}
|