UiParadeItem.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:6k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 界面--状态界面
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-9-2
  6. *****************************************************************************************/
  7. #include "KWin32.h"
  8. #include "KIniFile.h"
  9. #include "../Elem/WndMessage.h"
  10. #include "../elem/wnds.h"
  11. #include "UiParadeItem.h"
  12. #include "../ShortcutKey.h"
  13. #include "../UiSoundSetting.h"
  14. #include "../../../core/src/coreshell.h"
  15. #include "../UiBase.h"
  16. extern iCoreShell* g_pCoreShell;
  17. #define SCHEME_INI "看对方玩家装备.ini"
  18. KUiParadeItem* KUiParadeItem::m_pSelf = NULL;
  19. // -------------------------------------------------------------------------
  20. // ---> 建立控件与UIEP_*以及可接纳物品的类型的对应关系
  21. static struct UE_CTRL_MAP
  22. {
  23. int nPosition;
  24. const char* pIniSection;
  25. }CtrlItemMap[_ITEM_COUNT] =
  26. {
  27. { UIEP_HEAD, "Cap" }, //装备-帽子
  28. { UIEP_HAND, "Weapon" }, //装备-武器
  29. { UIEP_NECK, "Necklace" }, //装备-项链
  30. { UIEP_FINESSE, "Bangle" }, //装备-手镯
  31. { UIEP_BODY, "Cloth" }, //装备-衣服
  32. { UIEP_WAIST, "Sash" }, //装备-腰带
  33. { UIEP_FINGER1, "Ring1" }, //装备-戒指
  34. { UIEP_FINGER2, "Ring2" }, //装备-戒指
  35. { UIEP_WAIST_DECOR, "Pendant" }, //装备-腰缀
  36. { UIEP_FOOT, "Shoes" }, //装备-鞋子
  37. { UIEP_HORSE, "Horse" } //装备-马
  38. };
  39. //--------------------------------------------------------------------------
  40. // 功能:如果窗口正被显示,则返回实例指针
  41. //--------------------------------------------------------------------------
  42. KUiParadeItem* KUiParadeItem::GetIfVisible()
  43. {
  44. if (m_pSelf && m_pSelf->IsVisible())
  45. return m_pSelf;
  46. return NULL;
  47. }
  48. //--------------------------------------------------------------------------
  49. // 功能:打开窗口,返回唯一的一个类对象实例
  50. //--------------------------------------------------------------------------
  51. KUiParadeItem* KUiParadeItem::OpenWindow(KUiPlayerItem* pDest)
  52. {
  53. if (m_pSelf == NULL)
  54. {
  55. m_pSelf = new KUiParadeItem;
  56. if (m_pSelf)
  57. m_pSelf->Initialize();
  58. }
  59. if (m_pSelf)
  60. {
  61. m_pSelf->UpdateData(pDest);
  62. char Scheme[256];
  63. g_UiBase.GetCurSchemePath(Scheme, 256);
  64. LoadScheme(Scheme);
  65. m_pSelf->BringToTop();
  66. UiSoundPlay(UI_SI_WND_OPENCLOSE);
  67. m_pSelf->Show();
  68. }
  69. return m_pSelf;
  70. }
  71. //--------------------------------------------------------------------------
  72. // 功能:关闭窗口,同时可以选则是否删除对象实例
  73. //--------------------------------------------------------------------------
  74. void KUiParadeItem::CloseWindow(bool bDestroy)
  75. {
  76. if (m_pSelf)
  77. {
  78. if (bDestroy == false)
  79. m_pSelf->Hide();
  80. else
  81. {
  82. m_pSelf->Destroy();
  83. m_pSelf = NULL;
  84. }
  85. if (g_pCoreShell)
  86. g_pCoreShell->OperationRequest(GOI_VIEW_PLAYERITEM_END, 0, 0);
  87. }
  88. }
  89. //--------------------------------------------------------------------------
  90. // 功能:初始化
  91. //--------------------------------------------------------------------------
  92. void KUiParadeItem::Initialize()
  93. {
  94. AddChild(&m_Name);
  95. AddChild(&m_Title);
  96. for (int i = 0; i < _ITEM_COUNT; i ++)
  97. {
  98. m_EquipBox[i].SetObjectGenre(CGOG_ITEM);
  99. AddChild(&m_EquipBox[i]);
  100. m_EquipBox[i].SetContainerId((int)UOC_EQUIPTMENT);
  101. }
  102. AddChild(&m_Close);
  103. Wnd_AddWindow(this);
  104. }
  105. //--------------------------------------------------------------------------
  106. // 功能:载入窗口的界面方案
  107. //--------------------------------------------------------------------------
  108. void KUiParadeItem::LoadScheme(const char* pScheme)
  109. {
  110. if (m_pSelf)
  111. {
  112. char Buff[128];
  113. KIniFile Ini;
  114. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI);
  115. if (Ini.Load(Buff))
  116. m_pSelf->LoadScheme(&Ini);
  117. }
  118. }
  119. //载入界面方案
  120. void KUiParadeItem::LoadScheme(class KIniFile* pIni)
  121. {
  122. if (g_pCoreShell->GetGameData(GDI_PLAYER_IS_MALE, 0, m_Dest.uId))
  123. Init(pIni, "Male");
  124. else
  125. Init(pIni, "Female");
  126. m_Face    .Init(pIni, "Face");
  127. m_Name    .Init(pIni, "Name");
  128. m_Title   .Init(pIni, "Title");
  129. m_Close  .Init(pIni, "Close");
  130. for (int i = 0; i < _ITEM_COUNT; i ++)
  131. {
  132. m_EquipBox[i].Init(pIni, CtrlItemMap[i].pIniSection);
  133. }
  134. }
  135. //--------------------------------------------------------------------------
  136. // 功能:窗口函数
  137. //--------------------------------------------------------------------------
  138. int KUiParadeItem::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  139. {
  140. int nRet = 0;
  141. switch(uMsg)
  142. {
  143. case WND_N_BUTTON_CLICK:
  144. if (uParam == (unsigned int)(KWndWindow*)&m_Close)
  145. Hide();
  146. break;
  147. default:
  148. nRet = KWndShowAnimate::WndProc(uMsg, uParam, nParam);
  149. }
  150. return nRet;
  151. }
  152. //--------------------------------------------------------------------------
  153. // 功能:更新基本数据(人名等不易变数据)
  154. //--------------------------------------------------------------------------
  155. void KUiParadeItem::UpdateBaseData(KUiPlayerItem* pDest)
  156. {
  157. if (!g_pCoreShell)
  158. return;
  159. KUiPlayerBaseInfo Info;
  160. memset(&Info, 0, sizeof(KUiPlayerBaseInfo));
  161. g_pCoreShell->GetGameData(GDI_PLAYER_BASE_INFO, (int)&Info, pDest->uId);
  162. m_Name  .SetText(Info.Name);
  163. m_Title .SetText(Info.Title);
  164. }
  165. //--------------------------------------------------------------------------
  166. // 功能:更新数据
  167. //--------------------------------------------------------------------------
  168. void KUiParadeItem::UpdateData(KUiPlayerItem* pDest)
  169. {
  170. if (pDest == NULL)
  171. return;
  172. UpdateBaseData(pDest);
  173. UpdateAllEquips(pDest);
  174. m_Dest = *pDest;
  175. }
  176. void KUiParadeItem::UpdateAllEquips(KUiPlayerItem* pDest)
  177. {
  178. if (!g_pCoreShell)
  179. return;
  180. KUiObjAtRegion Equips[_ITEM_COUNT];
  181. int nCount = g_pCoreShell->GetGameData(GDI_PARADE_EQUIPMENT, (unsigned int)&Equips, 0);
  182. int i;
  183. for (i = 0; i < _ITEM_COUNT; i++)
  184. m_EquipBox[i].Celar();
  185. for (i = 0; i < nCount; i++)
  186. {
  187. if (Equips[i].Obj.uGenre != CGOG_NOTHING)
  188. UpdateEquip(&Equips[i], true);
  189. }
  190. }
  191. //--------------------------------------------------------------------------
  192. // 功能:装备变化更新
  193. //--------------------------------------------------------------------------
  194. void KUiParadeItem::UpdateEquip(KUiObjAtRegion* pEquip, int bAdd)
  195. {
  196. if (pEquip)
  197. {
  198. for (int i = 0; i < _ITEM_COUNT; i++)
  199. {
  200. if (CtrlItemMap[i].nPosition == pEquip->Region.v)
  201. {
  202. if (bAdd)
  203. m_EquipBox[i].HoldObject(pEquip->Obj.uGenre, pEquip->Obj.uId,
  204. pEquip->Region.Width, pEquip->Region.Height);
  205. else
  206. m_EquipBox[i].HoldObject(CGOG_NOTHING, 0, 0, 0);
  207. break;
  208. }
  209. }
  210. }
  211. }