feat(Dialogue): 实现基本的对话系统
This commit is contained in:
51
Assets/Script/Gameplay/UI/PlayerDialogueViewer.cs
Normal file
51
Assets/Script/Gameplay/UI/PlayerDialogueViewer.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Core;
|
||||
using Script.Gameplay.Input;
|
||||
using Script.Gameplay.Player;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UI
|
||||
{
|
||||
// 负责显示玩家对话内容的UI组件
|
||||
public class PlayerDialogueViewer : UIBase
|
||||
{
|
||||
[SerializeField] private TMP_Text dialogueText;
|
||||
[SerializeField] private GameObject panel;
|
||||
private bool isShowingPanel = false;
|
||||
private PlayerDialogueController playerDialogueController;
|
||||
private InputManager inputManager;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
inputManager = InputManager.Instance;
|
||||
ControllerLocator.Instance.TryGetWait<PlayerDialogueController>(OnGetPlayerDialogueController);
|
||||
}
|
||||
|
||||
private void OnGetPlayerDialogueController(PlayerDialogueController controller)
|
||||
{
|
||||
playerDialogueController = controller;
|
||||
playerDialogueController.RegisterDialogueViewer(this);
|
||||
}
|
||||
|
||||
public void ReceiveDialogue(string content)
|
||||
{
|
||||
if(!isShowingPanel) OpenPanel();
|
||||
dialogueText.text = content;
|
||||
}
|
||||
|
||||
private void OpenPanel()
|
||||
{
|
||||
isShowingPanel = true;
|
||||
Show();
|
||||
}
|
||||
|
||||
public void ClosePanel()
|
||||
{
|
||||
isShowingPanel = false;
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Script/Gameplay/UI/PlayerDialogueViewer.cs.meta
Normal file
3
Assets/Script/Gameplay/UI/PlayerDialogueViewer.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c0395910b982454e9d80e05e192178e8
|
||||
timeCreated: 1761184075
|
||||
@@ -14,50 +14,45 @@ namespace UI
|
||||
[SerializeField] private GameObject reminderDeleteLinePrefab;
|
||||
private PlayerInteractorController playerInteractorController;
|
||||
private PlayerConnectController playerConnectController;
|
||||
private PlayerDialogueController playerDialogueController;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
ControllerLocator.Instance.TryGetWait<PlayerInteractorController>(OnGetInteractorController);
|
||||
ControllerLocator.Instance.TryGetWait<PlayerConnectController>(OnGetConnectController);
|
||||
ControllerLocator.Instance.TryGetWait<PlayerDialogueController>(OnGetDialogueController);
|
||||
}
|
||||
|
||||
private void OnGetInteractorController(PlayerInteractorController controller)
|
||||
{
|
||||
playerInteractorController = controller;
|
||||
playerInteractorController.OnGazeEnter += HandleInteractGazeEnter;
|
||||
playerInteractorController.OnGazeExit += HandleInteractGazeExit;
|
||||
}
|
||||
|
||||
private void HandleInteractGazeEnter(GameObject obj)
|
||||
{
|
||||
reminderInteractPrefab.SetActive(true);
|
||||
}
|
||||
|
||||
private void HandleInteractGazeExit(GameObject obj)
|
||||
{
|
||||
reminderInteractPrefab.SetActive(false);
|
||||
playerInteractorController.OnGazeEnter += (obj) => reminderInteractPrefab.SetActive(true);
|
||||
playerInteractorController.OnGazeExit += (obj) => reminderInteractPrefab.SetActive(false);
|
||||
}
|
||||
|
||||
private void OnGetConnectController(PlayerConnectController controller)
|
||||
{
|
||||
playerConnectController = controller;
|
||||
playerConnectController.OnGazeEnter += HandleConnectGazeEnter;
|
||||
playerConnectController.OnGazeExit += HandleConnectGazeExit;
|
||||
playerConnectController.OnGazeEnter += (obj) =>
|
||||
{
|
||||
reminderConnectPrefab.SetActive(true);
|
||||
reminderSetPointPrefab.SetActive(true);
|
||||
reminderDeleteLinePrefab.SetActive(true);
|
||||
};
|
||||
playerConnectController.OnGazeExit += (obj) =>
|
||||
{
|
||||
reminderConnectPrefab.SetActive(false);
|
||||
reminderSetPointPrefab.SetActive(false);
|
||||
reminderDeleteLinePrefab.SetActive(false);
|
||||
};
|
||||
}
|
||||
|
||||
private void HandleConnectGazeEnter(GameObject obj)
|
||||
|
||||
private void OnGetDialogueController(PlayerDialogueController controller)
|
||||
{
|
||||
reminderConnectPrefab.SetActive(true);
|
||||
reminderSetPointPrefab.SetActive(true);
|
||||
reminderDeleteLinePrefab.SetActive(true);
|
||||
}
|
||||
|
||||
private void HandleConnectGazeExit(GameObject obj)
|
||||
{
|
||||
reminderConnectPrefab.SetActive(false);
|
||||
reminderSetPointPrefab.SetActive(false);
|
||||
reminderDeleteLinePrefab.SetActive(false);
|
||||
playerDialogueController = controller;
|
||||
playerDialogueController.OnGazeEnterDialogue += (obj) => reminderInteractPrefab.SetActive(true);
|
||||
playerDialogueController.OnGazeExitDialogue += (obj) => reminderInteractPrefab.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user