cee2eb74f7
# Conflicts: # Assets/PerfectWorld/Resources/UI/DialogScriptTableObject.asset # Assets/PerfectWorld/Scripts/Network/CSNetwork/GameSession.cs
390 lines
14 KiB
C#
390 lines
14 KiB
C#
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 Unity.VisualScripting;
|
||
using UnityEngine;
|
||
using static UnityEngine.Rendering.DebugUI;
|
||
|
||
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
|
||
};
|
||
}
|