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

模拟服务器

开发平台:

C/C++

  1. // -------------------------------------------------------------------------
  2. // 文件名 : UiInit.cpp
  3. // 创建者 : 彭建波
  4. // 创建时间 : 2002-9-10 11:27:04
  5. // 功能描述 : 初始界面
  6. //
  7. // -------------------------------------------------------------------------
  8. #include "KWin32.h"
  9. #include "KIniFile.h"
  10. #include "KFilePath.h"
  11. #include "KMusic.h"
  12. #include "../Elem/WndMessage.h"
  13. #include "../Elem/Wnds.h"
  14. #include "../UiBase.h"
  15. #include "../UiShell.h"
  16. #include "UiInit.h"
  17. #include "UiSelServer.h"
  18. #include "UiLoginBg.h"
  19. #include "UiOptions.h"
  20. #include "UiConnectInfo.h"
  21. #include "UiPlayVideo.h"
  22. #include "../UiSoundSetting.h"
  23. //#include "UiReconnect.h"
  24. extern KMusic* g_pMusic;
  25. #define SCHEME_INI_INIT  "开始.ini"
  26. #define LAUNCH_GAME_INI "\Ui\杂烩.ini"
  27. KUiInit* KUiInit::m_pSelf = NULL;
  28. enum UIINT_BUTTON
  29. {
  30. UIB_NONE,
  31. UIB_ENTER_GAME,
  32. UIB_AUTO_LOGIN,
  33. UIB_GMAE_CONFIG,
  34. UIB_DESIGNER_LIST,
  35. UIB_EXIT_GAME,
  36. };
  37. //--------------------------------------------------------------------------
  38. // 功能:打开窗口,返回唯一的一个类对象实例
  39. //--------------------------------------------------------------------------
  40. KUiInit* KUiInit::OpenWindow(bool bStartMusic, bool bJustLaunched)
  41. {
  42. if (m_pSelf == NULL)
  43. {
  44. m_pSelf = new KUiInit;
  45. if (m_pSelf)
  46. m_pSelf->Initialize();
  47. }
  48. if (m_pSelf)
  49. {
  50. if (bJustLaunched)
  51. {
  52. Wnd_ShowCursor(false);
  53. KUiOptions::LoadSetting(true, true);//音量只有在打开音乐才能使用。
  54. m_pSelf->m_nCurrentMovieIndex = 0;
  55. KUiLoginBackGround::CloseWindow(false);
  56. m_pSelf->PlayStartMovie();
  57. }
  58. else
  59. {
  60. UiSoundPlay(UI_SI_POPUP_OUTGAME_WND);
  61. KUiLoginBackGround::OpenWindow(m_pSelf->m_szLoginBg);
  62. m_pSelf->Show();
  63. if (bStartMusic)
  64. PlayTitleMusic();
  65. }
  66. }
  67. return m_pSelf;
  68. }
  69. //--------------------------------------------------------------------------
  70. // 功能:关闭窗口,同时可以选则是否删除对象实例
  71. //--------------------------------------------------------------------------
  72. void KUiInit::CloseWindow()
  73. {
  74. if (m_pSelf)
  75. {
  76. Wnd_ShowCursor(true);
  77. m_pSelf->Destroy();
  78. m_pSelf = NULL;
  79. }
  80. }
  81. void KUiInit::PlayStartMovie()
  82. {
  83. KIniFile Ini;
  84. char szMovieIndex[32], szFile[128];
  85. char szPathFile[MAX_PATH];
  86. if (Ini.Load(LAUNCH_GAME_INI))
  87. {
  88. int nSkipable;
  89. sprintf(szMovieIndex, "Movie_%d", m_nCurrentMovieIndex);
  90. Ini.GetString("JustLaunched", szMovieIndex, "", szFile, sizeof(szFile));
  91. strcat(szMovieIndex, "_Skipable");
  92. Ini.GetInteger("JustLaunched", szMovieIndex, 0, &nSkipable);
  93. if (szFile[0])
  94. {
  95. KUiPlayVideo* pPlayer = KUiPlayVideo::OpenWindow();
  96. if (pPlayer)
  97. {
  98. pPlayer->SetPosition(0, 0);
  99. int nWidth, nHeight;
  100. Wnd_GetScreenSize(nWidth, nHeight);
  101. pPlayer->SetSize(nWidth, nHeight);
  102. pPlayer->Setting(nSkipable != 0, false, this, 0);
  103. g_GetFullPath(szPathFile, szFile);
  104. if (pPlayer->OpenVideo(szPathFile))
  105. { //成功播放影片
  106. m_nCurrentMovieIndex++;
  107. return;
  108. }
  109. }
  110. }
  111. }
  112. KUiPlayVideo::CloseWindow(true);
  113. Wnd_ShowCursor(true);
  114. OpenWindow(true, false);
  115. }
  116. void KUiInit::PlayTitleMusic()
  117. {
  118. char szMusic[128] = "";
  119. KIniFile Ini;
  120. if (Ini.Load(LAUNCH_GAME_INI))
  121. {
  122. int nCount = 0;
  123. Ini.GetInteger("JustLaunched", "TitleMusicCount", 0, &nCount);
  124. if (nCount > 0)
  125. {
  126. char szKey[16];
  127. sprintf(szKey, "TitleMusic_%d", rand() % nCount);
  128. Ini.GetString("JustLaunched", szKey, "", szMusic, sizeof(szMusic));
  129. if (szMusic[0])
  130. {
  131. g_pMusic->Stop();
  132. g_pMusic->Open((char*)szMusic);
  133. g_pMusic->Play(true);
  134. }
  135. }
  136. }
  137. }
  138. void KUiInit::StopTitleMusic()
  139. {
  140. if (g_pMusic)
  141. {
  142. g_pMusic->Stop();
  143. g_pMusic->Close();
  144. }
  145. }
  146. //--------------------------------------------------------------------------
  147. // 功能:载入窗口的界面方案
  148. //--------------------------------------------------------------------------
  149. void KUiInit::LoadScheme(const char* pScheme)
  150. {
  151. char Buff[128];
  152. KIniFile Ini;
  153. sprintf(Buff, "%s\%s", pScheme, SCHEME_INI_INIT);
  154. if (Ini.Load(Buff))
  155. {
  156. KWndShowAnimate::Init(&Ini, "Main");
  157. m_EnterGame. Init(&Ini, "EnterGame");
  158. m_GameConfig. Init(&Ini, "GameConfig");
  159. m_DesignerList. Init(&Ini, "DesignerList");
  160. // m_AutoLogin. Init(&Ini, "AutoLogin");
  161. m_ExitGame. Init(&Ini, "ExitGame");
  162. Ini.GetString("Main", "LoginBg", "", m_szLoginBg, sizeof(m_szLoginBg));
  163. }
  164. }
  165. //--------------------------------------------------------------------------
  166. // 功能:初始化
  167. //--------------------------------------------------------------------------
  168. void KUiInit::Initialize()
  169. {
  170. AddChild(&m_EnterGame);
  171. // AddChild(&m_AutoLogin);
  172. AddChild(&m_GameConfig);
  173. AddChild(&m_DesignerList);
  174. AddChild(&m_ExitGame);
  175. m_szLoginBg[0] = 0;
  176. char Scheme[256];
  177. g_UiBase.GetCurSchemePath(Scheme, 256);
  178. LoadScheme(Scheme);
  179. Wnd_AddWindow(this, WL_TOPMOST);
  180. }
  181. //--------------------------------------------------------------------------
  182. // 功能:窗口消息函数
  183. //--------------------------------------------------------------------------
  184. int KUiInit::WndProc(unsigned int uMsg, unsigned int uParam, int nParam)
  185. {
  186. int nRet = 0;
  187. switch(uMsg)
  188. {
  189. case WND_N_BUTTON_CLICK:
  190. OnClickButton((KWndButton*)(KWndWindow*)uParam);
  191. break;
  192. case WM_KEYDOWN:
  193. nRet = OnKeyDown(uParam);
  194. break;
  195. case WM_SYSKEYDOWN:
  196. if (uParam == 'A')
  197. OnAutoLogin();
  198. break;
  199. case WND_M_OTHER_WORK_RESULT:
  200. PlayStartMovie();
  201. break;
  202. default:
  203. nRet = KWndShowAnimate::WndProc(uMsg, uParam, nParam);
  204. }
  205. return nRet;
  206. }
  207. int KUiInit::OnKeyDown(unsigned int uKey)
  208. {
  209. int nRet = 1;
  210. KWndButton* pActive = NULL;
  211. KWndButton* pToActive = NULL;
  212. if (uKey == VK_RETURN)
  213. {
  214. if (pActive = GetActiveBtn())
  215. OnClickButton(pActive);
  216. }
  217. else if (uKey == VK_UP)
  218. {
  219. pActive = GetActiveBtn();
  220. if (pActive == &m_ExitGame)
  221. pToActive = &m_DesignerList;
  222. else if (pActive == &m_DesignerList)
  223. pToActive = &m_GameConfig;
  224. else if (pActive == &m_EnterGame)
  225. pToActive = &m_ExitGame;
  226. else
  227. pToActive = &m_EnterGame;
  228. }
  229. else if (uKey == VK_DOWN)
  230. {
  231. pActive = GetActiveBtn();
  232. if (pActive == &m_EnterGame)
  233. pToActive = &m_GameConfig;
  234. else if (pActive == &m_GameConfig)
  235. pToActive = &m_DesignerList;
  236. else if (pActive == &m_DesignerList)
  237. pToActive = &m_ExitGame;
  238. else
  239. pToActive = &m_EnterGame;
  240. }
  241. else
  242. nRet = 0;
  243. if (pToActive)
  244. pToActive->SetCursorAbove();
  245. return nRet;
  246. }
  247. //--------------------------------------------------------------------------
  248. // 功能:响应点击按钮
  249. //--------------------------------------------------------------------------
  250. void KUiInit::OnClickButton(KWndButton* pWnd)
  251. {
  252. if (pWnd == &m_EnterGame)
  253. {
  254. if (KUiSelServer::OpenWindow())
  255. CloseWindow();
  256. }
  257. else if (pWnd == &m_GameConfig)
  258. {
  259. if (KUiOptions::OpenWindow(this))
  260. Hide();
  261. }
  262. else if (pWnd == &m_DesignerList)
  263. {
  264. //to do: write load designer list here...
  265. }
  266. else if (pWnd == &m_ExitGame)
  267. {
  268. CloseWindow();
  269. UiPostQuitMsg();
  270. }
  271. }
  272. void KUiInit::OnAutoLogin()
  273. {
  274. g_LoginLogic.LoadLoginChoice();
  275. if (g_LoginLogic.IsAutoLoginEnable())
  276. {
  277. KIniFile* pSetting = g_UiBase.GetCommConfigFile();
  278. int nAutoLogin = false;
  279. if (pSetting)
  280. {
  281. pSetting->GetInteger("Main", "AutoLogin", 0, &nAutoLogin);
  282. g_UiBase.CloseCommConfigFile();
  283. }
  284. if (nAutoLogin == 6323)
  285. {
  286. CloseWindow();
  287. KUiConnectInfo::OpenWindow(CI_MI_CONNECTING, LL_S_IN_GAME);
  288. g_LoginLogic.AutoLogin();
  289. }
  290. }
  291. }
  292. KWndButton* KUiInit::GetActiveBtn()
  293. {
  294. KWndButton* pBtn = NULL;
  295. if (m_EnterGame.IsButtonActive())
  296. pBtn = &m_EnterGame;
  297. // else if (m_AutoLogin.IsButtonActive())
  298. // pBtn = &m_AutoLogin;
  299. else if (m_GameConfig.IsButtonActive())
  300. pBtn = &m_GameConfig;
  301. else if (m_DesignerList.IsButtonActive())
  302. pBtn = &m_DesignerList;
  303. else if (m_ExitGame.IsButtonActive())
  304. pBtn = &m_ExitGame;
  305. return pBtn;
  306. }
  307. void KUiInit::ShowCompleted()
  308. {
  309.     m_EnterGame.SetCursorAbove();
  310. }