Guest User

uisystemoption.py

a guest
Aug 28th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.97 KB | None | 0 0
  1. import dbg
  2. import ui
  3. import snd
  4. import systemSetting
  5. import net
  6. import chat
  7. import app
  8. import locale
  9. import constInfo
  10. import chrmgr
  11. import player
  12. import musicInfo
  13. import uiSelectMusic
  14. import background
  15.  
  16. MUSIC_FILENAME_MAX_LEN = 25
  17.  
  18. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  19. import uiScriptLocale
  20. import wndMgr
  21.  
  22. LOCALE_LANG_DICT = {
  23. app.LOCALE_EN : { "name" : uiScriptLocale.LANGUAGE_EN, "locale" : "en", "code_page" : 1252 },
  24. app.LOCALE_FR : { "name" : uiScriptLocale.LANGUAGE_FR, "locale" : "fr", "code_page" : 1252 },
  25. app.LOCALE_DE : { "name" : uiScriptLocale.LANGUAGE_DE, "locale" : "de", "code_page" : 1252 },
  26. app.LOCALE_RO : { "name" : uiScriptLocale.LANGUAGE_RO, "locale" : "ro", "code_page" : 1250 },
  27. app.LOCALE_IT : { "name" : uiScriptLocale.LANGUAGE_IT, "locale" : "it", "code_page" : 1252 }
  28. }
  29.  
  30. blockMode = 0
  31.  
  32. class OptionDialog(ui.ScriptWindow):
  33.  
  34. def __init__(self):
  35. ui.ScriptWindow.__init__(self)
  36. self.__Initialize()
  37. self.__Load()
  38. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  39. self.__CreateLanguageSelectWindow()
  40.  
  41. def __del__(self):
  42. ui.ScriptWindow.__del__(self)
  43. print " -------------------------------------- DELETE SYSTEM OPTION DIALOG"
  44.  
  45. def __Initialize(self):
  46. self.tilingMode = 0
  47. self.titleBar = 0
  48. self.changeMusicButton = 0
  49. self.selectMusicFile = 0
  50. self.ctrlMusicVolume = 0
  51. self.ctrlSoundVolume = 0
  52. self.musicListDlg = 0
  53. self.tilingApplyButton = 0
  54. self.cameraModeButtonList = []
  55. self.fogModeButtonList = []
  56. self.tilingModeButtonList = []
  57. self.ctrlShadowQuality = 0
  58. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  59. self.language_change_window = None
  60. self.language_select_button = None
  61. self.language_change_button = None
  62.  
  63. self.cur_language_text = None
  64. self.cur_language_text_window = None
  65.  
  66. self.language_button_dict = {}
  67. self.language_select_list_open = FALSE
  68. self.language_select_window_height = 0
  69.  
  70. self.language_select_window_pos = ((wndMgr.GetScreenWidth() / 2) - 153, (wndMgr.GetScreenHeight() / 2) - 231 - 16)
  71. self.language_select_window_bar = None
  72.  
  73. self.mouse_over_image = None
  74.  
  75. self.selected_language = 0
  76.  
  77.  
  78. def Destroy(self):
  79. self.ClearDictionary()
  80.  
  81. self.__Initialize()
  82. print " -------------------------------------- DESTROY SYSTEM OPTION DIALOG"
  83.  
  84. def __Load_LoadScript(self, fileName):
  85. try:
  86. pyScriptLoader = ui.PythonScriptLoader()
  87. pyScriptLoader.LoadScriptFile(self, fileName)
  88. except:
  89. import exception
  90. exception.Abort("System.OptionDialog.__Load_LoadScript")
  91.  
  92. def __Load_BindObject(self):
  93. try:
  94. GetObject = self.GetChild
  95. self.titleBar = GetObject("titlebar")
  96. self.selectMusicFile = GetObject("bgm_file")
  97. self.changeMusicButton = GetObject("bgm_button")
  98. self.ctrlMusicVolume = GetObject("music_volume_controller")
  99. self.ctrlSoundVolume = GetObject("sound_volume_controller")
  100. self.cameraModeButtonList.append(GetObject("camera_short"))
  101. self.cameraModeButtonList.append(GetObject("camera_long"))
  102. self.fogModeButtonList.append(GetObject("fog_level0"))
  103. self.fogModeButtonList.append(GetObject("fog_level1"))
  104. self.fogModeButtonList.append(GetObject("fog_level2"))
  105. self.tilingModeButtonList.append(GetObject("tiling_cpu"))
  106. self.tilingModeButtonList.append(GetObject("tiling_gpu"))
  107. self.tilingApplyButton=GetObject("tiling_apply")
  108. #self.ctrlShadowQuality = GetObject("shadow_bar")
  109.  
  110. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  111. self.language_select_button = self.GetChild("language_select_button")
  112. self.language_change_window = self.GetChild("language_change_window")
  113. self.cur_language_text = self.GetChild("cur_language_text")
  114. self.cur_language_text_window = self.GetChild("cur_language_text_window")
  115. self.language_change_button = self.GetChild("language_change_button")
  116.  
  117. except:
  118. import exception
  119. exception.Abort("OptionDialog.__Load_BindObject")
  120.  
  121. def __Load(self):
  122. self.__Load_LoadScript("uiscript/systemoptiondialog.py")
  123. self.__Load_BindObject()
  124.  
  125. self.SetCenterPosition()
  126.  
  127. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  128.  
  129. self.ctrlMusicVolume.SetSliderPos(float(systemSetting.GetMusicVolume()))
  130. self.ctrlMusicVolume.SetEvent(ui.__mem_func__(self.OnChangeMusicVolume))
  131.  
  132. self.ctrlSoundVolume.SetSliderPos(float(systemSetting.GetSoundVolume()) / 5.0)
  133. self.ctrlSoundVolume.SetEvent(ui.__mem_func__(self.OnChangeSoundVolume))
  134.  
  135. # self.ctrlShadowQuality.SetSliderPos(float(systemSetting.GetShadowLevel()) / 5.0)
  136. # self.ctrlShadowQuality.SetEvent(ui.__mem_func__(self.OnChangeShadowQuality))
  137.  
  138. self.changeMusicButton.SAFE_SetEvent(self.__OnClickChangeMusicButton)
  139.  
  140. self.cameraModeButtonList[0].SAFE_SetEvent(self.__OnClickCameraModeShortButton)
  141. self.cameraModeButtonList[1].SAFE_SetEvent(self.__OnClickCameraModeLongButton)
  142.  
  143. self.fogModeButtonList[0].SAFE_SetEvent(self.__OnClickFogModeLevel0Button)
  144. self.fogModeButtonList[1].SAFE_SetEvent(self.__OnClickFogModeLevel1Button)
  145. self.fogModeButtonList[2].SAFE_SetEvent(self.__OnClickFogModeLevel2Button)
  146.  
  147. self.tilingModeButtonList[0].SAFE_SetEvent(self.__OnClickTilingModeCPUButton)
  148. self.tilingModeButtonList[1].SAFE_SetEvent(self.__OnClickTilingModeGPUButton)
  149.  
  150. self.tilingApplyButton.SAFE_SetEvent(self.__OnClickTilingApplyButton)
  151.  
  152. self.__SetCurTilingMode()
  153.  
  154. self.__ClickRadioButton(self.fogModeButtonList, constInfo.GET_FOG_LEVEL_INDEX())
  155. self.__ClickRadioButton(self.cameraModeButtonList, constInfo.GET_CAMERA_MAX_DISTANCE_INDEX())
  156.  
  157. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  158. if self.language_select_button:
  159. self.language_select_button.SetEvent(ui.__mem_func__(self.__OnClickLanguageSelectButton))
  160. self.cur_language_text_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__OnClickLanguageSelectButton))
  161.  
  162. if self.language_change_button:
  163. self.language_change_button.SetEvent(ui.__mem_func__(self.__OnClickLanguageChangeButton))
  164.  
  165. self.mouse_over_image = self.GetChild("mouse_over_image")
  166. self.mouse_over_image.Hide()
  167.  
  168. if musicInfo.fieldMusic==musicInfo.METIN2THEMA:
  169. self.selectMusicFile.SetText(uiSelectMusic.DEFAULT_THEMA)
  170. else:
  171. self.selectMusicFile.SetText(musicInfo.fieldMusic[:MUSIC_FILENAME_MAX_LEN])
  172.  
  173. def __OnClickTilingModeCPUButton(self):
  174. self.__NotifyChatLine(locale.SYSTEM_OPTION_CPU_TILING_1)
  175. self.__NotifyChatLine(locale.SYSTEM_OPTION_CPU_TILING_2)
  176. self.__NotifyChatLine(locale.SYSTEM_OPTION_CPU_TILING_3)
  177. self.__SetTilingMode(0)
  178.  
  179. def __OnClickTilingModeGPUButton(self):
  180. self.__NotifyChatLine(locale.SYSTEM_OPTION_GPU_TILING_1)
  181. self.__NotifyChatLine(locale.SYSTEM_OPTION_GPU_TILING_2)
  182. self.__NotifyChatLine(locale.SYSTEM_OPTION_GPU_TILING_3)
  183. self.__SetTilingMode(1)
  184.  
  185. def __OnClickTilingApplyButton(self):
  186. self.__NotifyChatLine(locale.SYSTEM_OPTION_TILING_EXIT)
  187. if 0==self.tilingMode:
  188. background.EnableSoftwareTiling(1)
  189. else:
  190. background.EnableSoftwareTiling(0)
  191.  
  192. net.ExitGame()
  193.  
  194. def __OnClickChangeMusicButton(self):
  195. if not self.musicListDlg:
  196.  
  197. self.musicListDlg=uiSelectMusic.FileListDialog()
  198. self.musicListDlg.SAFE_SetSelectEvent(self.__OnChangeMusic)
  199.  
  200. self.musicListDlg.Open()
  201.  
  202.  
  203. def __ClickRadioButton(self, buttonList, buttonIndex):
  204. try:
  205. selButton=buttonList[buttonIndex]
  206. except IndexError:
  207. return
  208.  
  209. for eachButton in buttonList:
  210. eachButton.SetUp()
  211.  
  212. selButton.Down()
  213.  
  214.  
  215. def __SetTilingMode(self, index):
  216. self.__ClickRadioButton(self.tilingModeButtonList, index)
  217. self.tilingMode=index
  218.  
  219. def __SetCameraMode(self, index):
  220. constInfo.SET_CAMERA_MAX_DISTANCE_INDEX(index)
  221. self.__ClickRadioButton(self.cameraModeButtonList, index)
  222.  
  223. def __SetFogLevel(self, index):
  224. constInfo.SET_FOG_LEVEL_INDEX(index)
  225. self.__ClickRadioButton(self.fogModeButtonList, index)
  226.  
  227. def __OnClickCameraModeShortButton(self):
  228. self.__SetCameraMode(0)
  229.  
  230. def __OnClickCameraModeLongButton(self):
  231. self.__SetCameraMode(1)
  232.  
  233. def __OnClickFogModeLevel0Button(self):
  234. self.__SetFogLevel(0)
  235.  
  236. def __OnClickFogModeLevel1Button(self):
  237. self.__SetFogLevel(1)
  238.  
  239. def __OnClickFogModeLevel2Button(self):
  240. self.__SetFogLevel(2)
  241.  
  242. def __OnChangeMusic(self, fileName):
  243. self.selectMusicFile.SetText(fileName[:MUSIC_FILENAME_MAX_LEN])
  244.  
  245. if musicInfo.fieldMusic != "":
  246. snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic)
  247.  
  248. if fileName==uiSelectMusic.DEFAULT_THEMA:
  249. musicInfo.fieldMusic=musicInfo.METIN2THEMA
  250. else:
  251. musicInfo.fieldMusic=fileName
  252.  
  253. musicInfo.SaveLastPlayFieldMusic()
  254.  
  255. if musicInfo.fieldMusic != "":
  256. snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
  257.  
  258. def OnChangeMusicVolume(self):
  259. pos = self.ctrlMusicVolume.GetSliderPos()
  260. snd.SetMusicVolume(pos * net.GetFieldMusicVolume())
  261. systemSetting.SetMusicVolume(pos)
  262.  
  263. def OnChangeSoundVolume(self):
  264. pos = self.ctrlSoundVolume.GetSliderPos()
  265. snd.SetSoundVolumef(pos)
  266. systemSetting.SetSoundVolumef(pos)
  267.  
  268. def OnChangeShadowQuality(self):
  269. pos = self.ctrlShadowQuality.GetSliderPos()
  270. systemSetting.SetShadowLevel(int(pos / 0.2))
  271.  
  272. def OnCloseInputDialog(self):
  273. self.inputDialog.Close()
  274. self.inputDialog = None
  275. return TRUE
  276.  
  277. def OnCloseQuestionDialog(self):
  278. self.questionDialog.Close()
  279. self.questionDialog = None
  280. return TRUE
  281.  
  282. def OnPressEscapeKey(self):
  283. self.Close()
  284. return TRUE
  285.  
  286. def Show(self):
  287. ui.ScriptWindow.Show(self)
  288.  
  289. def Close(self):
  290. self.__SetCurTilingMode()
  291. self.Hide()
  292.  
  293. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  294. self.__LanguageSelectShowHide(FALSE)
  295.  
  296. def __SetCurTilingMode(self):
  297. if background.IsSoftwareTiling():
  298. self.__SetTilingMode(0)
  299. else:
  300. self.__SetTilingMode(1)
  301.  
  302. def __NotifyChatLine(self, text):
  303. chat.AppendChat(chat.CHAT_TYPE_INFO, text)
  304.  
  305. if app.ENABLE_MULTI_LANGUAGE_SYSTEM:
  306. """ Based on dumped meta data"""
  307. def LanguageChange(self):
  308. if self.selected_language != 0:
  309. locale = LOCALE_LANG_DICT[self.selected_language]["locale"]
  310. code_page = LOCALE_LANG_DICT[self.selected_language]["code_page"]
  311.  
  312. if self.__SaveLoca(code_page, locale):
  313. net.SendChangeLanguagePacket(self.selected_language)
  314. net.ExitApplication()
  315. os.system('start metin2client.exe')
  316. #net.ExitGame()
  317.  
  318. def __AdjustLanguageSelectWindowPosition(self):
  319. x, y = self.language_select_window_pos
  320.  
  321. (lx, ly) = self.language_change_window.GetLocalPosition()
  322. if self.language_select_window_bar:
  323. self.language_select_window_bar.SetPosition(x + lx + 30, y + ly + 36)
  324.  
  325. def __CreateLanguageSelectWindow(self):
  326. if self.language_button_dict:
  327. return
  328.  
  329. languageList = LOCALE_LANG_DICT
  330. if not LOCALE_LANG_DICT:
  331. return
  332.  
  333. self.cur_language_text.SetText(LOCALE_LANG_DICT[self.__GetCurLanguageKey()]["name"])
  334.  
  335. button_height = 16
  336. dict_len = len(languageList)
  337. self.language_select_window_height = dict_len * button_height
  338.  
  339. self.language_select_window_bar = ui.Bar("TOP_MOST")
  340. self.language_select_window_bar.SetSize(210, self.language_select_window_height)
  341. self.language_select_window_bar.Hide()
  342.  
  343. for index, key in enumerate(LOCALE_LANG_DICT):
  344. button = ui.Button()
  345. button.SetParent(self.language_select_window_bar)
  346. button.SetPosition(0, button_height * index)
  347.  
  348. if 1 == dict_len:
  349. button.SetUpVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  350. button.SetDownVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  351. button.SetOverVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  352. elif index == 0:
  353. button.SetUpVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  354. button.SetDownVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  355. button.SetOverVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  356. elif index == dict_len - 1:
  357. button.SetUpVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
  358. button.SetDownVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
  359. button.SetOverVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
  360. else:
  361. button.SetUpVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  362. button.SetDownVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  363. button.SetOverVisual("d:/ymir work/ui/quest_re/button_middle.sub")
  364.  
  365. button.SetEvent(ui.__mem_func__(self.__OnClickLanguageSelect), key)
  366. button.SetOverEvent(ui.__mem_func__(self.__OnClickLanguageButtonOver), key)
  367. button.SetOverOutEvent(ui.__mem_func__(self.__OnClickLanguageButtonOverOut), key)
  368. button.SetText(LOCALE_LANG_DICT[key]["name"])
  369. button.Hide()
  370.  
  371. self.language_button_dict[key] = button
  372.  
  373. self.mouse_over_image.SetParent(self.language_select_window_bar)
  374.  
  375. self.__AdjustLanguageSelectWindowPosition()
  376.  
  377. def __GetCurLanguageKey(self):
  378. for key in LOCALE_LANG_DICT.keys():
  379. localeName = LOCALE_LANG_DICT[key]["locale"]
  380. if app.GetLocaleName() == localeName:
  381. return key
  382.  
  383. def __GetStringCurLanguage(self):
  384. for key in LOCALE_LANG_DICT.keys():
  385. localeName = LOCALE_LANG_DICT[key]["locale"]
  386. if app.GetLocaleName() == localeName:
  387. return localeName
  388.  
  389. def __LanguageSelectShowHide(self, is_show):
  390. if TRUE == is_show:
  391. self.language_select_list_open = TRUE
  392.  
  393. if self.language_select_window_bar:
  394. self.language_select_window_bar.SetSize(210, self.language_select_window_height)
  395. self.language_select_window_bar.Show()
  396.  
  397. for button in self.language_button_dict.values():
  398. button.Show()
  399. else:
  400. self.language_select_list_open = FALSE
  401.  
  402. if self.language_select_window_bar:
  403. self.language_select_window_bar.SetSize(210, 0)
  404.  
  405. for button in self.language_button_dict.values():
  406. button.Hide()
  407.  
  408. def __OnClickLanguageButtonOver(self, index):
  409. if not self.mouse_over_image:
  410. return
  411.  
  412. button = self.language_button_dict.get(index, 0)
  413. if 0 == button:
  414. return
  415.  
  416. (button_x, button_y) = button.GetLocalPosition()
  417. self.mouse_over_image.SetPosition(button_x, button_y)
  418. self.mouse_over_image.Show()
  419.  
  420. def __OnClickLanguageButtonOverOut(self, index):
  421. if not self.mouse_over_image:
  422. return
  423.  
  424. self.mouse_over_image.Hide()
  425.  
  426. def __OnClickLanguageChangeButton(self):
  427. if self.__GetCurLanguageKey() == self.selected_language:
  428. return
  429.  
  430. self.LanguageChange()
  431.  
  432. def __OnClickLanguageSelect(self, index):
  433. for button in self.language_button_dict.values():
  434. button.Hide()
  435.  
  436. self.__LanguageSelectShowHide(FALSE)
  437.  
  438. self.selected_language = index
  439.  
  440. if self.cur_language_text:
  441. self.cur_language_text.SetText(LOCALE_LANG_DICT[index]["name"])
  442.  
  443. def __OnClickLanguageSelectButton(self):
  444. self.__CreateLanguageSelectWindow()
  445.  
  446. if self.language_select_list_open:
  447. self.__LanguageSelectShowHide(FALSE)
  448. else:
  449. self.__LanguageSelectShowHide(TRUE)
  450.  
  451. def __OnLanguageSelectScroll(self):
  452. pass # todo for > 5 languages
  453.  
  454. def __SaveLoca(self, code_page, locale):
  455. if app.SetLoca(code_page, locale):
  456. return TRUE
  457.  
  458. return FALSE
  459.  
  460. def OnTop(self):
  461. if self.language_select_window_bar:
  462. self.language_select_window_bar.SetTop()
  463.  
  464. def OnMoveWindow(self, x, y):
  465. self.language_select_window_pos = x, y
  466.  
  467. self.__AdjustLanguageSelectWindowPosition()
  468.  
Advertisement
Add Comment
Please, Sign In to add comment