From 57fa8ff8fa76fa30fe5f8454cb621ce6ca90f49e Mon Sep 17 00:00:00 2001 From: HungDK <> Date: Fri, 9 Jan 2026 15:15:25 +0700 Subject: [PATCH] Add auto move, navigate when click target link --- .../Scripts/Task/CECTaskInterface.cs | 126 ++++++++++++++---- 1 file changed, 99 insertions(+), 27 deletions(-) diff --git a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs index 0940a3fda1..49dd15cca7 100644 --- a/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs +++ b/Assets/PerfectWorld/Scripts/Task/CECTaskInterface.cs @@ -11,6 +11,7 @@ using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; using System; +using BrewMonster.Scripts; // For CECNavigateCtrl namespace BrewMonster.Scripts.Task { @@ -1625,19 +1626,25 @@ namespace BrewMonster.Scripts.Task { return m_pFinishedCountListBuf; } - void SetForceNavigateFinishFlag(bool bFinish) { m_bForceNavigateFinish = bFinish;} // - public void OnNewTask(int iTaskID) + public void SetForceNavigateFinishFlag(bool bFinish) { m_bForceNavigateFinish = bFinish;} // Set force navigate finish flag // 设置强制导航完成标志 + public void OnNewTask(int iTaskID) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnNewTask: TaskID={iTaskID}"); + ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); + if (pTempl != null + && pTempl.m_FixedData.m_enumMethod== (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) { - ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); - if (pTempl != null - && pTempl.m_FixedData.m_enumMethod== (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) - { - SetForceNavigateFinishFlag(false); - - // TODO: trigger navigation event - // m_pHost.OnNaviageEvent(iTaskID,CECNavigateCtrl::EM_PREPARE); - } + UnityEngine.Debug.Log($"[CECTaskInterface] OnNewTask: Task {iTaskID} is force navigate task, triggering EM_PREPARE"); + SetForceNavigateFinishFlag(false); + + // Trigger navigation event // 触发导航事件 + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_PREPARE); } + else + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnNewTask: Task {iTaskID} is not a force navigate task (pTempl={pTempl != null}, method={pTempl?.m_FixedData.m_enumMethod})"); + } + } public void OnTaskConfirmUpdate() { @@ -1653,34 +1660,99 @@ namespace BrewMonster.Scripts.Task OnTaskConfirmUpdate(); } - public void OnCompleteTask(int iTaskID) + public void OnCompleteTask(int iTaskID) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnCompleteTask: TaskID={iTaskID}"); + ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); + if (pTempl != null && + pTempl.m_FixedData.m_enumMethod == (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) { - ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); - if (pTempl != null && - pTempl.m_FixedData.m_enumMethod == (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) - { - //TODO: trigger navigation end event - // m_pHost.OnNaviageEvent(iTaskID,CECNavigateCtrl::EM_END); - SetForceNavigateFinishFlag(false); - } + UnityEngine.Debug.Log($"[CECTaskInterface] OnCompleteTask: Task {iTaskID} is force navigate task, triggering EM_END"); + // Trigger navigation end event // 触发导航结束事件 + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_END); + SetForceNavigateFinishFlag(false); } + else + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnCompleteTask: Task {iTaskID} is not a force navigate task"); + } + } public void TakeAwayCommonItem(uint ulTemplId, uint ulNum) {} public void TakeAwayTaskItem(uint ulTemplId, uint ulNum) {} public void TakeAwayGold(uint ulNum) {} public void TakeAwayFactionConsumeContrib(int ulNum){} - public void OnGiveupTask(int iTaskID) + public void OnGiveupTask(int iTaskID) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnGiveupTask: TaskID={iTaskID}"); + ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); + if (pTempl != null && + pTempl.m_FixedData.m_enumMethod == (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) { - ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); - if (pTempl != null && - pTempl.m_FixedData.m_enumMethod == (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) + UnityEngine.Debug.Log($"[CECTaskInterface] OnGiveupTask: Task {iTaskID} is force navigate task, triggering EM_END"); + // Trigger navigation end event // 触发导航结束事件 + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_END); + SetForceNavigateFinishFlag(false); + } + else + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnGiveupTask: Task {iTaskID} is not a force navigate task"); + } + } + + // Handle task text click in UI - trigger navigation if it's a force navigate task // 处理任务UI文本点击 - 如果是强制导航任务则触发导航 + // This is called when user clicks on task name/link in the task UI // 当用户在任务UI中点击任务名称/链接时调用 + public void OnTaskTextClick(int iTaskID) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: TaskID={iTaskID}"); + + // Check if task exists and is a force navigate task // 检查任务是否存在且为强制导航任务 + ATaskTempl pTempl = GetTaskTemplMan().GetTaskTemplByID((uint)iTaskID); + if (pTempl != null && + pTempl.m_FixedData.m_enumMethod == (uint)TaskCompletionMethod.enumTMSimpleClientTaskForceNavi) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: Task {iTaskID} is force navigate task, triggering navigation"); + + // Check if navigation is already prepared // 检查导航是否已准备 + CECHostNavigatePlayer pNavigatePlayer = m_pHost.GetNavigatePlayer(); + if (pNavigatePlayer != null && pNavigatePlayer.GetNavigateCtrl() != null) { - // TODO: trigger navigation end event - // m_pHost.OnNaviageEvent(iTaskID,CECNavigateCtrl::EM_END); - SetForceNavigateFinishFlag(false); + // If already prepared, trigger begin // 如果已准备,触发开始 + if (pNavigatePlayer.GetNavigateCtrl().IsInForceNavigateState()) + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: Navigation already prepared, triggering EM_BEGIN"); + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_BEGIN); + } + else + { + // Prepare first, then begin // 先准备,然后开始 + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: Preparing navigation first, then beginning"); + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_PREPARE); + // Note: EM_BEGIN will be triggered after preparation is complete + // 注意:EM_BEGIN 将在准备完成后触发 + // For now, trigger it immediately after a short delay + // 目前,在短暂延迟后立即触发 + // TODO: Implement proper async handling if needed + // TODO: 如果需要,实现适当的异步处理 + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_BEGIN); + } + } + else + { + // Prepare and begin navigation // 准备并开始导航 + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: Preparing and beginning navigation"); + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_PREPARE); + m_pHost.OnNaviageEvent(iTaskID, (int)CECNavigateCtrl.NavigateEvent.EM_BEGIN); } } + else + { + UnityEngine.Debug.Log($"[CECTaskInterface] OnTaskTextClick: Task {iTaskID} is not a force navigate task, will use normal auto-move"); + // TODO: Implement normal auto-move behavior here + // TODO: 在此处实现正常的自动移动行为 + } + } public void UpdateTaskUI(uint idTask, int reason) {