diff --git a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset index 415919ac8c..81e92ecbf1 100644 --- a/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset +++ b/Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset @@ -27,3 +27,5 @@ MonoBehaviour: prefab: {fileID: 977375840943150650, guid: 51bad2e6d1ec69a4683135ce85288faa, type: 3} - id: Win_Hpmpxp prefab: {fileID: 6032603119232429246, guid: 8350aa55906d08448bb47e10a473ca61, type: 3} + - id: Win_Produce + prefab: {fileID: 5750242998044155948, guid: ecf0d8daf08db6f4a8d94a4bb07847ec, type: 3} diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs index faa5d2502c..e801295c87 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgNPC.cs @@ -3518,6 +3518,33 @@ namespace BrewMonster.UI // BMLogger.LogError($"NPC_MAKE: Error updating produce: {ex.Message}"); // } //} + + uint npcID = pCurNPCEssence.HasValue ? pCurNPCEssence.Value.id : 0; + + AUIDialog dlg = m_pAUIManager.GetDialog("Win_Produce"); + DlgProduce dlgProduce = dlg as DlgProduce; + if (dlgProduce == null) + { + CECGameUIMan gameUIMan = GetGameUIMan(); + DialogScriptTableObject dialogResource = gameUIMan.GetDialogResource(); + Canvas canvas = gameUIMan.GetCanvas(); + + if(dlgProduce != null && canvas != null) + { + GameObject ob = dialogResource.GetPrefabDialog("Win_Produce"); + if (ob != null) + { + dlgProduce = GameObject.Instantiate(ob, canvas.transform).GetComponent(); + } + } + } + + if(dlgProduce != null) + { + dlgProduce.Show(true); + dlgProduce.OpenProduce(npcID); + } + } else if (idFunction == (int)SERVICE_TYPE.NPC_DECOMPOSE) { diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs new file mode 100644 index 0000000000..f00569d54a --- /dev/null +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/DlgProduce.cs @@ -0,0 +1,371 @@ +using BrewMonster.Network; +using BrewMonster.Scripts.Managers; +using BrewMonster.Scripts.Task; +using BrewMonster.UI; +using ModelRenderer.Scripts.Common; +using PerfectWorld.Scripts.Managers; +using PerfectWorld.Scripts.Task; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace BrewMonster +{ + public class DlgProduce : AUIDialog + { + [Header("Produce Tabs")] + public Transform tabBtnContainer; + public GameObject tabBtnPb; + public string tabButtonTextComponentName = "Text"; + + [Header("Produce Detail")] + public Transform itemContainer; + public GameObject itemPb; + + [Header("Material Slots")] + public List materialSlots = new List(); + + [Header("Result Slot")] + public Transform itemResult; + + private NPC_MAKE_SERVICE? cachedMakeService = null; + private int currentTabIndex = 0; + + public void OpenProduce(uint npcId) + { + if (!LoadMakeService(npcId)) + { + Debug.LogError("[DlgProduce] LoadMakeService failed"); + return; + } + + CreateTabs(); + OnTabSelected(0); + } + + bool LoadMakeService(uint npcId) + { + var edm = ElementDataManProvider.GetElementDataMan(); + if (edm == null) + return false; + + DATA_TYPE dt = DATA_TYPE.DT_INVALID; + object npcData = edm.get_data_ptr(npcId, ID_SPACE.ID_SPACE_ESSENCE, ref dt); + + if (dt != DATA_TYPE.DT_NPC_ESSENCE || npcData == null) + return false; + + NPC_ESSENCE npc = (NPC_ESSENCE)npcData; + if (npc.id_make_service == 0) + return false; + + DATA_TYPE serviceDt = DATA_TYPE.DT_INVALID; + object serviceData = edm.get_data_ptr( + npc.id_make_service, + ID_SPACE.ID_SPACE_ESSENCE, + ref serviceDt + ); + + if (serviceDt != DATA_TYPE.DT_NPC_MAKE_SERVICE || serviceData == null) + return false; + + cachedMakeService = (NPC_MAKE_SERVICE)serviceData; + return true; + } + + void CreateTabs() + { + ClearContainer(tabBtnContainer); + + if (!cachedMakeService.HasValue || cachedMakeService.Value.pages == null) + return; + + var makeService = cachedMakeService.Value; + + for (int pageIndex = 0; pageIndex < makeService.pages.Length; pageIndex++) + { + var page = makeService.pages[pageIndex]; + bool hasRecipes = false; + if (page.id_goods != null) + { + foreach (uint recipeId in page.id_goods) + { + if (recipeId != 0) + { + hasRecipes = true; + break; + } + } + } + + if (!hasRecipes) + continue; + + GameObject tabObj = Instantiate(tabBtnPb, tabBtnContainer); + tabObj.name = $"ProduceTab_Page_{pageIndex}"; + tabObj.SetActive(true); + + string pageTitle = ByteToStringUtils.UshortArrayToUnicodeString(page.page_title); + if (string.IsNullOrWhiteSpace(pageTitle)) + pageTitle = $"Page {pageIndex + 1}"; + + TMPro.TextMeshProUGUI tabTMP = null; + Text tabText = null; + + Transform textTf = tabObj.transform.Find(tabButtonTextComponentName); + if (textTf != null) + { + tabTMP = textTf.GetComponent(); + if (tabTMP == null) + { + tabText = textTf.GetComponent(); + } + } + + if (tabTMP == null && tabText == null) + { + tabTMP = tabObj.GetComponentInChildren(); + if(tabTMP == null) + { + tabText = tabObj.GetComponentInChildren(); + } + } + + if(tabTMP != null) + tabTMP.text = pageTitle; + else if(tabText != null) + tabText.text = pageTitle; + + Button btn = tabObj.GetComponent