using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using TMPro; using BaseGames.Core; using BaseGames.Core.Events; using BaseGames.Localization; using BaseGames.Quest; using QuestStateEnum = BaseGames.Core.Events.QuestState; namespace BaseGames.UI.Inventory { /// /// 全屏任务日志 Tab(Journal/Quests 分栏)。 /// 左侧列出进行中 / 已完成任务,右侧详情显示选中任务的名称、描述与目标进度。 /// /// 数据来源:ServiceLocator 获取 ,读取 GetQuestsInState 快照。 /// 与 HUD 的 不同:后者只显示当前追踪任务, /// 本面板提供完整列表浏览。本地化统一使用 Quest 表。 /// public class QuestLogPanel : MonoBehaviour, IFocusable { [Header("任务列表")] [SerializeField] private Transform _listContainer; [Tooltip("任务行模板(含 Button + TMP_Text),kept inactive。")] [SerializeField] private Button _rowTemplate; [Header("详情")] [SerializeField] private TMP_Text _detailTitle; [SerializeField] private TMP_Text _detailDesc; [SerializeField] private Transform _objectiveContainer; [Tooltip("目标行模板(TMP_Text),kept inactive。")] [SerializeField] private TMP_Text _objectiveRowTemplate; [Tooltip("无进行中任务时的提示节点。")] [SerializeField] private GameObject _emptyHint; [Header("Event Channels - 刷新触发(任一即重建)")] [SerializeField] private QuestStateChangedEventChannel _onQuestStateChanged; private IQuestManager _quests; private readonly List _activeIds = new(); private readonly List