using Core; using UnityEngine; using Script.Gameplay.Player; using TMPro; using System.Collections.Generic; using Script.Gameplay.Interface; namespace UI { public class PlayerGazeReminder : UIBase { [SerializeField] private GameObject reminderInteractPrefab; [SerializeField] private GameObject reminderReadPrefab; [SerializeField] private GameObject reminderConnectPrefab; [SerializeField] private GameObject reminderSetLeftPointPrefab; [SerializeField] private GameObject reminderSetRightPointPrefab; [SerializeField] private GameObject reminderDeleteLinePrefab; [SerializeField] private GameObject reminderEditPrefab; [Header("Connect Status UI")] [SerializeField] private GameObject ConnectStatus; [SerializeField] private TMP_Text NeedCountText; [SerializeField] private TMP_Text CurrentCountText; private PlayerInteractorController playerInteractorController; private PlayerConnectController playerConnectController; private PlayerDialogueController playerDialogueController; private PlayerEditController playerEditController; protected override void Awake() { base.Awake(); ControllerLocator.Instance.TryGetWait(OnGetInteractorController); ControllerLocator.Instance.TryGetWait(OnGetConnectController); ControllerLocator.Instance.TryGetWait(OnGetDialogueController); ControllerLocator.Instance.TryGetWait(OnGetEditController); } private void OnGetEditController(PlayerEditController obj) { playerEditController = obj; playerEditController.OnGazeEnterEditableComponent += (obj) => reminderEditPrefab.SetActive(true); playerEditController.OnGazeExitEditableComponent += (obj) => reminderEditPrefab.SetActive(false); } private void OnGetInteractorController(PlayerInteractorController controller) { playerInteractorController = controller; playerInteractorController.OnGazeEnter += (obj) => reminderInteractPrefab.SetActive(true); playerInteractorController.OnGazeExit += (obj) => reminderInteractPrefab.SetActive(false); } private void OnGetConnectController(PlayerConnectController controller) { playerConnectController = controller; playerConnectController.OnGazeEnterConnectable += (obj) => { reminderConnectPrefab.SetActive(true); reminderSetLeftPointPrefab.SetActive(true); reminderSetRightPointPrefab.SetActive(true); reminderDeleteLinePrefab.SetActive(true); // 更新连接状态UI ISignalReceiver connectableComponent = obj.GetComponent(); if (connectableComponent != null) { ConnectStatus.SetActive(true); NeedCountText.text = connectableComponent.NeedSignalCount.ToString(); CurrentCountText.text = connectableComponent.CurrentNeedSignalCount.ToString(); } else { ConnectStatus.SetActive(false); } }; playerConnectController.OnGazeExitConnectable += (obj) => { reminderConnectPrefab.SetActive(false); reminderSetLeftPointPrefab.SetActive(false); reminderSetRightPointPrefab.SetActive(false); reminderDeleteLinePrefab.SetActive(false); ConnectStatus.SetActive(false); }; } private void OnGetDialogueController(PlayerDialogueController controller) { playerDialogueController = controller; playerDialogueController.OnGazeEnterDialogue += (obj) => reminderReadPrefab.SetActive(true); playerDialogueController.OnGazeExitDialogue += (obj) => reminderReadPrefab.SetActive(false); } } }