Files
test/Assets/PerfectWorld/Scripts/UI/GamePlay/EC_GameUIMan.cs
T
2026-02-28 18:34:39 +07:00

388 lines
14 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using BrewMonster.Assets.PerfectWorld.Scripts.UI.GamePlay;
using BrewMonster.Common;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts.Task;
using BrewMonster.Scripts.Task.UI;
using BrewMonster.Scripts.UI;
using ModelRenderer.Scripts.Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
namespace BrewMonster.UI
{
public class CECGameUIMan : AUIManager
{
DlgNPC m_pDlgNPC;
CDlgPetList m_pDlgPetList;
public NPC_ESSENCE? m_pCurNPCEssence;
public int m_idCurFinishTask = -1;
private DlgTask m_pDlgTask;
private Dictionary<byte, (string, Sprite[])> m_IconMap;
private const string SKILL_ICONLIST_NAME = "iconlist_skill_multisprite";
private const string ACTION_ICONLIST_NAME = "ActionIcon/iconlist_action_multisprite";
public static bool TALKPROC_IS_TERMINAL(uint id)
{
return ((id & 0x80000000u) != 0) && ((id & 0x40000000u) != 0);
}
public static bool TALKPROC_IS_FUNCTION(uint id)
{
return ((id) & 0x80000000) != 0;
}
public static uint TALKPROC_GET_FUNCTION_ID(uint id)
{
return ((id) & 0x7FFFFFFF);
}
public void PopupNPCDialog(NPC_ESSENCE pEssence)
{
if (m_pDlgNPC == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DialogNPC");
m_pDlgNPC = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<DlgNPC>();
m_pDlgNPC.SetAUIManager(this);
}
m_pDlgNPC.PopupDialog(pEssence);
}
public void PopupNPCDialog(talk_proc pTalk)
{
if (m_pDlgNPC == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DialogNPC");
m_pDlgNPC = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<DlgNPC>();
m_pDlgNPC.SetAUIManager(this);
}
m_pDlgNPC.PopupNPCDialog(pTalk);
}
public CECShortcutSet GetSCSByDlg(int indexPanel)
{
CECHostPlayer pHost = CECGameRun.Instance.GetHostPlayer();
CDlgQuickBar cDlgQuickBar = CECUIManager.Instance.GetCDlgQuickBar();
CECShortcutSet pSCS = null;
int index = (0);
if (indexPanel == 1)
{
int panel = (index < 0 ? cDlgQuickBar.GetCurPanel1() : index) - 1;
pSCS = pHost.GetShortcutSet1(0);
}
else
{
int panel = (index < 0 ? cDlgQuickBar.GetCurPanel2() : index) - 1;
pSCS = pHost.GetShortcutSet2(panel);
}
return pSCS;
}
// 弹出任务完成对话框(到达/离开地点等触发) // Popup task-finish dialog (reach/leave site, etc.)
// C++: pTask->PopupTaskFinishDialog(taskId, &awardTalk); then OnUIDialogEnd() notifies server.
public bool PopupTaskFinishDialog(uint taskId, talk_proc pTalk)
{
if (pTalk.num_window == 0) return false;
if (m_pDlgNPC == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DialogNPC");
m_pDlgNPC = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<DlgNPC>();
m_pDlgNPC.SetAUIManager(this);
}
m_idCurFinishTask = (int)taskId;
m_pDlgNPC.PopupNPCDialog(pTalk);
m_pDlgNPC.SetData(DlgNPC.NPC_DIALOG.NPC_DIALOG_TASK_TALK, "");
return true;
}
public void EndNPCService()
{
m_pCurNPCEssence = null;
//EC_Game.GetGameRun().GetHostPlayer().EndNPCService();
EC_ManMessageMono.Instance.EC_ManPlayer.GetHostPlayer().EndNPCService();
}
public bool UpdateTask(uint idTask, int reason)
{
Debug.Log($"[EC_GameUIMan] UpdateTask: idTask={idTask}, reason={reason}");
DlgTaskTrace pDlg = GetDialog("Win_QuestMinion").GetComponent<DlgTaskTrace>();
if (pDlg) {
//pDlg->SetBtnUnTraceY(-1, 0);
pDlg.UpdateContributionTask();
if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_NEW)
pDlg.OnTaskNew(idTask);
}
// TODO
// ´
// if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_NEW)
// {
// m_pDlgQuestionTask.AddQuestionTask(idTask);
// }
// else if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_COMPLETE || reason == TaskTemplConstants.TASK_SVR_NOTIFY_GIVE_UP)
// {
// m_pDlgQuestionTask.RemoveQuestionTask(idTask);
// }
if (reason == TaskTemplConstants.TASK_SVR_NOTIFY_STORAGE)
{
// TODO
// CDlgTaskList* pDlg = (CDlgTaskList*)GetDialog("Win_QuestList");
// if (pDlg && pDlg.IsShow())
// {
// // refresh data in OnShow()
// pDlg.RefreshTaskList();
// }
return true;
}
else
{
// zhangyitian 20140521
// ʱɽбҲҪ£˿ɽбµ
return m_pDlgTask.UpdateQuestView();
}
}
public DialogScriptTableObject GetDialogResource()
{
return m_dialogResouce;
}
public Canvas GetCanvas()
{
return m_canvas;
}
public void EnableUI(bool bEnable)
{
}
/// <summary>
/// Get user layout data for saving to server. Stub: returns size 0 (UI layout save not implemented).
/// 获取用户布局数据用于保存到服务器。桩:返回长度 0(UI 布局保存未实现)。
/// </summary>
/// TODO: NOW, IT ONLY RETURN THE FIXED SIZE OF STRUCTURE. NEED TO IMPLEMENT THE REAL DATA SAVE/LOAD.
public void GetUserLayout(byte[] pData, ref uint dwUISize)
{
if( pData != null )
{
// int i;
// USER_LAYOUT ul;
// char szName[40];
// PAUICHECKBOX pCheck;
// CECHostPlayer *pHost = g_pGame->GetGameRun()->GetHostPlayer();
//
// memset(&ul, 0, sizeof(USER_LAYOUT));
//
// ul.nVersion = LAYOUTDATA_VERSION;
// ul.nMapMode = m_pDlgMiniMap->GetMode();
//
// ul.bQuickbarPetMode = GetDialog("Win_QuickbarPetV")->IsShow();
//
// AString dlgName;
//
// dlgName.Format("Win_Quickbar%dHa", SIZE_HOSTSCSET1);
// ul.bQuickbar1Mode = GetDialog(dlgName)->IsShow();
// for( i = 0; i < NUM_HOSTSCSETS1; i++ )
// {
// sprintf(szName, "Win_Quickbar%dHb_%d", SIZE_HOSTSCSET1, i+1);
// pCheck = (PAUICHECKBOX)GetDialog(szName)->GetDlgItem("Chk_Normal");
// ul.bChecked1[i] = pCheck->IsChecked();
// }
//
// dlgName.Format("Win_Quickbar%dHa", SIZE_HOSTSCSET2);
// ul.bQuickbar2Mode = GetDialog(dlgName)->IsShow();
// for( i = 0; i < NUM_HOSTSCSETS2; i++ )
// {
// sprintf(szName, "Win_Quickbar%dHb_%d", SIZE_HOSTSCSET2, i+1);
// pCheck = (PAUICHECKBOX)GetDialog(szName)->GetDlgItem("Chk_Normal");
// ul.bChecked2[i] = pCheck->IsChecked();
// }
//
// m_pDlgTask->SyncTrace(&ul, false);
// ul.bQuickbarShowAll1 = CDlgQuickBar::m_bShowAll1;
// ul.bQuickbarShowAll2 = CDlgQuickBar::m_bShowAll2;
// ul.nQuickbarCurPanel1 = CDlgQuickBar::m_nCurPanel1;
// ul.nQuickbarCurPanel2 = CDlgQuickBar::m_nCurPanel2;
// ul.nQuickbarDisplayPanels1 = CDlgQuickBar::m_nDisplayPanels1;
// ul.nQuickbarDisplayPanels2 = CDlgQuickBar::m_nDisplayPanels2;
//
// ul.nChatWinSize = m_pDlgChat->GetChatWinSize();
// ul.nCurChatColor = m_pDlgChat->GetChatColor();
//
// for( i = 0; i < (int)m_pDlgMiniMap->GetMarks().size(); i++ )
// {
// ul.a_Mark[i].nNPC = m_pDlgMiniMap->GetMarks()[i].nNPC;
// ul.a_Mark[i].vecPos = m_pDlgMiniMap->GetMarks()[i].vecPos;
// ul.a_MarkMapID[i] = (short)m_pDlgMiniMap->GetMarks()[i].mapID;
// a_strncpy(ul.a_Mark[i].szName, m_pDlgMiniMap->GetMarks()[i].strName, CECGAMEUIMAN_MARK_NAME_LEN);
// }
//
// CECFriendMan::GROUP *pGroup;
// CECFriendMan *pMan = g_pGame->GetGameRun()->GetHostPlayer()->GetFriendMan();
// if (pMan)
// {
// int j(0);
// for( i = 0; i < pMan->GetGroupNum() && j < CECGAMEUIMAN_MAX_GROUPS; i++ )
// {
// pGroup = pMan->GetGroupByIndex(i);
// if (pGroup->iGroup)
// {
// ul.idGroup[j] = pGroup->iGroup;
// ul.clrGroup[j] = pGroup->color;
// ++ j;
// }
// }
// }
// ul.bAutoReply = m_bAutoReply;
// ul.bOnlineNotify = m_bOnlineNotify;
// ul.bSaveHistory = m_bSaveHistory;
//
// ul.ucCurSystemModuleSC = pHost->GetCurSysModShortcutSetIndex(); // ǰʹõϵͳģ
//
// ul.bSystemModuleQuickBarMini = m_pDlgSysModuleQuickBar->GetMiniMode();
//
// ul.bMenuMode = m_pDlgSystemb->IsShow();
//
// ul.bShowCompareDesc = m_bShowItemDescCompare;
// ul.bShowLowHP = m_bShowLowHP;
// ul.bShowTargetOfTarget = m_bShowTargetOfTarget;
//
// memcpy(pvData, &ul, sizeof(USER_LAYOUT));
//
// POINT ptPos;
// float fx, fy;
// AIniFile theIni;
// char szIniFile[MAX_PATH], szKey[40];
// A3DVIEWPORTPARAM *p = m_pA3DEngine->GetActiveViewport()->GetParam();
//
// for( i = 0; i < (int)m_aDialog.size() - 1; i++ )
// {
// ptPos = m_aDialog[i]->GetPos();
//
// fx = ptPos.x * 100.0f / p->Width;
// fy = ptPos.y * 100.0f / p->Height;
//
// //Խ԰UIλò
// /*
// if( dynamic_cast<CDlgHomeBase*>( m_aDialog[i]) != NULL)
// {
// continue;
// }
// */
//
// sprintf(szKey, "%s_x", m_aDialog[i]->GetName());
// theIni.WriteFloatValue("Windows", szKey, fx);
//
// sprintf(szKey, "%s_y", m_aDialog[i]->GetName());
// theIni.WriteFloatValue("Windows", szKey, fy);
// }
//
// // ͬ "Win_ELFZoom""Win_ELF" λ
// //
// PAUIDIALOG pDlg(NULL);
// if (GetDialog("Win_ELF")->IsShow())
// {
// pDlg = GetDialog("Win_ELFZoom");
// ptPos = GetDialog("Win_ELF")->GetPos();
// }
// else if (GetDialog("Win_ELFZoom")->IsShow())
// {
// pDlg = GetDialog("Win_ELF");
// ptPos = GetDialog("Win_ELFZoom")->GetPos();
// }
// if (pDlg)
// {
// fx = ptPos.x * 100.0f / p->Width;
// fy = ptPos.y * 100.0f / p->Height;
//
// sprintf(szKey, "%s_x", pDlg->GetName());
// theIni.WriteFloatValue("Windows", szKey, fx);
//
// sprintf(szKey, "%s_y", pDlg->GetName());
// theIni.WriteFloatValue("Windows", szKey, fy);
// }
//
// sprintf(szIniFile, "%s\\Userdata\\Layout", af_GetBaseDir());
// CreateDirectoryA(szIniFile, NULL);
//
// sprintf(szIniFile, "%s\\UserData\\Layout\\%d.ini",
// af_GetBaseDir(), pHost->GetCharacterID());
// theIni.Save(szIniFile);
// theIni.Close();
}
else
{
// TODO: NEW STRUCT USER_LAYOUT
// dwSize = sizeof(USER_LAYOUT);
dwUISize = 344;
}
}
public override void Init()
{
base.Init();
m_IconMap = new Dictionary<byte, (string, Sprite[])>();
m_pDlgTask = GetDialog(CECUIHelper.DlgTaskName).GetComponent<DlgTask>();
m_pDlgTask.Show(false);
m_IconMap[(byte)EC_GAMEUI_ICONS.ICONS_SKILL] = (SKILL_ICONLIST_NAME, Resources.LoadAll<Sprite>(SKILL_ICONLIST_NAME));
m_IconMap[(byte)EC_GAMEUI_ICONS.ICONS_ACTION] = (ACTION_ICONLIST_NAME, Resources.LoadAll<Sprite>(ACTION_ICONLIST_NAME));
}
public void SetCover(AUIImagePicture pImgPic, string nameImage, EC_GAMEUI_ICONS iCONS_TYPE)
{
pImgPic.SetImage(m_IconMap[(byte)iCONS_TYPE].Item2.FirstOrDefault(s => s.name == nameImage));
}
/// <summary>Refresh team UI (Arrange Team dialog). Called after team join/leave/member data.</summary>
public bool UpdateTeam(bool bUpdateNear = false)
{
var dlg = GetDialog("Win_ArrangeTeam");
if (dlg is DlgArrangeTeam arr)
{
return arr.UpdateTeam(bUpdateNear);
}
return true;
}
public string GetRealmName(int realmLevel)
{
string strRealm = string.Empty;
if (realmLevel > 0){
int layer = CECHostPlayer.GetRealmLayer(realmLevel);
int subLevel = CECHostPlayer.GetRealmSubLevel(realmLevel);
strRealm = string.Format(GetStringFromTable(11100), GetStringFromTable(11100+layer), GetStringFromTable(11120+subLevel));
}
return strRealm;
}
public void PopupPetListDialog()
{
if (m_pDlgPetList == null)
{
GameObject ob = m_dialogResouce.GetPrefabDialog("DlgPetList");
m_pDlgPetList = GameObject.Instantiate(ob, m_canvas.transform).GetComponent<CDlgPetList>();
m_pDlgPetList.SetAUIManager(this);
}
m_pDlgPetList.OnInitDialog();
}
}
public enum EC_GAMEUI_ICONS : byte
{
ICONS_ACTION = 0,
ICONS_SKILL,
ICONS_INVENTORY,
ICONS_STATE,
ICONS_SKILLGRP,
ICONS_GUILD,
ICONS_PET,
ICONS_ELF,
ICONS_SUITE,
ICONS_CALENDAR,
ICONS_PQ,
ICONS_MAX
};
}