Marty-v58/client/pack/root/uisystemoption.py
2024-10-25 00:07:46 -05:00

517 lines
16 KiB
Python

import dbg
import ui
import snd
import systemSetting
import net
import chat
import app
import localeInfo
import constInfo
import chrmgr
import player
import musicInfo
import uiSelectMusic
import background
if app.__BL_MULTI_LANGUAGE__:
import uiScriptLocale
MUSIC_FILENAME_MAX_LEN = 25
blockMode = 0
class OptionDialog(ui.ScriptWindow):
if app.__BL_MULTI_LANGUAGE__:
LANG_VIEW_COUNT = 5
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__Initialize()
if app.__BL_MULTI_LANGUAGE__:
self.__LoadLocaleListFile()
self.__Load()
def __del__(self):
ui.ScriptWindow.__del__(self)
print " -------------------------------------- DELETE SYSTEM OPTION DIALOG"
def __Initialize(self):
self.tilingMode = 0
self.titleBar = 0
self.changeMusicButton = 0
self.selectMusicFile = 0
self.ctrlMusicVolume = 0
self.ctrlSoundVolume = 0
self.musicListDlg = 0
if app.__BL_MULTI_LANGUAGE__:
self.language_list = []
self.language_button_list = []
self.language_select_is_open = False
self.selected_language_index = -1
self.scroll_bar = None
self.cur_language_text_window = None
self.cur_language_text = None
self.language_select_button = None
self.language_change_button = None
self.language_select_pivot_window = None
self.language_over_img = None
self.language_select_window = None
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
self.show_country_flag_button = None
self.show_empire_flag_button = None
self.anonymous_button = None
self.tilingApplyButton = 0
self.cameraModeButtonList = []
self.fogModeButtonList = []
self.tilingModeButtonList = []
self.ctrlShadowQuality = 0
@ui.WindowDestroy
def Destroy(self):
self.ClearDictionary()
self.__Initialize()
print " -------------------------------------- DESTROY SYSTEM OPTION DIALOG"
def __Load_LoadScript(self, fileName):
try:
pyScriptLoader = ui.PythonScriptLoader()
pyScriptLoader.LoadScriptFile(self, fileName)
except:
import exception
exception.Abort("System.OptionDialog.__Load_LoadScript")
def __Load_BindObject(self):
try:
GetObject = self.GetChild
self.titleBar = GetObject("titlebar")
self.selectMusicFile = GetObject("bgm_file")
self.changeMusicButton = GetObject("bgm_button")
self.ctrlMusicVolume = GetObject("music_volume_controller")
self.ctrlSoundVolume = GetObject("sound_volume_controller")
self.cameraModeButtonList.append(GetObject("camera_short"))
self.cameraModeButtonList.append(GetObject("camera_long"))
if app.__BL_MULTI_LANGUAGE__:
self.cur_language_text_window = GetObject("cur_language_text_window")
self.cur_language_text = GetObject("cur_language_text")
self.language_select_button = GetObject("language_select_button")
self.language_change_button = GetObject("language_change_button")
self.language_select_pivot_window = GetObject("language_select_pivot_window")
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
self.show_country_flag_button = GetObject("show_country_flag_button")
self.show_empire_flag_button = GetObject("show_empire_flag_button")
self.anonymous_button = GetObject("anonymous_button")
self.fogModeButtonList.append(GetObject("fog_level0"))
self.fogModeButtonList.append(GetObject("fog_level1"))
self.fogModeButtonList.append(GetObject("fog_level2"))
self.tilingModeButtonList.append(GetObject("tiling_cpu"))
self.tilingModeButtonList.append(GetObject("tiling_gpu"))
self.tilingApplyButton=GetObject("tiling_apply")
#self.ctrlShadowQuality = GetObject("shadow_bar")
except:
import exception
exception.Abort("OptionDialog.__Load_BindObject")
def __Load(self):
self.__Load_LoadScript("uiscript/systemoptiondialog.py")
self.__Load_BindObject()
self.SetCenterPosition()
if app.__BL_MULTI_LANGUAGE__:
self.__CreateLanguageSelectWindow()
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
self.ctrlMusicVolume.SetSliderPos(float(systemSetting.GetMusicVolume()))
self.ctrlMusicVolume.SetEvent(ui.__mem_func__(self.OnChangeMusicVolume))
self.ctrlSoundVolume.SetSliderPos(float(systemSetting.GetSoundVolume()) / 5.0)
self.ctrlSoundVolume.SetEvent(ui.__mem_func__(self.OnChangeSoundVolume))
# self.ctrlShadowQuality.SetSliderPos(float(systemSetting.GetShadowLevel()) / 5.0)
# self.ctrlShadowQuality.SetEvent(ui.__mem_func__(self.OnChangeShadowQuality))
self.changeMusicButton.SAFE_SetEvent(self.__OnClickChangeMusicButton)
self.cameraModeButtonList[0].SAFE_SetEvent(self.__OnClickCameraModeShortButton)
self.cameraModeButtonList[1].SAFE_SetEvent(self.__OnClickCameraModeLongButton)
self.fogModeButtonList[0].SAFE_SetEvent(self.__OnClickFogModeLevel0Button)
self.fogModeButtonList[1].SAFE_SetEvent(self.__OnClickFogModeLevel1Button)
self.fogModeButtonList[2].SAFE_SetEvent(self.__OnClickFogModeLevel2Button)
self.tilingModeButtonList[0].SAFE_SetEvent(self.__OnClickTilingModeCPUButton)
self.tilingModeButtonList[1].SAFE_SetEvent(self.__OnClickTilingModeGPUButton)
self.tilingApplyButton.SAFE_SetEvent(self.__OnClickTilingApplyButton)
self.__SetCurTilingMode()
self.__ClickRadioButton(self.fogModeButtonList, constInfo.GET_FOG_LEVEL_INDEX())
self.__ClickRadioButton(self.cameraModeButtonList, constInfo.GET_CAMERA_MAX_DISTANCE_INDEX())
if app.__BL_MULTI_LANGUAGE__:
self.language_select_button.SetEvent( ui.__mem_func__(self.__OnClickLanguageSelectButton) )
self.cur_language_text_window.SetOnMouseLeftButtonUpEvent( ui.__mem_func__(self.__OnClickLanguageSelectButton) )
self.language_change_button.SetEvent( ui.__mem_func__(self.__OnClickLanguageChangeButton) )
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
self.show_country_flag_button.SetToggleDownEvent(ui.__mem_func__(self.__EventShowFlags), "country")
self.show_country_flag_button.SetToggleUpEvent(ui.__mem_func__(self.__EventShowFlags), "country")
self.show_empire_flag_button.SetToggleDownEvent(ui.__mem_func__(self.__EventShowFlags), "empire")
self.show_empire_flag_button.SetToggleUpEvent(ui.__mem_func__(self.__EventShowFlags), "empire")
self.anonymous_button.SetEvent( ui.__mem_func__(self.__OnClickAnonymousButton) )
self.RefreshLanguageSettings()
if musicInfo.fieldMusic==musicInfo.METIN2THEMA:
self.selectMusicFile.SetText(uiSelectMusic.DEFAULT_THEMA)
else:
self.selectMusicFile.SetText(musicInfo.fieldMusic[:MUSIC_FILENAME_MAX_LEN])
def __OnClickTilingModeCPUButton(self):
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_CPU_TILING_1)
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_CPU_TILING_2)
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_CPU_TILING_3)
self.__SetTilingMode(0)
def __OnClickTilingModeGPUButton(self):
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_GPU_TILING_1)
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_GPU_TILING_2)
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_GPU_TILING_3)
self.__SetTilingMode(1)
def __OnClickTilingApplyButton(self):
self.__NotifyChatLine(localeInfo.SYSTEM_OPTION_TILING_EXIT)
if 0==self.tilingMode:
background.EnableSoftwareTiling(1)
else:
background.EnableSoftwareTiling(0)
net.ExitGame()
def __OnClickChangeMusicButton(self):
if not self.musicListDlg:
self.musicListDlg=uiSelectMusic.FileListDialog()
self.musicListDlg.SAFE_SetSelectEvent(self.__OnChangeMusic)
self.musicListDlg.Open()
def __ClickRadioButton(self, buttonList, buttonIndex):
try:
selButton=buttonList[buttonIndex]
except IndexError:
return
for eachButton in buttonList:
eachButton.SetUp()
selButton.Down()
def __SetTilingMode(self, index):
self.__ClickRadioButton(self.tilingModeButtonList, index)
self.tilingMode=index
def __SetCameraMode(self, index):
constInfo.SET_CAMERA_MAX_DISTANCE_INDEX(index)
self.__ClickRadioButton(self.cameraModeButtonList, index)
def __SetFogLevel(self, index):
constInfo.SET_FOG_LEVEL_INDEX(index)
self.__ClickRadioButton(self.fogModeButtonList, index)
def __OnClickCameraModeShortButton(self):
self.__SetCameraMode(0)
def __OnClickCameraModeLongButton(self):
self.__SetCameraMode(1)
def __OnClickFogModeLevel0Button(self):
self.__SetFogLevel(0)
def __OnClickFogModeLevel1Button(self):
self.__SetFogLevel(1)
def __OnClickFogModeLevel2Button(self):
self.__SetFogLevel(2)
def __OnChangeMusic(self, fileName):
self.selectMusicFile.SetText(fileName[:MUSIC_FILENAME_MAX_LEN])
if musicInfo.fieldMusic != "":
snd.FadeOutMusic("BGM/"+ musicInfo.fieldMusic)
if fileName==uiSelectMusic.DEFAULT_THEMA:
musicInfo.fieldMusic=musicInfo.METIN2THEMA
else:
musicInfo.fieldMusic=fileName
musicInfo.SaveLastPlayFieldMusic()
if musicInfo.fieldMusic != "":
snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)
def OnChangeMusicVolume(self):
pos = self.ctrlMusicVolume.GetSliderPos()
snd.SetMusicVolume(pos * net.GetFieldMusicVolume())
systemSetting.SetMusicVolume(pos)
def OnChangeSoundVolume(self):
pos = self.ctrlSoundVolume.GetSliderPos()
snd.SetSoundVolumef(pos)
systemSetting.SetSoundVolumef(pos)
def OnChangeShadowQuality(self):
pos = self.ctrlShadowQuality.GetSliderPos()
systemSetting.SetShadowLevel(int(pos / 0.2))
def OnCloseInputDialog(self):
self.inputDialog.Close()
self.inputDialog = None
return True
def OnCloseQuestionDialog(self):
self.questionDialog.Close()
self.questionDialog = None
return True
def OnPressEscapeKey(self):
self.Close()
return True
def Show(self):
ui.ScriptWindow.Show(self)
if app.__BL_MULTI_LANGUAGE__:
self.__LanguageSelectShowHide(False)
self.selected_language_index = -1
self.cur_language_text.SetText(self.__GetStringCurLanguage())
def Close(self):
self.__SetCurTilingMode()
self.Hide()
if app.__BL_MULTI_LANGUAGE__:
self.__LanguageSelectShowHide(False)
def __SetCurTilingMode(self):
if background.IsSoftwareTiling():
self.__SetTilingMode(0)
else:
self.__SetTilingMode(1)
def __NotifyChatLine(self, text):
chat.AppendChat(chat.CHAT_TYPE_INFO, text)
if app.__BL_MULTI_LANGUAGE__:
def OnTop(self):
if self.language_select_window:
self.language_select_window.SetTop()
def OnMoveWindow(self, x, y):
if self.language_select_window and self.language_select_pivot_window:
(x, y) = self.language_select_pivot_window.GetGlobalPosition()
self.language_select_window.SetPosition(x, y)
def __AdjustLanguageSelectWindowPosition(self):
pos = int(self.scroll_bar.GetPos() * self.Diff)
for i in xrange(len(self.language_button_list)) :
idx = i + pos
if idx >= len(self.language_list):
return
text = self.language_list[idx]["name"]
self.language_button_list[i].SetText(text)
self.language_button_list[i].SetEvent(ui.__mem_func__(self.__OnClickLanguageSelect), idx)
self.language_button_list[i].SetOverEvent(ui.__mem_func__(self.__OnClickLanguageButtonOver), i)
self.language_button_list[i].SetOverOutEvent(ui.__mem_func__(self.__OnClickLanguageButtonOverOut), i)
def __CreateLanguageSelectWindow(self):
self.language_select_window = ui.Window()
self.language_select_window.AddFlag("float")
self.language_select_window.SetSize(210, 80)
(x, y) = self.language_select_pivot_window.GetGlobalPosition()
self.language_select_window.SetPosition(x, y)
count = min(self.LANG_VIEW_COUNT, len(self.language_list))
for i in range(count):
btn = ui.Button()
btn.SetParent(self.language_select_window)
btn.SetPosition(0, i * 15)
if i == 0:
btn.SetUpVisual("d:/ymir work/ui/quest_re/button_top.sub")
btn.SetDownVisual("d:/ymir work/ui/quest_re/button_top.sub")
btn.SetOverVisual("d:/ymir work/ui/quest_re/button_top.sub")
elif i == (count - 1):
btn.SetUpVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
btn.SetDownVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
btn.SetOverVisual("d:/ymir work/ui/quest_re/button_bottom.sub")
else:
btn.SetUpVisual("d:/ymir work/ui/quest_re/button_middle.sub")
btn.SetDownVisual("d:/ymir work/ui/quest_re/button_middle.sub")
btn.SetOverVisual("d:/ymir work/ui/quest_re/button_middle.sub")
btn.Show()
self.language_button_list.append(btn)
self.language_over_img = ui.ImageBox()
self.language_over_img.LoadImage("d:/ymir work/ui/quest_re/button_over.sub")
self.language_over_img.SetParent(self.language_select_window)
self.language_over_img.AddFlag("not_pick")
self.scroll_bar = ui.ScrollBar()
self.scroll_bar.SetParent(self.language_select_window)
self.scroll_bar.AddFlag("float")
self.scroll_bar.SetPosition(195, 0)
self.scroll_bar.SetScrollBarSize(75)
self.scroll_bar.SetScrollEvent(ui.__mem_func__(self.__OnLanguageSelectScroll))
self.Diff = len(self.language_list) - self.LANG_VIEW_COUNT
stepSize = 1.0 / self.Diff
self.scroll_bar.SetScrollStep( stepSize )
self.__AdjustLanguageSelectWindowPosition()
def __LanguageSelectShowHide(self, is_show):
self.language_select_is_open = is_show
if True == is_show:
self.language_select_window.Show()
if self.LANG_VIEW_COUNT < len(self.language_list):
self.scroll_bar.SetPos(0.0)
self.scroll_bar.Show()
else:
self.scroll_bar.Hide()
else:
self.language_select_window.Hide()
self.scroll_bar.Hide()
def __LoadLocaleListFile(self):
try:
with open("locale_list.txt", "rt") as file:
lines = file.readlines()
except:
import dbg
dbg.LogBox("__LoadLocaleListFile error locale_list.txt")
app.Abort()
lineIndex = 1
for line in lines:
try:
tokens = line[:-1].split(" ")
if len(tokens) == 3:
name = tokens[0]
code_page = tokens[1]
locale = tokens[2]
if locale in uiScriptLocale.LOCALE_NAME_DICT:
name = uiScriptLocale.LOCALE_NAME_DICT[locale]
self.language_list.append({"name" : name, "code_page" : code_page, "locale" : locale})
else:
raise RuntimeError, "Unknown TokenSize"
lineIndex += 1
except:
import dbg
dbg.LogBox("%s: line(%d): %s" % ("locale_list.txt", lineIndex, line), "Error")
raise
def __OnClickLanguageButtonOver(self, index):
if index >= len(self.language_button_list):
return
btn = self.language_button_list[index]
(x, y) = btn.GetLocalPosition()
self.language_over_img.SetPosition(x, y)
self.language_over_img.Show()
def __OnClickLanguageButtonOverOut(self, index):
self.language_over_img.Hide()
def __OnClickLanguageChangeButton(self):
if self.__GetStringCurLanguage() == self.cur_language_text.GetText():
return
net.SendChatPacket("/language_change")
def __OnClickLanguageSelect(self, index):
if index >= len(self.language_list):
return
self.__LanguageSelectShowHide( False )
self.selected_language_index = index
if self.cur_language_text:
self.cur_language_text.SetText( self.language_list[index]["name"] )
def __OnClickLanguageSelectButton(self):
self.__LanguageSelectShowHide( not self.language_select_is_open )
def __OnLanguageSelectScroll(self):
self.__AdjustLanguageSelectWindowPosition()
def __SaveLoca(self, code_page, locale):
try:
with open("loca.cfg", "wt") as file:
file.write("{} {}".format(code_page, locale))
except:
import dbg
dbg.LogBox("__SaveLoca error")
app.Abort()
def __GetStringCurLanguage(self):
cur_locale = app.GetLocaleName()
for lang in self.language_list:
if lang["locale"] == cur_locale:
return lang["name"]
return "-"
def LanguageChange(self):
if self.selected_language_index == -1:
return
if self.selected_language_index >= len(self.language_list):
return
lang = self.language_list[self.selected_language_index]
self.__SaveLoca(lang["code_page"], lang["locale"])
app.SetReloadLocale(True)
if app.__BL_MULTI_LANGUAGE_ULTIMATE__:
def __EventShowFlags(self, type):
if type == "country":
systemSetting.SetShowCountryFlag(not systemSetting.IsShowCountryFlag())
elif type == "empire":
systemSetting.SetShowEmpireFlag(not systemSetting.IsShowEmpireFlag())
self.RefreshLanguageSettings()
def __OnClickAnonymousButton(self):
net.SendChatPacket("/language_anonymous")
def LanguageChangeAnonymous(self):
systemSetting.SetAnonymousCountryMode(not systemSetting.GetAnonymousCountryMode())
self.RefreshLanguageSettings()
def RefreshLanguageSettings(self):
if systemSetting.IsShowCountryFlag():
self.show_country_flag_button.Down()
else:
self.show_country_flag_button.SetUp()
if systemSetting.IsShowEmpireFlag():
self.show_empire_flag_button.Down()
else:
self.show_empire_flag_button.SetUp()
if systemSetting.GetAnonymousCountryMode():
self.anonymous_button.SetText(uiScriptLocale.LANGUAGE_SETTINGS_ANON_OFF)
else:
self.anonymous_button.SetText(uiScriptLocale.LANGUAGE_SETTINGS_ANON_ON)