using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; using TMPro; namespace BrewMonster.PerfectWorld.Scripts.Task.UI { /// /// This is DlgTask.cpp /// public class TaskWindow : MonoBehaviour { // Keep original macro as constant for array sizing public const int CDLGTASK_AWARDITEM_MAX = 8; // ===== Nested structs (converted from C++), keep naming, public with explicit layout ===== // [中文] 任务目标位置 // [English] Task object position [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct TASK_OBJECT_POS { public int x; public int y; public int z; public int mapid; } // [中文] 任务完成时间 // [English] Task finished time [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct TASK_FINISHED_TIME { public int iTaskID; public uint dwTime; // DWORD -> uint } // [中文] ������������ // [English] Type grouping node [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct TypeNode { public uint type; // DWORD -> uint public GameObject item; // P_AUITREEVIEW_ITEM -> GameObject } // [中文] ��������ȼ����� // [English] Level priority node [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct LevelNode { public int level; public GameObject item; // P_AUITREEVIEW_ITEM -> GameObject } // ===== Converted member variables (keep original naming) ===== // protected: protected int m_idLastTask; protected int m_idSelTask; protected bool m_bTraceNew; protected bool m_bShowTrace; protected int m_iType; [SerializeField] protected TMP_Text m_pTxt_QuestNO; // PAUILABEL -> TMP_Text [SerializeField] protected GameObject m_pTv_Quest; // PAUITREEVIEW -> GameObject container [SerializeField] protected TMP_Text m_pTxt_Content; // PAUITEXTAREA -> TMP_Text [SerializeField] protected TMP_Text m_pTxt_QuestItem; // PAUITEXTAREA -> TMP_Text [SerializeField] protected Button m_pBtn_Abandon; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_MainQuest; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_NormalQuest; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_SearchQuest; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_HaveQuest; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_bShowTrace; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected Button m_pBtn_FinishTask; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected TMP_Text m_pTxt_BaseAward; // PAUILABEL -> TMP_Text // PAUIIMAGEPICTURE m_pImg_Item[CDLGTASK_AWARDITEM_MAX]; // Use fixed-size array semantics via initialization length // [中文] 奖励物品图片数组 // [English] Award item images array [MarshalAs(UnmanagedType.ByValArray, SizeConst = CDLGTASK_AWARDITEM_MAX)] [SerializeField] protected Image[] m_pImg_Item = new Image[CDLGTASK_AWARDITEM_MAX]; protected uint m_ImgCount; // unsigned int -> uint [SerializeField] protected Button m_pBtn_GotoNPC; // PAUISTILLIMAGEBUTTON -> Button [SerializeField] protected GameObject m_pQuickBuyTrigger; // CECQuickBuyPopActivityTrigger* -> GameObject // private: private static List m_vecTasksUnFinish = new List(); private static List m_vecTasksCanFinish = new List(); // [中文] 目标坐标集合 // [English] Target coordinates collection private static List m_TargetCoord = new List(); private static string m_strTraceName = string.Empty; // ACString -> string // [中文] 任务相关矿点映射 // [English] Mine map related to tasks private static Dictionary m_TaskMines = new Dictionary(); // MINE_ESSENCE* -> object // [中文] 任务跟踪计时器 // [English] Task trace counter private CECCounter m_TaskTraceCounter; // CECCounter -> object placeholder private bool OnInitDialog() { // m_pTxt_QuestNO = (PAUILABEL)GetDlgItem("Txt_QuestNO"); // m_pTv_Quest = (PAUITREEVIEW)GetDlgItem("Tv_Quest"); // m_pTxt_Content = dynamic_cast(GetDlgItem("Txt_Content")); // m_pTxt_QuestItem = dynamic_cast(GetDlgItem("Txt_QuestItem")); // m_pBtn_Abandon = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_Abandon"); // m_pTxt_BaseAward = (PAUILABEL)GetDlgItem("Txt_BaseAward"); // m_pBtn_SearchQuest = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_SearchQuest"); // m_pBtn_HaveQuest = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_HaveQuest"); // m_pBtn_bShowTrace = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_ShowTrace"); // m_pBtn_FinishTask = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_FinishTask"); // m_pBtn_GotoNPC = (PAUISTILLIMAGEBUTTON)GetDlgItem("Btn_GotoNPC"); if (m_pBtn_FinishTask) m_pBtn_FinishTask.gameObject.SetActive(false); if (m_pBtn_GotoNPC) m_pBtn_GotoNPC.gameObject.SetActive(false); // TODO: Set button pushed state // if (m_pBtn_HaveQuest != null) { /* set pushed state if needed */ } GameObject pObj = GetDlgItem("Btn_TreasureMap"); if (pObj != null) { pObj.SetActive(false); } pObj = GetDlgItem("Img_New"); if (pObj != null) { pObj.SetActive(false); } if (m_pTxt_QuestNO != null) { m_pTxt_QuestNO.text = "0"; } m_TaskTraceCounter.SetPeriod(950); return true; } private T GetDlgItem(string name) { var t = transform.Find(name); if (t != null) return t.GetComponent(); return default(T); } } }