Initial version - 1.2.0.60

EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
This commit is contained in:
SL1900
2025-12-03 01:00:00 +09:00
commit 5e0d58cfad
3595 changed files with 9373562 additions and 0 deletions
+208
View File
@@ -0,0 +1,208 @@
local BattleSettingsCtrl = class("BattleSettingsCtrl", BaseCtrl)
local ClientManager = CS.ClientManager.Instance
local InputManager = CS.InputManager
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
BattleSettingsCtrl._mapNodeConfig = {
txtWeekDay = {sComponentName = "TMP_Text"},
txtTime1 = {sComponentName = "TMP_Text"},
txtTime2 = {sComponentName = "TMP_Text"},
aniRoot = {
sNodeName = "----Content----",
sComponentName = "Animator"
},
btnClose = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
Page2 = {
sCtrlName = "Game.UI.Settings.SettingsGraphicCtrl"
},
Page3 = {
sCtrlName = "Game.UI.Settings.SettingsSoundCtrl"
},
Page4 = {
sCtrlName = "Game.UI.Settings.SettingsBattleCtrl"
},
Page7 = {
sCtrlName = "Game.UI.Settings.SettingsKeyboardCtrl"
},
Page8 = {
sCtrlName = "Game.UI.Settings.SettingsGamepadCtrl"
},
cgPage = {
nCount = 8,
sNodeName = "Page",
sComponentName = "CanvasGroup"
},
trPage = {
nCount = 8,
sNodeName = "Page",
sComponentName = "Transform"
},
btnPage = {
nCount = 8,
sComponentName = "UIButton",
callback = "OnBtnClick_Page"
},
imgOn = {nCount = 8},
aniTab = {sNodeName = "---Tab---", sComponentName = "Animator"},
scTab = {
sNodeName = "scrollTab",
sComponentName = "UIScrollToClick"
},
blurbg = {
sNodeName = "t_fullscreen_blur_blue_bg"
},
aniBlurbg = {
sNodeName = "t_fullscreen_blur_blue_bg",
sComponentName = "Animator"
},
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_ClosePop"
},
ActionBar = {
sCtrlName = "Game.UI.ActionBar.ActionBarCtrl"
},
btnShortcutClose = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Close"
},
Resolution = {
sNodeName = "---Resolution---",
sCtrlName = "Game.UI.Settings.SettingsResolutionCtrl"
}
}
BattleSettingsCtrl._mapEventConfig = {
SettingsResolution = "OnEvent_Resolution",
SettingsClosePop = "OnBtnClick_ClosePop"
}
function BattleSettingsCtrl:InitPageState()
local nState = ConfigTable.GetConfigNumber("CBTBlock")
self.pageIndex = 2
for i = 1, 8 do
if i == self.pageIndex then
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], true)
self._mapNode.imgOn[i]:SetActive(true)
self._mapNode["Page" .. i]:Init()
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], false)
self._mapNode.imgOn[i]:SetActive(false)
end
end
local bMobile = NovaAPI.IsMobilePlatform()
self._mapNode.btnPage[7].gameObject:SetActive(not bMobile)
if bMobile then
local bAble = false
self._mapNode.btnPage[8].gameObject:SetActive(bAble)
self._mapNode.btnPage[4].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(bAble)
else
self._mapNode.btnPage[8].gameObject:SetActive(true)
self._mapNode.btnPage[4].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(true)
end
self._mapNode.txtTime1.gameObject:SetActive(false)
self._mapNode.txtTime2.gameObject:SetActive(false)
self._mapNode.txtWeekDay.gameObject:SetActive(false)
end
function BattleSettingsCtrl:RefreshTime()
local curTime = ClientManager.serverTimeStamp
NovaAPI.SetTMPText(self._mapNode.txtTime1, (os.date("%I:%M", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtTime2, (os.date("%p", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtWeekDay, ConfigTable.GetUIText("Settings_Weekday" .. tonumber(os.date("%w")) + 1))
end
function BattleSettingsCtrl:Awake()
local tbConfig = {
{
sAction = "Back",
sLang = "ActionBar_Back"
}
}
self._mapNode.ActionBar:InitActionBar(tbConfig)
end
function BattleSettingsCtrl:OnEnable()
self._mapNode.blurbg:SetActive(true)
self._mapNode.aniRoot:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:InitPageState()
GamepadUIManager.EnableGamepadUI("BattleSettingsCtrl", self:GetGamepadUINode(), nil, true)
end
function BattleSettingsCtrl:OnDisable()
local nUID = PlayerData.Base:GetPlayerId()
CS.InputManager.Instance:SaveBindingOverrides(nUID)
EventManager.Hit("BattleSettingsBindingOverride")
GamepadUIManager.DisableGamepadUI("BattleSettingsCtrl")
end
function BattleSettingsCtrl:OnDestroy()
end
function BattleSettingsCtrl:OnBtnClick_Close()
self._mapNode.aniRoot:Play("t_window_04_t_out")
self._mapNode.aniBlurbg:SetTrigger("tOut")
self:AddTimer(1, 0.2, function()
EventManager.Hit(EventId.ClosePanel, PanelId.BattleSettings)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function BattleSettingsCtrl:OnBtnClick_Page(btn, index)
if self.pageIndex == index then
return
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[self.pageIndex], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[self.pageIndex], false)
self._mapNode.imgOn[self.pageIndex]:SetActive(false)
self._mapNode["Page" .. self.pageIndex]:Quit()
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[index], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[index], true)
self._mapNode.imgOn[index]:SetActive(true)
self._mapNode["Page" .. index]:Init()
self._mapNode.aniTab:Play("Tab_btnPage" .. index)
self.pageIndex = index
self._mapNode.scTab:ScrollToClick(btn.gameObject, 0.1)
local scrollRect = self._mapNode.trPage[index]:Find("sv"):GetComponent("ScrollRect")
NovaAPI.SetVerticalNormalizedPosition(scrollRect, 1)
end
function BattleSettingsCtrl:OnBtnClick_ClosePop()
if self.ctrlPop then
self.ctrlPop:PlayOutAni()
self.ctrlPop = nil
end
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, function()
self._mapNode.blur:SetActive(false)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function BattleSettingsCtrl:OnEvent_Resolution(nResolution, tbResolution)
self.ctrlPop = self._mapNode.Resolution
self._mapNode.Resolution:Open(nResolution, tbResolution)
self._mapNode.blur:SetActive(true)
end
function BattleSettingsCtrl:OnEvent_DeviceChange(changeType)
if not NovaAPI.IsMobilePlatform() then
return
end
if changeType.value__ == 0 then
local nType = InputManager.Instance:CheckGamepadType()
if nType == InputManager.GamepadType.PS or nType == InputManager.GamepadType.XBox then
self._mapNode.btnPage[8].gameObject:SetActive(true)
self._mapNode.btnPage[4].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(true)
end
elseif changeType.value__ == 1 then
self._mapNode.btnPage[8].gameObject:SetActive(false)
self._mapNode.btnPage[4].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(false)
if self.pageIndex == 8 then
self:OnBtnClick_Page(self._mapNode.btnPage[3], 3)
end
end
end
return BattleSettingsCtrl
@@ -0,0 +1,43 @@
local BattleSettingsPanel = class("BattleSettingsPanel", BasePanel)
BattleSettingsPanel._bIsMainPanel = false
local LocalSettingData = require("GameCore.Data.LocalSettingData")
BattleSettingsPanel._tbDefine = {
{
sPrefabPath = "Settings/BattleSettingsPanel.prefab",
sCtrlName = "Game.UI.Settings.BattleSettingsCtrl"
}
}
function BattleSettingsPanel:LoadLocalData(key)
return LocalSettingData.GetLocalSettingData(key)
end
function BattleSettingsPanel:SaveLocalData(subKey, value)
LocalSettingData.SetLocalSettingData(subKey, value)
end
function BattleSettingsPanel:Awake()
self.mapKeyboardBind = {}
self.mapGamepadBind = {}
self.Action = {
"Fire1",
"Fire2",
"Fire4",
"Interactive",
"ActorSwitch1",
"ActorSwitch2",
"SwitchWithUltra1",
"SwitchWithUltra2"
}
self.Move = {
"Up",
"Down",
"Left",
"Right"
}
self.ControlType = {Gamepad = 0, Keyboard = 1}
end
function BattleSettingsPanel:OnEnable()
end
function BattleSettingsPanel:OnDisable()
end
function BattleSettingsPanel:OnDestroy()
end
return BattleSettingsPanel
+160
View File
@@ -0,0 +1,160 @@
local LoginSettingsCtrl = class("LoginSettingsCtrl", BaseCtrl)
local UIGameSystemSetup = CS.UIGameSystemSetup
local ClientManager = CS.ClientManager.Instance
local InputManager = CS.InputManager
LoginSettingsCtrl._mapNodeConfig = {
txtWeekDay = {sComponentName = "TMP_Text"},
txtTime1 = {sComponentName = "TMP_Text"},
txtTime2 = {sComponentName = "TMP_Text"},
aniRoot = {
sNodeName = "----Content----",
sComponentName = "Animator"
},
btnClose = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
Page1 = {
sCtrlName = "Game.UI.Settings.SettingsAcountCtrl"
},
Page2 = {
sCtrlName = "Game.UI.Settings.SettingsGraphicCtrl"
},
Page3 = {
sCtrlName = "Game.UI.Settings.SettingsSoundCtrl"
},
Page5 = {
sCtrlName = "Game.UI.Settings.SettingsLanguageCtrl"
},
cgPage = {
nCount = 5,
sNodeName = "Page",
sComponentName = "CanvasGroup"
},
trPage = {
nCount = 5,
sNodeName = "Page",
sComponentName = "Transform"
},
btnPage = {
nCount = 5,
sComponentName = "UIButton",
callback = "OnBtnClick_Page"
},
imgOn = {nCount = 5},
aniTab = {sNodeName = "---Tab---", sComponentName = "Animator"},
scTab = {
sNodeName = "scrollTab",
sComponentName = "UIScrollToClick"
},
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_ClosePop"
},
Language = {
sNodeName = "---Language---",
sCtrlName = "Game.UI.Settings.SettingsLangPkgCtrl"
},
Resolution = {
sNodeName = "---Resolution---",
sCtrlName = "Game.UI.Settings.SettingsResolutionCtrl"
}
}
LoginSettingsCtrl._mapEventConfig = {
SettingsLanguage = "OnEvent_Language",
SettingsResolution = "OnEvent_Resolution",
SettingsClosePop = "OnBtnClick_ClosePop"
}
function LoginSettingsCtrl:InitPageState()
self.pageIndex = 1
for i = 1, 5 do
if i == 1 then
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], true)
self._mapNode.imgOn[i]:SetActive(true)
self._mapNode["Page" .. i]:Init()
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], false)
self._mapNode.imgOn[i]:SetActive(false)
end
end
self._mapNode.txtTime1.gameObject:SetActive(false)
self._mapNode.txtTime2.gameObject:SetActive(false)
self._mapNode.txtWeekDay.gameObject:SetActive(false)
end
function LoginSettingsCtrl:RefreshTime()
local curTime = os.time()
NovaAPI.SetTMPText(self._mapNode.txtTime1, (os.date("%I:%M", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtTime2, (os.date("%p", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtWeekDay, ConfigTable.GetUIText("Settings_Weekday" .. tonumber(os.date("%w")) + 1))
end
function LoginSettingsCtrl:Awake()
end
function LoginSettingsCtrl:OnEnable()
self._mapNode.aniRoot:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:InitPageState()
end
function LoginSettingsCtrl:OnDisable()
local nUID = PlayerData.Base:GetPlayerId()
CS.InputManager.Instance:SaveBindingOverrides(nUID)
end
function LoginSettingsCtrl:OnDestroy()
end
function LoginSettingsCtrl:OnBtnClick_Close()
self._mapNode.aniRoot:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, function()
EventManager.Hit(EventId.ClosePanel, PanelId.LoginSetting)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function LoginSettingsCtrl:OnBtnClick_Page(btn, index)
if self.pageIndex == index then
return
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[self.pageIndex], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[self.pageIndex], false)
self._mapNode.imgOn[self.pageIndex]:SetActive(false)
self._mapNode["Page" .. self.pageIndex]:Quit()
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[index], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[index], true)
self._mapNode.imgOn[index]:SetActive(true)
self._mapNode["Page" .. index]:Init()
self._mapNode.aniTab:Play("Tab_btnPage" .. index)
self.pageIndex = index
self._mapNode.scTab:ScrollToClick(btn.gameObject, 0.1)
local scrollRect = self._mapNode.trPage[index]:Find("sv"):GetComponent("ScrollRect")
NovaAPI.SetVerticalNormalizedPosition(scrollRect, 1)
end
function LoginSettingsCtrl:OnBtnClick_ClosePop()
if self.ctrlPop then
self.ctrlPop:PlayOutAni()
self.ctrlPop = nil
end
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, function()
self._mapNode.blur:SetActive(false)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function LoginSettingsCtrl:OnEvent_Language(tbVoAvailable, tbDownload)
self.ctrlPop = self._mapNode.Language
self._mapNode.Language:Open(tbVoAvailable, tbDownload)
self._mapNode.blur:SetActive(true)
end
function LoginSettingsCtrl:OnEvent_Resolution(nResolution, tbResolution)
self.ctrlPop = self._mapNode.Resolution
self._mapNode.Resolution:Open(nResolution, tbResolution)
self._mapNode.blur:SetActive(true)
end
return LoginSettingsCtrl
@@ -0,0 +1,46 @@
local LoginSettingsPanel = class("LoginSettingsPanel", BasePanel)
LoginSettingsPanel._bAddToBackHistory = false
LoginSettingsPanel._nSnapshotPrePanel = 1
LoginSettingsPanel._bIsMainPanel = false
local LocalSettingData = require("GameCore.Data.LocalSettingData")
LoginSettingsPanel._tbDefine = {
{
sPrefabPath = "Settings/LoginSettingsPanel.prefab",
sCtrlName = "Game.UI.Settings.LoginSettingsCtrl"
}
}
function LoginSettingsPanel:LoadLocalData(key)
return LocalSettingData.GetLocalSettingData(key)
end
function LoginSettingsPanel:SaveLocalData(subKey, value)
LocalSettingData.SetLocalSettingData(subKey, value)
end
function LoginSettingsPanel:Awake()
self.mapKeyboardBind = {}
self.mapGamepadBind = {}
self.Action = {
"Fire1",
"Fire2",
"Fire4",
"Interactive",
"ActorSwitch1",
"ActorSwitch2",
"SwitchWithUltra1",
"SwitchWithUltra2"
}
self.Move = {
"Up",
"Down",
"Left",
"Right"
}
self.ControlType = {Gamepad = 0, Keyboard = 1}
self.ShowUserCenter = false
end
function LoginSettingsPanel:OnEnable()
end
function LoginSettingsPanel:OnDisable()
end
function LoginSettingsPanel:OnDestroy()
end
return LoginSettingsPanel
+284
View File
@@ -0,0 +1,284 @@
local OptionBindingCtrl = class("OptionBindingCtrl", BaseCtrl)
local InputManager = CS.InputManager
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local BasicDevice = {
Keyboard = 1,
Mouse = 2,
Gamepad = 3
}
local ImageKey = {backspace = 1, enter = 2}
local IllegalKeyboardKey = {
"Caps Lock",
"Left Windows",
"Right Windows",
"Prnt Scrn",
"Scroll Lock",
"Break",
"Num Lock",
"Alt",
"Left Alt",
"Right Alt",
"Esc",
"Application",
"B"
}
local LegalGamepadKey = {
"buttonSouth",
"buttonWest",
"buttonEast",
"buttonNorth",
"leftShoulder",
"rightShoulder",
"leftTrigger",
"rightTrigger"
}
OptionBindingCtrl._mapNodeConfig = {
txtOptionTitle = {sComponentName = "TMP_Text"},
btnBind = {
sComponentName = "UIButton",
callback = "OnBtnClick_Bind"
},
Placeholder = {},
goBind = {},
bindBg = {},
holderBg = {},
Keyboard = {},
goKey = {},
imgKeyboard = {sComponentName = "Image"},
txtKeyboard = {sComponentName = "TMP_Text"},
Mouse = {},
imgMouse = {sComponentName = "Image"},
Gamepad = {},
imgGamepad = {sComponentName = "Image"}
}
OptionBindingCtrl._mapEventConfig = {
LuaEventName_KeyboardButtonPress = "OnEvent_KeyboardButtonPress",
LuaEventName_MouseButtonPress = "OnEvent_MouseButtonPress",
LuaEventName_GamepadButtonPress = "OnEvent_GamepadButtonPress",
SettingsSwitchBind = "OnEvent_SwitchBind"
}
function OptionBindingCtrl:SetText(sTitle)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
end
function OptionBindingCtrl:Init(nType, sAction, sName, sDisplayName, bPS)
self.bActiveBinding = false
self.nDeviceType = nType
self.sAction = sAction
self.sName = sName
self.sDisplayName = sDisplayName
self.bPS = bPS
self:SwitchState(false)
self:RefreshButton()
end
function OptionBindingCtrl:SwitchState(bholder)
self._mapNode.Placeholder:SetActive(bholder)
self._mapNode.holderBg:SetActive(bholder)
self._mapNode.goBind:SetActive(not bholder)
self._mapNode.bindBg:SetActive(not bholder)
end
function OptionBindingCtrl:ChangeGamepad(bPS)
self.bPS = bPS
if self.bActiveBinding then
return
end
self:RefreshButton()
end
function OptionBindingCtrl:RefreshButton()
self._mapNode.Keyboard:SetActive(self.nDeviceType == BasicDevice.Keyboard)
self._mapNode.Mouse:SetActive(self.nDeviceType == BasicDevice.Mouse)
self._mapNode.Gamepad:SetActive(self.nDeviceType == BasicDevice.Gamepad)
if self.nDeviceType == BasicDevice.Keyboard then
if ImageKey[self.sName] then
self._mapNode.imgKeyboard.gameObject:SetActive(true)
self._mapNode.goKey:SetActive(false)
local sIcon = ConfigTable.GetField("GamepadButton", self.sName, "XboxIcon")
self:SetPngSprite(self._mapNode.imgKeyboard, sIcon)
NovaAPI.SetImageNativeSize(self._mapNode.imgKeyboard)
else
self._mapNode.imgKeyboard.gameObject:SetActive(false)
self._mapNode.goKey:SetActive(true)
local sName = GamepadUIManager.GetInputName({
name = self.sName,
displayName = self.sDisplayName
})
NovaAPI.SetTMPText(self._mapNode.txtKeyboard, sName)
end
elseif self.nDeviceType == BasicDevice.Mouse then
local sIcon = ConfigTable.GetField("GamepadButton", self.sName, "XboxIcon")
self:SetPngSprite(self._mapNode.imgMouse, sIcon)
elseif self.nDeviceType == BasicDevice.Gamepad then
local sIcon
if self.bPS then
sIcon = ConfigTable.GetField("GamepadButton", self.sName, "PlayStationIcon")
else
sIcon = ConfigTable.GetField("GamepadButton", self.sName, "XboxIcon")
end
self:SetPngSprite(self._mapNode.imgGamepad, sIcon)
end
end
function OptionBindingCtrl:OpenDeviceWarning()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Tip_IllegalDevice"))
self:QuitBinding()
end
function OptionBindingCtrl:OpenKeyWarning()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Tip_IllegalInput"))
self:QuitBinding()
end
function OptionBindingCtrl:OpenConflictWarning(sBeforeAction, inputInfo, nType)
local sActionName = ConfigTable.GetUIText("Action_" .. sBeforeAction)
local sTip = ConfigTable.GetUIText("Settings_Tip_ConflictInput") or ""
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(sTip, sActionName),
callbackConfirm = function()
EventManager.Hit("SettingsSwitchBind", self.nDeviceType, inputInfo, {
name = self.sName,
displayName = self.sDisplayName
})
self:SwitchState(false)
self.nDeviceType = nType
self.sName = inputInfo.name
self.sDisplayName = inputInfo.displayName
self:UpdateBindConfig(inputInfo, nType)
self:RefreshButton()
end,
callbackCancel = function()
self:SwitchState(false)
end,
bBlur = false
}
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self.bActiveBinding = false
EventManager.Hit(EventId.BlockInput, false)
InputManager.Instance.IsVirtualMouseEnabled = true
EventManager.Hit(EventId.OpenMessageBox, msg)
end
cs_coroutine.start(wait)
end
function OptionBindingCtrl:OnBindingSuccess(inputInfo, nType)
self.nDeviceType = nType
self.sName = inputInfo.name
self.sDisplayName = inputInfo.displayName
self:UpdateBindConfig(inputInfo, nType)
self:RefreshButton()
self:QuitBinding()
end
function OptionBindingCtrl:UpdateBindConfig(inputInfo, nType)
if nType == BasicDevice.Gamepad then
self._panel.mapGamepadBind[self.sAction] = inputInfo.name
EventManager.Hit("SettingsRefreshDisplay", self.sAction, inputInfo.name)
else
self._panel.mapKeyboardBind[self.sAction] = {
name = inputInfo.name,
displayName = inputInfo.displayName
}
end
end
function OptionBindingCtrl:QuitBinding()
self.bActiveBinding = false
self:SwitchState(false)
InputManager.Instance.IsVirtualMouseEnabled = true
self._mapNode.btnBind.interactable = false
self:AddTimer(1, 0.4, function()
self._mapNode.btnBind.interactable = true
EventManager.Hit(EventId.BlockInput, false)
end, true, true, true)
end
function OptionBindingCtrl:OnBtnClick_Bind()
self.bActiveBinding = true
self:SwitchState(true)
EventManager.Hit(EventId.BlockInput, true)
InputManager.Instance.IsVirtualMouseEnabled = false
end
function OptionBindingCtrl:OnEvent_KeyboardButtonPress(inputInfo)
if not self.bActiveBinding then
return
end
if self.nDeviceType == BasicDevice.Gamepad then
self:OpenDeviceWarning()
return
end
if table.indexof(IllegalKeyboardKey, inputInfo.displayName) ~= 0 then
self:OpenKeyWarning()
return
end
if inputInfo.name == self.sName then
self:QuitBinding()
return
end
local sBeforeAction
for k, v in pairs(self._panel.mapKeyboardBind) do
if v.name == inputInfo.name then
sBeforeAction = k
end
end
if sBeforeAction then
self:OpenConflictWarning(sBeforeAction, inputInfo, BasicDevice.Keyboard)
return
end
self:OnBindingSuccess(inputInfo, BasicDevice.Keyboard)
end
function OptionBindingCtrl:OnEvent_MouseButtonPress(inputInfo)
if not self.bActiveBinding then
return
end
if self.nDeviceType == BasicDevice.Gamepad then
self:OpenDeviceWarning()
return
end
if inputInfo.name == self.sName then
self:QuitBinding()
return
end
local sBeforeAction
for k, v in pairs(self._panel.mapKeyboardBind) do
if v.name == inputInfo.name then
sBeforeAction = k
end
end
if sBeforeAction then
self:OpenConflictWarning(sBeforeAction, inputInfo, BasicDevice.Mouse)
return
end
self:OnBindingSuccess(inputInfo, BasicDevice.Mouse)
end
function OptionBindingCtrl:OnEvent_GamepadButtonPress(inputInfo)
if not self.bActiveBinding then
return
end
if self.nDeviceType ~= BasicDevice.Gamepad then
self:OpenDeviceWarning()
return
end
if inputInfo.name == "leftTriggerButton" then
inputInfo.name = "leftTrigger"
elseif inputInfo.name == "rightTriggerButton" then
inputInfo.name = "rightTrigger"
end
if table.indexof(LegalGamepadKey, inputInfo.name) == 0 then
self:OpenKeyWarning()
return
end
if inputInfo.name == self.sName then
self:QuitBinding()
return
end
local sBeforeAction = table.keyof(self._panel.mapGamepadBind, inputInfo.name)
if sBeforeAction then
self:OpenConflictWarning(sBeforeAction, inputInfo, BasicDevice.Gamepad)
return
end
self:OnBindingSuccess(inputInfo, BasicDevice.Gamepad)
end
function OptionBindingCtrl:OnEvent_SwitchBind(nType, inputInfoBefore, inputInfo)
if not self.sName or self.sName ~= inputInfoBefore.name then
return
end
self.nDeviceType = nType
self.sName = inputInfo.name
self.sDisplayName = inputInfo.displayName
self:UpdateBindConfig(inputInfo, nType)
self:RefreshButton()
end
return OptionBindingCtrl
+62
View File
@@ -0,0 +1,62 @@
local OptionChooseCtrl = class("OptionChooseCtrl", BaseCtrl)
OptionChooseCtrl._mapNodeConfig = {
btnChoose = {
nCount = 3,
sComponentName = "UIButton",
callback = "OnBtnClick_Choose"
},
txtChoose = {nCount = 3, sComponentName = "TMP_Text"},
Checkmark = {nCount = 3, sComponentName = "Animator"},
Mask = {nCount = 3},
Choose = {nCount = 3},
txtOptionTitle = {sComponentName = "TMP_Text"}
}
OptionChooseCtrl._mapEventConfig = {}
function OptionChooseCtrl:SetText(s1, s2, s3, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtChoose[1], s1)
NovaAPI.SetTMPText(self._mapNode.txtChoose[2], s2)
NovaAPI.SetTMPText(self._mapNode.txtChoose[3], s3)
end
function OptionChooseCtrl:Init(callback, nIndex, nCount)
self.nIndex = nIndex
self.callback = callback
if nCount == nil then
nCount = 3
end
for i = 1, 3 do
if i > nCount then
self._mapNode.Choose[i].gameObject:SetActive(false)
else
self._mapNode.Choose[i].gameObject:SetActive(true)
if i == self.nIndex then
self._mapNode.Checkmark[i]:Play("checkmark_in", -1, 1)
else
self._mapNode.Checkmark[i]:Play("checkmark_out", -1, 1)
end
end
end
end
function OptionChooseCtrl:SetGray(tbGrayIndex, sTip)
self.tbGrayIndex = tbGrayIndex
self.sTip = sTip
for i = 1, 3 do
self._mapNode.Mask[i]:SetActive(tbGrayIndex and tbGrayIndex[i])
end
end
function OptionChooseCtrl:Awake()
end
function OptionChooseCtrl:OnBtnClick_Choose(btn, index)
if self.nIndex == index then
return
end
if self.tbGrayIndex and self.tbGrayIndex[index] then
EventManager.Hit(EventId.OpenMessageBox, self.sTip or "")
return
end
self._mapNode.Checkmark[self.nIndex]:SetTrigger("PlayCheckmarkHide")
self._mapNode.Checkmark[index]:SetTrigger("PlayCheckmarkShow")
self.nIndex = index
self.callback(self.nIndex)
end
return OptionChooseCtrl
@@ -0,0 +1,89 @@
local OptionDynamicCtrl = class("OptionDynamicCtrl", BaseCtrl)
OptionDynamicCtrl._mapNodeConfig = {
Choose = {},
trChoose = {sComponentName = "Transform"},
txtOptionTitle = {sComponentName = "TMP_Text"}
}
OptionDynamicCtrl._mapEventConfig = {}
function OptionDynamicCtrl:SetText(sTitle, tbChoose)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
for i = 1, self.nCount do
NovaAPI.SetTMPText(self.txtChoose[i], tbChoose[i])
end
end
function OptionDynamicCtrl:Init(callback, nIndex, nCount, sConfirm, bIsVoLan)
self.nIndex = nIndex
self.callback = callback
self.nCount = nCount
self.sConfirm = sConfirm
self.txtChoose = {}
self.Checkmark = {}
self.Mask = {}
self.bIsVoLan = bIsVoLan == true
delChildren(self._mapNode.trChoose)
for i = 1, nCount do
local goItemObj = instantiate(self._mapNode.Choose, self._mapNode.trChoose)
goItemObj:SetActive(true)
local txtChoose = goItemObj.transform:Find("btnChoose/txtChoose"):GetComponent("TMP_Text")
local Checkmark = goItemObj.transform:Find("btnChoose/Background/Checkmark"):GetComponent("Animator")
local Mask = goItemObj.transform:Find("btnChoose/Mask").gameObject
table.insert(self.txtChoose, txtChoose)
table.insert(self.Checkmark, Checkmark)
table.insert(self.Mask, Mask)
local btn = goItemObj.transform:Find("btnChoose"):GetComponent("UIButton")
local func_Handler = ui_handler(self, self.OnBtnClick_Choose, goItemObj, i)
btn.onClick:AddListener(func_Handler)
if i == self.nIndex then
Checkmark:Play("checkmark_in", -1, 1)
else
Checkmark:Play("checkmark_out", -1, 1)
end
end
end
function OptionDynamicCtrl:SetGray(tbGrayIndex, sTip)
self.tbGrayIndex = tbGrayIndex
self.sTip = sTip
for i = 1, self.nCount do
self.Mask[i]:SetActive(tbGrayIndex and tbGrayIndex[i])
end
end
function OptionDynamicCtrl:OnBtnClick_Choose(btn, index)
if self.nIndex == index then
return
end
if self.tbGrayIndex and self.tbGrayIndex[index] then
EventManager.Hit(EventId.OpenMessageBox, self.sTip or "")
return
end
local change = function()
self.Checkmark[self.nIndex]:SetTrigger("PlayCheckmarkHide")
self.Checkmark[index]:SetTrigger("PlayCheckmarkShow")
self.nIndex = index
self.callback(self.nIndex)
end
local checkConfirm = function()
if self.sConfirm then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = self.sConfirm,
callbackConfirm = function()
change()
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
else
change()
end
end
if self.bIsVoLan == true then
if index == 2 then
checkConfirm()
else
change()
end
else
checkConfirm()
end
end
return OptionDynamicCtrl
@@ -0,0 +1,252 @@
local OptionKeyboardBindingCtrl = class("OptionKeyboardBindingCtrl", BaseCtrl)
local InputManager = CS.InputManager
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local ImageKey = {backspace = 1, enter = 2}
local MouseName = {
leftButton = 1,
rightButton = 2,
middleButton = 3,
backButton = 4,
forwardButton = 5
}
local IllegalKeyboardKey = {
"Caps Lock",
"Left Windows",
"Right Windows",
"Prnt Scrn",
"Scroll Lock",
"Break",
"Num Lock",
"Alt",
"Left Alt",
"Right Alt",
"Esc",
"Application",
"B"
}
OptionKeyboardBindingCtrl._mapNodeConfig = {
txtOptionTitle = {sComponentName = "TMP_Text"},
btnBind = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Bind"
},
Placeholder = {nCount = 2},
goBind = {nCount = 2},
bindBg = {nCount = 2},
holderBg = {nCount = 2},
keynone = {nCount = 2},
Keyboard = {nCount = 2},
goKey = {nCount = 2},
imgKeyboard = {nCount = 2, sComponentName = "Image"},
txtKeyboard = {nCount = 2, sComponentName = "TMP_Text"},
Mouse = {nCount = 2},
imgMouse = {nCount = 2, sComponentName = "Image"}
}
OptionKeyboardBindingCtrl._mapEventConfig = {
LuaEventName_KeyboardButtonPress = "OnEvent_KeyboardButtonPress",
LuaEventName_MouseButtonPress = "OnEvent_MouseButtonPress",
LuaEventName_GamepadButtonPress = "OnEvent_GamepadButtonPress",
SettingsSwitchKeyboardBind = "OnEvent_SwitchBind"
}
function OptionKeyboardBindingCtrl:SetText(sTitle)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
end
function OptionKeyboardBindingCtrl:Init(sAction)
self.nActiveBindingIndex = 0
self.sAction = sAction
for i = 1, 2 do
self:SwitchState(i, false)
self:RefreshButton(i)
end
end
function OptionKeyboardBindingCtrl:SwitchState(nIndex, bholder)
self._mapNode.Placeholder[nIndex]:SetActive(bholder)
self._mapNode.holderBg[nIndex]:SetActive(bholder)
self._mapNode.goBind[nIndex]:SetActive(not bholder)
self._mapNode.bindBg[nIndex]:SetActive(not bholder)
end
function OptionKeyboardBindingCtrl:RefreshButton(nIndex)
local mapInput = self._panel.mapKeyboardBind[self.sAction][nIndex]
if mapInput.name == "" then
self._mapNode.Keyboard[nIndex]:SetActive(false)
self._mapNode.Mouse[nIndex]:SetActive(false)
self._mapNode.keynone[nIndex]:SetActive(true)
return
end
self._mapNode.keynone[nIndex]:SetActive(false)
local bMouse = MouseName[mapInput.name]
self._mapNode.Keyboard[nIndex]:SetActive(not bMouse)
self._mapNode.Mouse[nIndex]:SetActive(bMouse)
if not bMouse then
if ImageKey[mapInput.name] then
self._mapNode.imgKeyboard[nIndex].gameObject:SetActive(true)
self._mapNode.goKey[nIndex]:SetActive(false)
local sIcon = ConfigTable.GetField("GamepadButton", mapInput.name, "XboxIcon")
self:SetPngSprite(self._mapNode.imgKeyboard[nIndex], sIcon)
NovaAPI.SetImageNativeSize(self._mapNode.imgKeyboard[nIndex])
else
self._mapNode.imgKeyboard[nIndex].gameObject:SetActive(false)
self._mapNode.goKey[nIndex]:SetActive(true)
local sName = GamepadUIManager.GetInputName(mapInput)
NovaAPI.SetTMPText(self._mapNode.txtKeyboard[nIndex], sName)
end
elseif bMouse then
local sIcon = ConfigTable.GetField("GamepadButton", mapInput.name, "XboxIcon")
self:SetPngSprite(self._mapNode.imgMouse[nIndex], sIcon)
end
end
function OptionKeyboardBindingCtrl:OpenDeviceWarning()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Tip_IllegalDevice"))
self:QuitBinding()
end
function OptionKeyboardBindingCtrl:OpenKeyWarning()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Tip_IllegalInput"))
self:QuitBinding()
end
function OptionKeyboardBindingCtrl:ChangeInGroup()
local mapFirst = self._panel.mapKeyboardBind[self.sAction][1]
self._panel.mapKeyboardBind[self.sAction][1] = self._panel.mapKeyboardBind[self.sAction][2]
self._panel.mapKeyboardBind[self.sAction][2] = mapFirst
for i = 1, 2 do
self:RefreshButton(i)
end
self:QuitBinding()
end
function OptionKeyboardBindingCtrl:OpenConflictWarning(sBeforeAction, nBeforIndex, inputInfo)
local nSelectIndex = self.nActiveBindingIndex
local mapInput = self._panel.mapKeyboardBind[self.sAction][nSelectIndex]
local sActionName = ConfigTable.GetUIText("Action_" .. sBeforeAction)
local sTip = ConfigTable.GetUIText("Settings_Tip_ConflictInput") or ""
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(sTip, sActionName),
callbackConfirm = function()
EventManager.Hit("SettingsSwitchKeyboardBind", sBeforeAction, nBeforIndex, {
name = mapInput.name,
displayName = mapInput.displayName
})
self:SwitchState(nSelectIndex, false)
self:UpdateBindConfig(inputInfo, nSelectIndex)
self:RefreshButton(nSelectIndex)
end,
callbackCancel = function()
self:SwitchState(nSelectIndex, false)
end,
bBlur = false
}
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self.nActiveBindingIndex = 0
EventManager.Hit(EventId.BlockInput, false)
InputManager.Instance.IsVirtualMouseEnabled = true
EventManager.Hit(EventId.OpenMessageBox, msg)
end
cs_coroutine.start(wait)
end
function OptionKeyboardBindingCtrl:OnBindingSuccess(inputInfo)
self:UpdateBindConfig(inputInfo, self.nActiveBindingIndex)
self:RefreshButton(self.nActiveBindingIndex)
self:QuitBinding()
end
function OptionKeyboardBindingCtrl:UpdateBindConfig(inputInfo, nIndex)
self._panel.mapKeyboardBind[self.sAction][nIndex] = {
name = inputInfo.name,
displayName = inputInfo.displayName
}
end
function OptionKeyboardBindingCtrl:QuitBinding()
self:SwitchState(self.nActiveBindingIndex, false)
self.nActiveBindingIndex = 0
self:AddTimer(1, 0.1, function()
EventManager.Hit(EventId.BlockInput, false)
InputManager.Instance.IsVirtualMouseEnabled = true
end, true, true, true)
end
function OptionKeyboardBindingCtrl:Awake()
self.nActiveBindingIndex = 0
end
function OptionKeyboardBindingCtrl:OnBtnClick_Bind(btn, nIndex)
self.nActiveBindingIndex = nIndex
self:SwitchState(nIndex, true)
EventManager.Hit(EventId.BlockInput, true)
InputManager.Instance.IsVirtualMouseEnabled = false
end
function OptionKeyboardBindingCtrl:OnEvent_KeyboardButtonPress(inputInfo)
if self.nActiveBindingIndex == 0 then
return
end
if table.indexof(IllegalKeyboardKey, inputInfo.displayName) ~= 0 then
self:OpenKeyWarning()
return
end
local mapInput = self._panel.mapKeyboardBind[self.sAction][self.nActiveBindingIndex]
if inputInfo.name == mapInput.name then
self:QuitBinding()
return
end
local mapInputInGroup = self._panel.mapKeyboardBind[self.sAction][self.nActiveBindingIndex == 1 and 2 or 1]
if inputInfo.name == mapInputInGroup.name then
self:ChangeInGroup()
return
end
local sBeforeAction, nBeforIndex = nil, 0
for k, v in pairs(self._panel.mapKeyboardBind) do
for i = 1, 2 do
if v[i].name and inputInfo.name == v[i].name then
sBeforeAction = k
nBeforIndex = i
break
end
end
end
if sBeforeAction then
self:OpenConflictWarning(sBeforeAction, nBeforIndex, inputInfo)
return
end
self:OnBindingSuccess(inputInfo)
end
function OptionKeyboardBindingCtrl:OnEvent_MouseButtonPress(inputInfo)
if self.nActiveBindingIndex == 0 then
return
end
local mapInput = self._panel.mapKeyboardBind[self.sAction][self.nActiveBindingIndex]
if inputInfo.name == mapInput.name then
self:QuitBinding()
return
end
local mapInputInGroup = self._panel.mapKeyboardBind[self.sAction][self.nActiveBindingIndex == 1 and 2 or 1]
if inputInfo.name == mapInputInGroup.name then
self:ChangeInGroup()
return
end
local sBeforeAction, nBeforIndex = nil, 0
for k, v in pairs(self._panel.mapKeyboardBind) do
for i = 1, 2 do
if v[i].name and inputInfo.name == v[i].name then
sBeforeAction = k
nBeforIndex = i
break
end
end
end
if sBeforeAction then
self:OpenConflictWarning(sBeforeAction, nBeforIndex, inputInfo)
return
end
self:OnBindingSuccess(inputInfo)
end
function OptionKeyboardBindingCtrl:OnEvent_GamepadButtonPress(inputInfo)
if self.nActiveBindingIndex == 0 then
return
end
self:OpenDeviceWarning()
end
function OptionKeyboardBindingCtrl:OnEvent_SwitchBind(nAction, nIndex, inputInfo)
if self.sAction ~= nAction then
return
end
self:UpdateBindConfig(inputInfo, nIndex)
self:RefreshButton(nIndex)
end
return OptionKeyboardBindingCtrl
+34
View File
@@ -0,0 +1,34 @@
local OptionSwitchCtrl = class("OptionSwitchCtrl", BaseCtrl)
OptionSwitchCtrl._mapNodeConfig = {
txtOptionTitle = {sComponentName = "TMP_Text"},
btnSwitch = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Switch"
},
SwitchOn = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_ON_EN"
},
SwitchOff = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_OFF_EN"
}
}
OptionSwitchCtrl._mapEventConfig = {}
function OptionSwitchCtrl:SetText(sTitle)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
end
function OptionSwitchCtrl:Init(callback, bOn)
self.bOn = bOn
self.callback = callback
self._mapNode.btnSwitch[1].gameObject:SetActive(not self.bOn)
self._mapNode.btnSwitch[2].gameObject:SetActive(self.bOn)
end
function OptionSwitchCtrl:OnBtnClick_Switch(btn, nIndex)
self.bOn = not self.bOn
self.callback()
self._mapNode.btnSwitch[1].gameObject:SetActive(nIndex == 2)
self._mapNode.btnSwitch[2].gameObject:SetActive(nIndex == 1)
end
return OptionSwitchCtrl
@@ -0,0 +1,64 @@
local OptionUpdateChooseCtrl = class("OptionUpdateChooseCtrl", BaseCtrl)
OptionUpdateChooseCtrl._mapNodeConfig = {
btnChoose = {
nCount = 3,
sComponentName = "UIButton",
callback = "OnBtnClick_Choose"
},
txtChoose = {nCount = 3, sComponentName = "TMP_Text"},
Checkmark = {nCount = 3, sComponentName = "Animator"},
Mask = {nCount = 3},
Choose = {nCount = 3},
txtOptionTitle = {sComponentName = "TMP_Text"}
}
OptionUpdateChooseCtrl._mapEventConfig = {}
function OptionUpdateChooseCtrl:SetText(s1, s2, s3, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtChoose[1], s1)
NovaAPI.SetTMPText(self._mapNode.txtChoose[2], s2)
NovaAPI.SetTMPText(self._mapNode.txtChoose[3], s3)
end
function OptionUpdateChooseCtrl:Init(callback, nIndex, nCount)
self.nIndex = nIndex
self.callback = callback
if nCount == nil then
nCount = 3
end
for i = 1, 3 do
if i > nCount then
self._mapNode.Choose[i].gameObject:SetActive(false)
else
self._mapNode.Choose[i].gameObject:SetActive(true)
if i == self.nIndex then
self._mapNode.Checkmark[i]:Play("checkmark_in", -1, 1)
else
self._mapNode.Checkmark[i]:Play("checkmark_out", -1, 1)
end
end
end
end
function OptionUpdateChooseCtrl:SetGray(tbGrayIndex, sTip)
self.tbGrayIndex = tbGrayIndex
self.sTip = sTip
for i = 1, 3 do
self._mapNode.Mask[i]:SetActive(tbGrayIndex and tbGrayIndex[i])
end
end
function OptionUpdateChooseCtrl:Awake()
end
function OptionUpdateChooseCtrl:OnBtnClick_Choose(btn, index)
if self.nIndex == index then
return
end
if self.tbGrayIndex and self.tbGrayIndex[index] then
EventManager.Hit(EventId.OpenMessageBox, self.sTip or "")
return
end
local suc = function()
self._mapNode.Checkmark[self.nIndex]:SetTrigger("PlayCheckmarkHide")
self._mapNode.Checkmark[index]:SetTrigger("PlayCheckmarkShow")
self.nIndex = index
end
self.callback(index, suc)
end
return OptionUpdateChooseCtrl
@@ -0,0 +1,408 @@
local PreviewMainViewCtrl = class("PreviewMainViewCtrl", BaseCtrl)
local PlayerBoardData = PlayerData.Board
local PlayerVoiceData = PlayerData.Voice
local AvgData = PlayerData.Avg
local LocalData = require("GameCore.Data.LocalData")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local TimerManager = require("GameCore.Timer.TimerManager")
local BubbleVoiceManager = require("Game.Actor2D.BubbleVoiceManager")
PreviewMainViewCtrl._mapNodeConfig = {
btnSkipCGAnim = {sComponentName = "Button"},
rawImgActor2D = {
sNodeName = "----Actor2D----",
sComponentName = "RawImage"
},
imgOutfit = {sComponentName = "Image"},
HideRoot = {},
txtName = {sComponentName = "TMP_Text"},
imgEnergyIcon = {sComponentName = "Image"},
txtEnergyCount = {sComponentName = "TMP_Text"},
btnAddEnergy = {sComponentName = "UIButton"},
goCoin = {
nCount = 2,
sCtrlName = "Game.UI.TemplateEx.TemplateCoinCtrl"
},
imgBtn1 = {},
btnAdd1 = {sComponentName = "UIButton"},
imgBtn2 = {},
btnAdd2 = {sComponentName = "UIButton"},
imgExp = {sComponentName = "Image"},
txtRank = {sComponentName = "TMP_Text"},
txtRankEn = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_RANK"
},
btnWorldClass = {sComponentName = "UIButton"},
btnActivity = {sComponentName = "UIButton"},
txtActivity1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Activity"
},
btnBattlePass = {sComponentName = "UIButton"},
txtBattlePass = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_BattlePass"
},
btnMall = {sComponentName = "UIButton"},
txtMall = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Mall"
},
btnNotice = {sComponentName = "UIButton"},
btnMail = {sComponentName = "UIButton"},
btnFriend = {sComponentName = "UIButton"},
btnDepot = {sComponentName = "UIButton"},
goEnergyTip = {},
tmpEnergy = {sComponentName = "TMP_Text"},
imgTime = {nCount = 3},
goActivityBanner = {},
goActBannerList = {
sComponentName = "RectTransform"
},
btnActBanner = {
sNodeName = "goActBannerList",
sComponentName = "UIButton"
},
eventActBannerDrag = {
sNodeName = "goActBannerList",
sComponentName = "UIDrag"
},
activityBannerItem = {
nCount = 3,
sComponentName = "RectTransform"
},
imgActBanner = {nCount = 3, sComponentName = "Image"},
goBannerDot = {
sComponentName = "RectTransform"
},
imgPointBg = {nCount = 8},
btnSwitchActor2D = {sComponentName = "UIButton"},
btnHideAllUI = {sComponentName = "UIButton", nCount = 2},
btnMenu = {sComponentName = "UIButton"},
btnBoardChange = {sComponentName = "UIButton"},
btnBoardNext = {sComponentName = "UIButton"},
btnTask = {sComponentName = "UIButton"},
txtTask1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Task"
},
btnPhone = {sComponentName = "UIButton"},
txtPhone1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Phone"
},
btnDispatch = {sComponentName = "UIButton"},
txtDispatch1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Dispatch"
},
btnRecruit = {sComponentName = "UIButton"},
txtRecruit1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Recruit"
},
btnRole = {sComponentName = "UIButton"},
txtRole1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Role"
},
btnDisc = {sComponentName = "UIButton"},
txtDisc1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Disc"
},
btnShop = {sComponentName = "UIButton"},
txtShop1 = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Shop"
},
btnMap = {sComponentName = "UIButton"},
txtGo = {
sComponentName = "TMP_Text",
sLanguageId = "MainView_Go"
},
txtMainline1 = {sComponentName = "TMP_Text", sLanguageId = "Mainline"},
goStarTowerHint = {},
tmpStarTowerHint = {sComponentName = "TMP_Text"},
btnStarTowerHint = {
sNodeName = "goStarTowerHint",
sComponentName = "UIButton"
},
goStoryHint = {},
tmpStoryHint = {sComponentName = "TMP_Text"},
btnStoryHint = {
sNodeName = "goStoryHint",
sComponentName = "UIButton"
}
}
PreviewMainViewCtrl._mapEventConfig = {}
function PreviewMainViewCtrl:Refresh()
self:RefreshPlayerInfo()
self:RefreshWorldClass()
self:RefreshResources()
self:RefreshEnergy()
self:RefreshActor2D()
self:RefreshComFuncState()
self:SetBanner()
end
function PreviewMainViewCtrl:RefreshPlayerInfo()
local sName = PlayerData.Base:GetPlayerNickName()
NovaAPI.SetTMPText(self._mapNode.txtName, sName)
end
function PreviewMainViewCtrl:RefreshWorldClass()
local nWorldClass = PlayerData.Base:GetWorldClass()
local nCurExp = PlayerData.Base:GetWorldExp()
local mapCfg = ConfigTable.GetData("WorldClass", nWorldClass + 1, true)
local nFullExp = 0
if mapCfg then
nFullExp = mapCfg.Exp
end
NovaAPI.SetTMPText(self._mapNode.txtRank, nWorldClass)
NovaAPI.SetImageFillAmount(self._mapNode.imgExp, nFullExp == 0 and 1 or nCurExp / nFullExp)
local nMaxEnergy = ConfigTable.GetConfigNumber("EnergyMaxLimit")
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
NovaAPI.SetTMPText(self._mapNode.txtEnergyCount, nCurEnergy .. "/" .. nMaxEnergy)
end
function PreviewMainViewCtrl:RefreshResources()
for nCoinId, index in pairs(self.tbRes) do
if nCoinId == AllEnum.CoinItemId.FREESTONE then
self._mapNode.goCoin[index]:SetCoin(nCoinId, PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.FREESTONE) + PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE), true, 999999)
else
self._mapNode.goCoin[index]:SetCoin(nCoinId, PlayerData.Coin:GetCoinCount(nCoinId), true, 999999)
end
end
end
function PreviewMainViewCtrl:RefreshEnergy()
local nMaxEnergy = ConfigTable.GetConfigNumber("EnergyMaxLimit")
local nCurEnergy = PlayerData.Base:GetCurEnergy().nEnergy
NovaAPI.SetTMPText(self._mapNode.txtEnergyCount, nCurEnergy .. "/" .. nMaxEnergy)
self:SetSprite_Coin(self._mapNode.imgEnergyIcon, AllEnum.CoinItemId.Energy)
end
function PreviewMainViewCtrl:RefreshActor2D()
self._mapNode.imgOutfit.gameObject:SetActive(false)
self._mapNode.rawImgActor2D.gameObject:SetActive(false)
local curBoardData = PlayerBoardData:GetCurBoardData()
if nil == curBoardData then
curBoardData = PlayerBoardData:GetTempBoardData()
end
local nCGAnimTime = 0
if nil ~= curBoardData then
if curBoardData:GetType() == GameEnum.handbookType.SKIN then
self._mapNode.rawImgActor2D.gameObject:SetActive(true)
local charId = curBoardData:GetCharId()
local skinId = curBoardData:GetSkinId()
local bSuc, nType, nAnimLen = Actor2DManager.SetActor2D(PanelId.MainView, self._mapNode.rawImgActor2D, charId, skinId)
local nTargetType = PlayerData.Board:GetBoardPanelL2DType()
local bChange = false
if nTargetType ~= 0 and nTargetType ~= nType and (nTargetType == AllEnum.Actor2DType.FullScreen and curBoardData:CheckFavorCG() or nTargetType == AllEnum.Actor2DType.Normal) then
bChange = true
end
if bChange then
bSuc, nType, nAnimLen = Actor2DManager.SwitchActor2DType()
end
local nBoardPanelId = PlayerBoardData:GetBoardPanelSelectId()
if nil ~= nBoardPanelId and 0 ~= nBoardPanelId and nType == AllEnum.Actor2DType.Normal and nBoardPanelId == curBoardData:GetId() then
Actor2DManager.PlayActor2DAnim("Actor2D_left_middle")
end
self.nActorShowType = nType
nCGAnimTime = nAnimLen or 0
elseif curBoardData:GetType() == GameEnum.handbookType.OUTFIT then
self.nActorShowType = 0
self._mapNode.imgOutfit.gameObject:SetActive(true)
self:SetPngSprite(self._mapNode.imgOutfit, curBoardData:GetDiscBg())
NovaAPI.SetImageNativeSize(self._mapNode.imgOutfit)
end
end
Actor2DManager.SkipCGAnim()
PlayerBoardData:SetBoardPanelSelectId(0)
end
function PreviewMainViewCtrl:SetBanner()
self.tbBannerList = {}
self:AddActivityBanner()
self:AddOtherBanner()
self:AddGachaBanner()
if nil == self.tbBannerList or nil == next(self.tbBannerList) then
self._mapNode.goActivityBanner.gameObject:SetActive(false)
else
self._mapNode.goActivityBanner:SetActive(true)
for _, v in ipairs(self._mapNode.imgPointBg) do
v.gameObject:SetActive(false)
end
for k, v in ipairs(self.tbBannerList) do
if nil ~= self._mapNode.imgPointBg[k] then
self._mapNode.imgPointBg[k]:SetActive(true)
self._mapNode.imgPointBg[k].transform:Find("imgPoint").gameObject:SetActive(false)
end
end
self.nActBannerIdx = 1
self.nLastActBannerIdx = 1
self:RefreshActivityBanner()
end
self:StartActBannerTimer()
self._mapNode.eventActBannerDrag.enabled = #self.tbBannerList > 1
end
function PreviewMainViewCtrl:AddActivityBanner()
local tb_activityBanner = PlayerData.Activity:GetActivityBannerList()
for _, value in pairs(tb_activityBanner) do
table.insert(self.tbBannerList, {
nType = GameEnum.bannerType.Activity,
actData = value,
nFuncType = GameEnum.OpenFuncType.Activity
})
end
end
function PreviewMainViewCtrl:AddOtherBanner()
local forEachMap = function(mapLineData)
if mapLineData.BannerType == GameEnum.bannerType.OpenFunc then
local funcNum = tonumber(mapLineData.Param1)
if funcNum == nil then
return
end
local bUnlock = PlayerData.Base:CheckFunctionUnlock(funcNum, false)
if bUnlock then
local jumpToNum = tonumber(mapLineData.Param2)
if jumpToNum == nil then
return
end
table.insert(self.tbBannerList, {
nType = GameEnum.bannerType.OpenFunc,
sBanner = mapLineData.bannerName,
nJumpTo = jumpToNum,
nFuncType = funcNum
})
end
end
end
ForEachTableLine(DataTable.Banner, forEachMap)
end
function PreviewMainViewCtrl:AddGachaBanner()
local tbOpenedPool = PlayerData.Gacha:GetOpenedPool()
for _, nPoolId in ipairs(tbOpenedPool) do
local mapPoolCfgData = ConfigTable.GetData("Gacha", nPoolId)
if mapPoolCfgData ~= nil and mapPoolCfgData.BannerRes ~= nil and mapPoolCfgData.BannerRes ~= "" then
table.insert(self.tbBannerList, {
nType = GameEnum.bannerType.Gacha,
sBanner = mapPoolCfgData.BannerRes,
nJumpTo = nPoolId,
nFuncType = GameEnum.OpenFuncType.Gacha
})
end
end
end
function PreviewMainViewCtrl:RefreshActivityBanner()
local lastIndex = self.nActBannerIdx - 1 <= 0 and #self.tbBannerList or self.nActBannerIdx - 1
local nextIndex = self.nActBannerIdx + 1 > #self.tbBannerList and 1 or self.nActBannerIdx + 1
local tbCurBannerList = {}
table.insert(tbCurBannerList, self.tbBannerList[lastIndex])
table.insert(tbCurBannerList, self.tbBannerList[self.nActBannerIdx])
table.insert(tbCurBannerList, self.tbBannerList[nextIndex])
for k, v in ipairs(self._mapNode.imgActBanner) do
local bannerData = tbCurBannerList[k]
if bannerData.nType == GameEnum.bannerType.Activity then
if nil ~= bannerData.actData then
self:SetPngSprite(v, "Icon/Banner/" .. bannerData.actData:GetBannerPng())
end
elseif bannerData.nType == GameEnum.bannerType.OpenFunc then
self:SetPngSprite(v, "Icon/Banner/" .. bannerData.sBanner)
elseif bannerData.nType == GameEnum.bannerType.Gacha then
self:SetPngSprite(v, "Icon/Banner/" .. bannerData.sBanner)
end
end
self._mapNode.imgPointBg[self.nLastActBannerIdx].transform:Find("imgPoint").gameObject:SetActive(false)
self.nLastActBannerIdx = self.nActBannerIdx
self._mapNode.imgPointBg[self.nActBannerIdx].transform:Find("imgPoint").gameObject:SetActive(true)
end
function PreviewMainViewCtrl:StartActBannerTimer()
if nil == self.actBannerTimer and #self.tbBannerList > 1 then
self.actBannerTimer = self:AddTimer(0, self.nBannerInterval, "PlayActBannerAnim", true, true, false)
end
end
function PreviewMainViewCtrl:ResetActBannerTimer()
if nil ~= self.actBannerTimer then
TimerManager.Remove(self.actBannerTimer, false)
end
self.actBannerTimer = nil
end
function PreviewMainViewCtrl:PlayActBannerAnim()
for k, v in ipairs(self._mapNode.activityBannerItem) do
v:DOAnchorPosX(self.tbBannerInitPos[k].x - self.nBannerWidth, 0.5):SetUpdate(true)
end
self.actBannerRefreshTimer = self:AddTimer(1, 0.5, "BannerTweenerEnd", true, true, true)
end
function PreviewMainViewCtrl:BannerTweenerEnd()
for k, v in ipairs(self._mapNode.activityBannerItem) do
v.anchoredPosition = self.tbBannerInitPos[k]
end
self.nActBannerIdx = self.nActBannerIdx + 1
if self.nActBannerIdx > #self.tbBannerList then
self.nActBannerIdx = 1
end
self:RefreshActivityBanner()
end
function PreviewMainViewCtrl:InitData()
self.tbRes = {
[AllEnum.CoinItemId.Jade] = 1,
[AllEnum.CoinItemId.FREESTONE] = 2
}
self.bannerList = {}
end
function PreviewMainViewCtrl:LoadCharacterIndex()
local localData = LocalData.GetPlayerLocalData("MainMenuUICharIndex")
self.nCurCharIdx = tonumber(localData) or 1
end
function PreviewMainViewCtrl:ResetTimer()
if nil ~= self.actBannerTimer then
self.actBannerTimer:Cancel(false)
self.actBannerTimer = nil
end
if nil ~= self.actBannerRefreshTimer then
self.actBannerRefreshTimer:Cancel(false)
self.actBannerRefreshTimer = nil
end
end
function PreviewMainViewCtrl:RefreshComFuncState()
local nState = ConfigTable.GetConfigNumber("IsShowComBtn")
local bActive = nState == 1
self._mapNode.btnBattlePass.gameObject:SetActive(bActive)
self._mapNode.btnMall.gameObject:SetActive(bActive)
self._mapNode.imgBtn2.gameObject:SetActive(bActive)
self._mapNode.btnAdd2.gameObject:SetActive(bActive)
end
function PreviewMainViewCtrl:Awake()
self.bNewDay = false
self.resourcesList = nil
self.bannerList = nil
self.tbCharId = nil
self.nCurCharIdx = nil
self.nActorShowType = nil
self.bNeedCheckState = true
self.nDragStartPosX = nil
self.nDragThreshold = PlayerBoardData:GetBoardDragThreshold()
self.nCurBubbleIndex = 0
self.tbBubbleList = {}
self.tbBannerInitPos = {}
for _, v in ipairs(self._mapNode.activityBannerItem) do
self.nBannerWidth = v.sizeDelta.x
table.insert(self.tbBannerInitPos, v.anchoredPosition)
end
self:GetAtlasSprite("06_btn", "btn_agent_tab_1")
self:InitData()
end
function PreviewMainViewCtrl:OnEnable()
self.tbCharId = PlayerData.Char:GetCharIdList()
self:LoadCharacterIndex()
self._mapNode.eventActBannerDrag:SetStrictDrag(true)
self.nBannerInterval = ConfigTable.GetConfigNumber("Activity_Banner_Interval_Time")
for k, v in ipairs(self._mapNode.activityBannerItem) do
v.anchoredPosition = self.tbBannerInitPos[k]
end
end
function PreviewMainViewCtrl:OnDisable()
self.tbCharId = nil
self.nCurCharIdx = nil
self:ResetTimer()
Actor2DManager.UnsetActor2D()
end
function PreviewMainViewCtrl:OnDestroy()
end
return PreviewMainViewCtrl
+393
View File
@@ -0,0 +1,393 @@
local SettingsAcountCtrl = class("SettingsAcountCtrl", BaseCtrl)
local UIGameSystemSetup = CS.UIGameSystemSetup
local SDKManager = CS.SDKManager.Instance
SettingsAcountCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Account"
},
btnLogout = {
sComponentName = "UIButton",
callback = "OnBtnClick_Logout"
},
txtBtnLogout = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Logout"
},
txtSecurity = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Account_Security"
},
txtCenter = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Account_Center"
},
btnCenter = {
sComponentName = "UIButton",
callback = "OnBtnClick_Center"
},
txtBtnCenter = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Go"
},
userCenter = {
sNodeName = "Option_UserCenter"
},
txtGem = {sComponentName = "TMP_Text"},
btnGem = {
sComponentName = "UIButton",
callback = "OnBtnClick_GemDetail"
},
txtBtnGem = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Detail"
},
option_gem = {sNodeName = "Option_Gem"},
List_PlayerAcc = {
sComponentName = "LayoutElement"
},
txtUserAgreement = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Account_UserAgreement"
},
Agreement = {nCount = 4},
txtBtnAgreement = {
nCount = 4,
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Read"
},
List_Agreement = {
sComponentName = "LayoutElement"
}
}
SettingsAcountCtrl._mapEventConfig = {
SDKNotAvailable = "OnEvent_SDKNotAvailable"
}
function SettingsAcountCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
self:InitStone()
self:InitAgreement()
end
function SettingsAcountCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsAcountCtrl:InitStone()
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
local channelName = CS.ClientConfig.ClientPublishChannelName
local line = self._mapNode.userCenter.transform:Find("line")
local bShowUserCenter = self._panel.ShowUserCenter
if bShowUserCenter == nil then
bShowUserCenter = true
end
if bShowUserCenter == false then
self._mapNode.List_PlayerAcc.gameObject:SetActive(false)
elseif clientPublishRegion == CS.ClientPublishRegion.CN then
if channelName == "Bilibili" then
self._mapNode.List_PlayerAcc.gameObject:SetActive(false)
else
line.gameObject:SetActive(false)
self._mapNode.option_gem:SetActive(false)
self._mapNode.List_PlayerAcc.preferredHeight = 163.9
self._mapNode.List_PlayerAcc.gameObject:SetActive(true)
end
else
line.gameObject:SetActive(true)
self._mapNode.option_gem:SetActive(true)
self._mapNode.List_PlayerAcc.preferredHeight = 264
end
local stoneConfig = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
local str = orderedFormat(ConfigTable.GetUIText("Settings_Account_Gem"), stoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txtGem, str)
end
function SettingsAcountCtrl:InitAgreement()
for i = 1, 4 do
self._mapNode.Agreement[i]:SetActive(false)
end
local clientPublishRegion = CS.ClientConfig.ClientPublishRegion
if clientPublishRegion == CS.ClientPublishRegion.CN then
self:InitAgreement_CN()
elseif clientPublishRegion == CS.ClientPublishRegion.TW then
self:InitAgreement_TW()
elseif clientPublishRegion == CS.ClientPublishRegion.JP then
self:InitAgreement_JP()
elseif clientPublishRegion == CS.ClientPublishRegion.US then
self:InitAgreement_US()
elseif clientPublishRegion == CS.ClientPublishRegion.KR then
self:InitAgreement_KR()
else
self:InitAgreement_CN()
end
end
function SettingsAcountCtrl:InitAgreement_CN()
local agreement1 = self._mapNode.Agreement[1]
local txtAgreement1 = agreement1.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement1:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PrivacyAgreement"))
local btnAgreement1 = agreement1.transform:Find("btnAgreement")
local btn1 = btnAgreement1:GetComponent("UIButton")
btn1.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"privacy_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement1:SetActive(true)
local agreement2 = self._mapNode.Agreement[2]
local txtAgreement2 = agreement2.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement2:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_InfoAgreement"))
local btnAgreement2 = agreement2.transform:Find("btnAgreement")
local btn2 = btnAgreement2:GetComponent("UIButton")
btn2.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowWebView(false, ConfigTable.GetUIText("Settings_Account_InfoAgreement"), "https://account.yostar.cn/cn-nova/collect", 1, 0, false, "CN-YOSTAR")
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement2:SetActive(true)
local agreement3 = self._mapNode.Agreement[3]
local txtAgreement3 = agreement3.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement3:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_CooperationAgreement"))
local btnAgreement3 = agreement3.transform:Find("btnAgreement")
local btn3 = btnAgreement3:GetComponent("UIButton")
btn3.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowWebView(false, ConfigTable.GetUIText("Settings_Account_CooperationAgreement"), "https://account.yostar.cn/cn-nova/shared_list")
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement3:SetActive(true)
local agreement4 = self._mapNode.Agreement[4]
local txtAgreement4 = agreement4.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement4:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_GameRegistrationNumber"))
local btnAgreement4 = agreement4.transform:Find("btnAgreement")
local btn4 = btnAgreement4:GetComponent("UIButton")
btn4.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowWebView(false, ConfigTable.GetUIText("Settings_Account_GameRegistrationNumber"), "https://beian.miit.gov.cn/#/Integrated/index")
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
local line = agreement4.transform:Find("line")
line.gameObject:SetActive(false)
agreement4:SetActive(true)
self._mapNode.List_Agreement.preferredHeight = 489.16
end
function SettingsAcountCtrl:InitAgreement_TW()
local agreement1 = self._mapNode.Agreement[1]
local txtAgreement1 = agreement1.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement1:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_UserTerms"))
local btnAgreement1 = agreement1.transform:Find("btnAgreement")
local btn1 = btnAgreement1:GetComponent("UIButton")
btn1.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"user_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement1:SetActive(true)
local agreement2 = self._mapNode.Agreement[2]
local txtAgreement2 = agreement2.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement2:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PrivacyPolicy"))
local btnAgreement2 = agreement2.transform:Find("btnAgreement")
local btn2 = btnAgreement2:GetComponent("UIButton")
btn2.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"privacy_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
local line = agreement2.transform:Find("line")
line.gameObject:SetActive(false)
agreement2:SetActive(true)
self._mapNode.List_Agreement.preferredHeight = 244.58
end
function SettingsAcountCtrl:InitAgreement_JP()
local agreement1 = self._mapNode.Agreement[1]
local txtAgreement1 = agreement1.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement1:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_UseAgreement"))
local btnAgreement1 = agreement1.transform:Find("btnAgreement")
local btn1 = btnAgreement1:GetComponent("UIButton")
btn1.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"user_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement1:SetActive(true)
local agreement2 = self._mapNode.Agreement[2]
local txtAgreement2 = agreement2.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement2:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PrivacyPolicy"))
local btnAgreement2 = agreement2.transform:Find("btnAgreement")
local btn2 = btnAgreement2:GetComponent("UIButton")
btn2.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"privacy_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement2:SetActive(true)
local agreement3 = self._mapNode.Agreement[3]
local txtAgreement3 = agreement3.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement3:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_SCTL"))
local btnAgreement3 = agreement3.transform:Find("btnAgreement")
local btn3 = btnAgreement3:GetComponent("UIButton")
btn3.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"specific_commercial_transaction_act"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement3:SetActive(true)
local agreement4 = self._mapNode.Agreement[4]
local txtAgreement4 = agreement4.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement4:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PaymentServicesAct"))
local btnAgreement4 = agreement4.transform:Find("btnAgreement")
local btn4 = btnAgreement4:GetComponent("UIButton")
btn4.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"fund_settlement_algorithm"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
local line = agreement4.transform:Find("line")
line.gameObject:SetActive(false)
agreement4:SetActive(true)
self._mapNode.List_Agreement.preferredHeight = 489.16
end
function SettingsAcountCtrl:InitAgreement_US()
local agreement1 = self._mapNode.Agreement[1]
local txtAgreement1 = agreement1.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement1:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_UserTerms"))
local btnAgreement1 = agreement1.transform:Find("btnAgreement")
local btn1 = btnAgreement1:GetComponent("UIButton")
btn1.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"user_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement1:SetActive(true)
local agreement2 = self._mapNode.Agreement[2]
local txtAgreement2 = agreement2.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement2:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PrivacyPolicy"))
local btnAgreement2 = agreement2.transform:Find("btnAgreement")
local btn2 = btnAgreement2:GetComponent("UIButton")
btn2.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"privacy_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
local line = agreement2.transform:Find("line")
line.gameObject:SetActive(false)
agreement2:SetActive(true)
self._mapNode.List_Agreement.preferredHeight = 244.58
end
function SettingsAcountCtrl:InitAgreement_KR()
local agreement1 = self._mapNode.Agreement[1]
local txtAgreement1 = agreement1.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement1:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_UserTerms"))
local btnAgreement1 = agreement1.transform:Find("btnAgreement")
local btn1 = btnAgreement1:GetComponent("UIButton")
btn1.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"user_agreement"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
agreement1:SetActive(true)
local agreement2 = self._mapNode.Agreement[2]
local txtAgreement2 = agreement2.transform:Find("txtAgreement")
NovaAPI.SetTMPText(txtAgreement2:GetComponent("TMP_Text"), ConfigTable.GetUIText("Settings_Account_PrivacyPolicy"))
local btnAgreement2 = agreement2.transform:Find("btnAgreement")
local btn2 = btnAgreement2:GetComponent("UIButton")
btn2.onClick:AddListener(function()
if SDKManager:IsSDKInit() then
SDKManager:ShowAgreement({
"credit_investigation"
})
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end)
local line = agreement2.transform:Find("line")
line.gameObject:SetActive(false)
agreement2:SetActive(true)
self._mapNode.List_Agreement.preferredHeight = 244.58
end
function SettingsAcountCtrl:LoadSetting()
end
function SettingsAcountCtrl:SaveSetting()
end
function SettingsAcountCtrl:Awake()
self.bInit = false
end
function SettingsAcountCtrl:OnEnable()
end
function SettingsAcountCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsAcountCtrl:OnDestroy()
end
function SettingsAcountCtrl:OnBtnClick_Center()
if SDKManager:IsSDKInit() then
SDKManager.SDK:ShowUserCenter()
else
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
end
function SettingsAcountCtrl:OnBtnClick_Logout()
if SDKManager:IsSDKInit() then
UTILS.SDK_Logout()
else
PanelManager.OnConfirmBackToLogIn()
end
end
function SettingsAcountCtrl:OnBtnClick_GemDetail()
EventManager.Hit("Setting_GemDetail")
end
function SettingsAcountCtrl:OnEvent_SDKNotAvailable()
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
end
return SettingsAcountCtrl
+161
View File
@@ -0,0 +1,161 @@
local SettingsBattleCtrl = class("SettingsBattleCtrl", BaseCtrl)
local ModuleManager = require("GameCore.Module.ModuleManager")
local UIGameSystemSetup = CS.UIGameSystemSetup
local BattleAnimTypeEnum = {
UIGameSystemSetup.TimeLinePlayType.dayOnce,
UIGameSystemSetup.TimeLinePlayType.everyTime,
UIGameSystemSetup.TimeLinePlayType.none
}
SettingsBattleCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Game"
},
txtAnim1 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Animation"
},
txtAnim2 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_AnimationSub"
},
txtBattleHUD = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_BattleHUD_Title"
},
Anim1 = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
Anim2 = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
Anim3 = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
JoyStick = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
Gizmos = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
Mouse = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
AutoUlt = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
BattleHudList = {}
}
SettingsBattleCtrl._mapEventConfig = {
SettingsChangeL2d = "OnEvent_ChangeL2d"
}
function SettingsBattleCtrl:RefreshText()
self._mapNode.Anim1:SetText(ConfigTable.GetUIText("Settings_Animation_One"), ConfigTable.GetUIText("Settings_Animation_Open"), ConfigTable.GetUIText("Settings_Animation_Close"))
self._mapNode.Anim2:SetText(ConfigTable.GetUIText("Settings_Animation_One"), ConfigTable.GetUIText("Settings_Animation_Open"), ConfigTable.GetUIText("Settings_Animation_Close"))
self._mapNode.Anim3:SetText(ConfigTable.GetUIText("Settings_BattleHUD_Type1"), ConfigTable.GetUIText("Settings_BattleHUD_Type2"), "")
self._mapNode.JoyStick:SetText(ConfigTable.GetUIText("Settings_JoyStick"))
self._mapNode.Gizmos:SetText(ConfigTable.GetUIText("Settings_Gizmos"))
self._mapNode.Mouse:SetText(ConfigTable.GetUIText("Settings_Mouse"))
self._mapNode.AutoUlt:SetText(ConfigTable.GetUIText("Settings_AutoBattle_Ultra"))
end
function SettingsBattleCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsBattleCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsBattleCtrl:LoadSetting()
self.battleAnim = self._panel:LoadLocalData("Animation")
self._mapNode.Anim1:Init(function(index)
UIGameSystemSetup.Instance.PlayType = BattleAnimTypeEnum[index]
self.battleAnim = index
end, self.battleAnim)
self.battleAnim2 = self._panel:LoadLocalData("AnimationSub")
local bUseLive2D = self._panel:LoadLocalData("UseLive2D")
if bUseLive2D == false then
self._mapNode.Anim2:SetGray({
[1] = true,
[2] = true
}, ConfigTable.GetUIText("Settings_SubSkillDisable"))
self.battleAnim2 = 3
else
self._mapNode.Anim2:SetGray()
end
self._mapNode.Anim2:Init(function(index)
self.battleAnim2 = index
end, self.battleAnim2)
self.battleHud = self._panel:LoadLocalData("BattleHUD")
self._mapNode.Anim3:Init(function(index)
self.battleHud = index
end, self.battleHud, 2)
self._mapNode.Mouse.gameObject:SetActive(false)
self.floatingJoyStick = self._panel:LoadLocalData("JoyStick")
self._mapNode.JoyStick:Init(function()
self.floatingJoyStick = not self.floatingJoyStick
UIGameSystemSetup.Instance.EnableFloatingJoyStick = self.floatingJoyStick
EventManager.Hit("SetVariableJoystickMode")
end, self.floatingJoyStick)
self.gizmos = self._panel:LoadLocalData("Gizmos")
self._mapNode.Gizmos:Init(function()
self.gizmos = not self.gizmos
UIGameSystemSetup.Instance.EnableAttackGizmos = self.gizmos
if ModuleManager.GetIsAdventure() then
CS.AdventureModuleHelper.Lua2CSharp_ChangeVisionAttackRange(self.gizmos)
end
end, self.gizmos)
self.autoUlt = self._panel:LoadLocalData("AutoUlt")
self._mapNode.AutoUlt:Init(function()
self.autoUlt = not self.autoUlt
UIGameSystemSetup.Instance.EnableAutoUlt = self.autoUlt
end, self.autoUlt)
end
function SettingsBattleCtrl:SaveSetting()
self._panel:SaveLocalData("Animation", self.battleAnim)
self._panel:SaveLocalData("AnimationSub", self.battleAnim2)
if not NovaAPI.IsMobilePlatform() then
self._panel:SaveLocalData("Mouse", self.openMouse)
end
self._panel:SaveLocalData("JoyStick", self.floatingJoyStick)
self._panel:SaveLocalData("Gizmos", self.gizmos)
self._panel:SaveLocalData("AutoUlt", self.autoUlt)
self._panel:SaveLocalData("BattleHUD", self.battleHud)
end
function SettingsBattleCtrl:Awake()
self.bInit = false
local bMobile = NovaAPI.IsMobilePlatform()
self._mapNode.JoyStick.gameObject:SetActive(bMobile)
self:RefreshText()
end
function SettingsBattleCtrl:OnEnable()
end
function SettingsBattleCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
EventManager.Hit(EventId.SettingsBattleClose)
end
function SettingsBattleCtrl:OnDestroy()
end
function SettingsBattleCtrl:OnEvent_ChangeL2d(bUseLive2D)
self:Init()
if bUseLive2D == false then
self._mapNode.Anim2:SetGray({
[1] = true,
[2] = true
}, ConfigTable.GetUIText("Settings_SubSkillDisable"))
self.battleAnim2 = 3
else
self._mapNode.Anim2:SetGray()
end
self._mapNode.Anim2:Init(function(index)
self.battleAnim2 = index
end, self.battleAnim2)
end
return SettingsBattleCtrl
+216
View File
@@ -0,0 +1,216 @@
local SettingsCtrl = class("SettingsCtrl", BaseCtrl)
local UIGameSystemSetup = CS.UIGameSystemSetup
local ClientManager = CS.ClientManager.Instance
local InputManager = CS.InputManager
SettingsCtrl._mapNodeConfig = {
txtWeekDay = {sComponentName = "TMP_Text"},
txtTime1 = {sComponentName = "TMP_Text"},
txtTime2 = {sComponentName = "TMP_Text"},
aniRoot = {
sNodeName = "----Content----",
sComponentName = "Animator"
},
btnClose = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
Page1 = {
sCtrlName = "Game.UI.Settings.SettingsAcountCtrl"
},
Page2 = {
sCtrlName = "Game.UI.Settings.SettingsGraphicCtrl"
},
Page3 = {
sCtrlName = "Game.UI.Settings.SettingsSoundCtrl"
},
Page4 = {
sCtrlName = "Game.UI.Settings.SettingsBattleCtrl"
},
Page5 = {
sCtrlName = "Game.UI.Settings.SettingsLanguageCtrl"
},
Page6 = {
sCtrlName = "Game.UI.Settings.SettingsNotificationCtrl"
},
Page7 = {
sCtrlName = "Game.UI.Settings.SettingsKeyboardCtrl"
},
Page8 = {
sCtrlName = "Game.UI.Settings.SettingsGamepadCtrl"
},
cgPage = {
nCount = 8,
sNodeName = "Page",
sComponentName = "CanvasGroup"
},
trPage = {
nCount = 8,
sNodeName = "Page",
sComponentName = "Transform"
},
btnPage = {
nCount = 8,
sComponentName = "UIButton",
callback = "OnBtnClick_Page"
},
imgOn = {nCount = 8},
aniTab = {sNodeName = "---Tab---", sComponentName = "Animator"},
scTab = {
sNodeName = "scrollTab",
sComponentName = "UIScrollToClick"
},
blur = {
sNodeName = "t_fullscreen_blur_blue"
},
aniBlur = {
sNodeName = "t_fullscreen_blur_blue",
sComponentName = "Animator"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_ClosePop"
},
Language = {
sNodeName = "---Language---",
sCtrlName = "Game.UI.Settings.SettingsLangPkgCtrl"
},
Resolution = {
sNodeName = "---Resolution---",
sCtrlName = "Game.UI.Settings.SettingsResolutionCtrl"
},
GemPop = {
sNodeName = "---Gem---",
sCtrlName = "Game.UI.Settings.SettingsGemCtrl"
},
LogBtn = {sComponentName = "Button"},
ShowBtn = {sComponentName = "Button"}
}
SettingsCtrl._mapEventConfig = {
SettingsLanguage = "OnEvent_Language",
SettingsResolution = "OnEvent_Resolution",
SettingsClosePop = "OnBtnClick_ClosePop",
Setting_GemDetail = "OnEvent_Stone"
}
function SettingsCtrl:InitPageState()
self.pageIndex = 1
for i = 1, 8 do
if i == 1 then
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], true)
self._mapNode.imgOn[i]:SetActive(true)
self._mapNode["Page" .. i]:Init()
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[i], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[i], false)
self._mapNode.imgOn[i]:SetActive(false)
end
end
local bMobile = NovaAPI.IsMobilePlatform()
self._mapNode.btnPage[7].gameObject:SetActive(not bMobile)
if bMobile then
local bAble = false
self._mapNode.btnPage[8].gameObject:SetActive(bAble)
self._mapNode.btnPage[5].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(bAble)
else
self._mapNode.btnPage[8].gameObject:SetActive(true)
self._mapNode.btnPage[5].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(true)
end
self._mapNode.txtTime1.gameObject:SetActive(false)
self._mapNode.txtTime2.gameObject:SetActive(false)
self._mapNode.txtWeekDay.gameObject:SetActive(false)
end
function SettingsCtrl:RefreshTime()
local curTime = ClientManager.serverTimeStamp
NovaAPI.SetTMPText(self._mapNode.txtTime1, (os.date("%I:%M", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtTime2, (os.date("%p", curTime)))
NovaAPI.SetTMPText(self._mapNode.txtWeekDay, ConfigTable.GetUIText("Settings_Weekday" .. tonumber(os.date("%w")) + 1))
end
function SettingsCtrl:Awake()
end
function SettingsCtrl:OnEnable()
self._mapNode.aniRoot:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:InitPageState()
self._mapNode.ShowBtn.gameObject:SetActive(false)
self._mapNode.LogBtn.gameObject:SetActive(false)
EventManager.Hit("PlayerLog", self._mapNode.LogBtn)
EventManager.Hit("ShowSettingsG", self._mapNode.ShowBtn)
end
function SettingsCtrl:OnDisable()
local nUID = PlayerData.Base:GetPlayerId()
CS.InputManager.Instance:SaveBindingOverrides(nUID)
end
function SettingsCtrl:OnDestroy()
end
function SettingsCtrl:OnBtnClick_Close()
self._mapNode.aniRoot:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, function()
EventManager.Hit(EventId.ClosePanel, PanelId.Settings)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function SettingsCtrl:OnBtnClick_Page(btn, index)
if self.pageIndex == index then
return
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[self.pageIndex], 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[self.pageIndex], false)
self._mapNode.imgOn[self.pageIndex]:SetActive(false)
self._mapNode["Page" .. self.pageIndex]:Quit()
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgPage[index], 1)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgPage[index], true)
self._mapNode.imgOn[index]:SetActive(true)
self._mapNode["Page" .. index]:Init()
self._mapNode.aniTab:Play("Tab_btnPage" .. index)
self.pageIndex = index
self._mapNode.scTab:ScrollToClick(btn.gameObject, 0.1)
local scrollRect = self._mapNode.trPage[index]:Find("sv"):GetComponent("ScrollRect")
NovaAPI.SetVerticalNormalizedPosition(scrollRect, 1)
end
function SettingsCtrl:OnBtnClick_ClosePop()
if self.ctrlPop then
self.ctrlPop:PlayOutAni()
self.ctrlPop = nil
end
self._mapNode.aniBlur:SetTrigger("tOut")
self:AddTimer(1, 0.2, function()
self._mapNode.blur:SetActive(false)
end, true, true, true)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function SettingsCtrl:OnEvent_Language(tbVoAvailable, tbDownload)
self.ctrlPop = self._mapNode.Language
self._mapNode.Language:Open(tbVoAvailable, tbDownload)
self._mapNode.blur:SetActive(true)
end
function SettingsCtrl:OnEvent_Resolution(nResolution, tbResolution)
self.ctrlPop = self._mapNode.Resolution
self._mapNode.Resolution:Open(nResolution, tbResolution)
self._mapNode.blur:SetActive(true)
end
function SettingsCtrl:OnEvent_Stone()
self.ctrlPop = self._mapNode.GemPop
self._mapNode.GemPop:Open()
self._mapNode.blur:SetActive(true)
end
function SettingsCtrl:OnEvent_DeviceChange(changeType)
if not NovaAPI.IsMobilePlatform() then
return
end
if changeType.value__ == 0 then
local nType = InputManager.Instance:CheckGamepadType()
if nType == InputManager.GamepadType.PS or nType == InputManager.GamepadType.XBox then
self._mapNode.btnPage[8].gameObject:SetActive(true)
self._mapNode.btnPage[5].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(true)
end
elseif changeType.value__ == 1 then
self._mapNode.btnPage[8].gameObject:SetActive(false)
self._mapNode.btnPage[5].gameObject.transform:Find("AnimRoot/line").gameObject:SetActive(false)
if self.pageIndex == 8 then
self:OnBtnClick_Page(self._mapNode.btnPage[1], 1)
end
end
end
return SettingsCtrl
@@ -0,0 +1,241 @@
local SettingsGamepadCtrl = class("SettingsGamepadCtrl", BaseCtrl)
local InputManager = CS.InputManager
SettingsGamepadCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Gamepad"
},
txtBindingTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Gamepad_Binding"
},
OptionBinding = {
nCount = 8,
sCtrlName = "Game.UI.Settings.OptionBindingCtrl"
},
txtBtnReset = {sComponentName = "TMP_Text", sLanguageId = "Reset"},
btnReset = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reset"
},
Xbox = {},
txtXbox_LT = {sComponentName = "TMP_Text"},
txtXbox_LB = {sComponentName = "TMP_Text"},
txtXbox_Left_Stick = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Move"
},
txtXbox_Menu = {sComponentName = "TMP_Text", sLanguageId = "Action_Map"},
txtXbox_Windows = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Depot"
},
txtXbox_AutoBattle = {
sComponentName = "TMP_Text",
sLanguageId = "Action_AutoBattle"
},
txtXbox_RT = {sComponentName = "TMP_Text"},
txtXbox_RB = {sComponentName = "TMP_Text"},
txtXbox_Y = {sComponentName = "TMP_Text"},
txtXbox_B = {sComponentName = "TMP_Text"},
txtXbox_A = {sComponentName = "TMP_Text"},
txtXbox_X = {sComponentName = "TMP_Text"},
PlayStation = {},
txtPS_L2 = {sComponentName = "TMP_Text"},
txtPS_L1 = {sComponentName = "TMP_Text"},
txtPS_Left_Stick = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Move"
},
txtPS_Share = {sComponentName = "TMP_Text", sLanguageId = "Action_Map"},
txtPS_Options = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Depot"
},
txtPS_AutoBattle = {
sComponentName = "TMP_Text",
sLanguageId = "Action_AutoBattle"
},
txtPS_R2 = {sComponentName = "TMP_Text"},
txtPS_R1 = {sComponentName = "TMP_Text"},
txtPS_Triangle = {sComponentName = "TMP_Text"},
txtPS_Circle = {sComponentName = "TMP_Text"},
txtPS_Cross = {sComponentName = "TMP_Text"},
txtPS_Square = {sComponentName = "TMP_Text"}
}
SettingsGamepadCtrl._mapEventConfig = {
LuaEventName_LastInputDeviceChange = "OnEvent_LastInputDeviceChange",
LuaEventName_OnDeviceChange = "OnEvent_DeviceChange",
SettingsRefreshDisplay = "OnEvent_RefreshDisplay"
}
function SettingsGamepadCtrl:RefreshText()
for i = 1, 8 do
self._mapNode.OptionBinding[i]:SetText(ConfigTable.GetUIText("Action_" .. self._panel.Action[i]))
end
end
function SettingsGamepadCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsGamepadCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsGamepadCtrl:LoadSetting()
self._panel.mapGamepadBind = {}
for _, v in ipairs(self._panel.Action) do
local bHas, tbControl = InputManager.Instance:GetInputActionConfig(v)
if bHas then
for i = 0, tbControl.Count - 1 do
local mapControl = tbControl[i]
if mapControl.isGamepad then
self._panel.mapGamepadBind[v] = mapControl.name
break
end
end
end
end
self:InitGamepadType()
end
function SettingsGamepadCtrl:SaveSetting()
for _, v in ipairs(self._panel.Action) do
InputManager.Instance:OverrideButtonBinding(v, self._panel.ControlType.Gamepad, "<Gamepad>/" .. self._panel.mapGamepadBind[v])
if v == "Fire1" then
InputManager.Instance:OverrideButtonBinding("Fire3", self._panel.ControlType.Gamepad, "<Gamepad>/" .. self._panel.mapGamepadBind[v])
end
end
end
function SettingsGamepadCtrl:InitGamepadType()
self._mapNode.PlayStation:SetActive(self.bPS)
self._mapNode.Xbox:SetActive(not self.bPS)
for i = 1, 8 do
local sAction = self._panel.Action[i]
self._mapNode.OptionBinding[i]:Init(3, sAction, self._panel.mapGamepadBind[sAction], nil, self.bPS)
end
self:RefreshDisplay()
end
function SettingsGamepadCtrl:ChangeGamepadType(bPS)
self.bPS = bPS
self._mapNode.PlayStation:SetActive(self.bPS)
self._mapNode.Xbox:SetActive(not self.bPS)
for i = 1, 8 do
self._mapNode.OptionBinding[i]:ChangeGamepad(bPS)
end
self:RefreshDisplay()
end
function SettingsGamepadCtrl:RefreshDisplay()
local sLTAction = table.keyof(self._panel.mapGamepadBind, "leftTrigger")
local sLBAction = table.keyof(self._panel.mapGamepadBind, "leftShoulder")
local sRTAction = table.keyof(self._panel.mapGamepadBind, "rightTrigger")
local sRBAction = table.keyof(self._panel.mapGamepadBind, "rightShoulder")
local sYAction = table.keyof(self._panel.mapGamepadBind, "buttonNorth")
local sBAction = table.keyof(self._panel.mapGamepadBind, "buttonEast")
local sAAction = table.keyof(self._panel.mapGamepadBind, "buttonSouth")
local sXAction = table.keyof(self._panel.mapGamepadBind, "buttonWest")
if self.bPS then
NovaAPI.SetTMPText(self._mapNode.txtPS_L2, ConfigTable.GetUIText("Action_" .. sLTAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_L1, ConfigTable.GetUIText("Action_" .. sLBAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_R2, ConfigTable.GetUIText("Action_" .. sRTAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_R1, ConfigTable.GetUIText("Action_" .. sRBAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_Triangle, ConfigTable.GetUIText("Action_" .. sYAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_Circle, ConfigTable.GetUIText("Action_" .. sBAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_Cross, ConfigTable.GetUIText("Action_" .. sAAction))
NovaAPI.SetTMPText(self._mapNode.txtPS_Square, ConfigTable.GetUIText("Action_" .. sXAction))
else
NovaAPI.SetTMPText(self._mapNode.txtXbox_LT, ConfigTable.GetUIText("Action_" .. sLTAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_LB, ConfigTable.GetUIText("Action_" .. sLBAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_RT, ConfigTable.GetUIText("Action_" .. sRTAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_RB, ConfigTable.GetUIText("Action_" .. sRBAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_Y, ConfigTable.GetUIText("Action_" .. sYAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_B, ConfigTable.GetUIText("Action_" .. sBAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_A, ConfigTable.GetUIText("Action_" .. sAAction))
NovaAPI.SetTMPText(self._mapNode.txtXbox_X, ConfigTable.GetUIText("Action_" .. sXAction))
end
end
function SettingsGamepadCtrl:Awake()
self.bInit = false
self:RefreshText()
local nType = InputManager.Instance:CheckGamepadType()
self.bPS = nType == InputManager.GamepadType.PS
end
function SettingsGamepadCtrl:OnEnable()
end
function SettingsGamepadCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsGamepadCtrl:OnDestroy()
end
function SettingsGamepadCtrl:OnBtnClick_Reset()
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Settings_Tip_Reset"),
callbackConfirm = function()
local nUID = PlayerData.Base:GetPlayerId()
InputManager.Instance:ResetBindingOverrides(nUID)
self:LoadSetting()
local mapMsg = {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = ConfigTable.GetUIText("Settings_KeyReset")
}
EventManager.Hit(EventId.OpenMessageBox, mapMsg)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function SettingsGamepadCtrl:OnEvent_LastInputDeviceChange(nType)
if not self.bInit then
return
end
if nType == InputManager.InputDeviceType.PSGamepad then
self:ChangeGamepadType(true)
elseif nType == InputManager.InputDeviceType.XBoxGamepad or nType == InputManager.InputDeviceType.Other then
self:ChangeGamepadType(false)
end
end
function SettingsGamepadCtrl:OnEvent_DeviceChange(changeType)
if not self.bInit then
return
end
if changeType.value__ == 0 or changeType.value__ == 1 then
local nType = InputManager.Instance:CheckGamepadType()
self:ChangeGamepadType(nType == InputManager.GamepadType.PS)
end
end
function SettingsGamepadCtrl:OnEvent_RefreshDisplay(sAction, sName)
local sTitle = ConfigTable.GetUIText("Action_" .. sAction)
if sName == "leftTrigger" then
NovaAPI.SetTMPText(self._mapNode.txtPS_L2, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_LT, sTitle)
elseif sName == "leftShoulder" then
NovaAPI.SetTMPText(self._mapNode.txtPS_L1, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_LB, sTitle)
elseif sName == "rightTrigger" then
NovaAPI.SetTMPText(self._mapNode.txtPS_R2, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_RT, sTitle)
elseif sName == "rightShoulder" then
NovaAPI.SetTMPText(self._mapNode.txtPS_R1, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_RB, sTitle)
elseif sName == "buttonNorth" then
NovaAPI.SetTMPText(self._mapNode.txtPS_Triangle, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_Y, sTitle)
elseif sName == "buttonEast" then
NovaAPI.SetTMPText(self._mapNode.txtPS_Circle, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_B, sTitle)
elseif sName == "buttonSouth" then
NovaAPI.SetTMPText(self._mapNode.txtPS_Cross, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_A, sTitle)
elseif sName == "buttonWest" then
NovaAPI.SetTMPText(self._mapNode.txtPS_Square, sTitle)
NovaAPI.SetTMPText(self._mapNode.txtXbox_X, sTitle)
end
end
return SettingsGamepadCtrl
+66
View File
@@ -0,0 +1,66 @@
local SettingsGemCtrl = class("SettingsGemCtrl", BaseCtrl)
SettingsGemCtrl._mapNodeConfig = {
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnConfirm2 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
txtBtnConfirm = {sComponentName = "TMP_Text", sLanguageId = "BtnConfirm"},
txtWindowTitle = {sComponentName = "TMP_Text"},
txt_allStoneTitle = {sComponentName = "TMP_Text"},
txt_StoneTitle = {sComponentName = "TMP_Text"},
txt_freeStoneTitle = {sComponentName = "TMP_Text"},
txt_allStoneCount = {sComponentName = "TMP_Text"},
txt_StoneCount = {sComponentName = "TMP_Text"},
txt_freeStoneCount = {sComponentName = "TMP_Text"},
txt_tips = {sComponentName = "TMP_Text"}
}
SettingsGemCtrl._mapEventConfig = {}
function SettingsGemCtrl:Open()
self:Refresh()
self:PlayInAni()
end
function SettingsGemCtrl:Refresh()
local nSTONE = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
local nFREESTONE = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.FREESTONE)
local stoneConfig = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
local freestoneConfig = ConfigTable.GetData_Item(AllEnum.CoinItemId.FREESTONE)
local sTitle = orderedFormat(ConfigTable.GetUIText("Settings_Account_Gem"), stoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txtWindowTitle, sTitle)
NovaAPI.SetTMPText(self._mapNode.txt_allStoneTitle, ConfigTable.GetUIText("Settings_Gem_Detai_AllStone") .. stoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txt_StoneTitle, ConfigTable.GetUIText("Settings_Gem_Detai_Stone") .. stoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txt_freeStoneTitle, ConfigTable.GetUIText("Settings_Gem_Detai_FreeStone") .. freestoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txt_allStoneCount, nSTONE + nFREESTONE)
NovaAPI.SetTMPText(self._mapNode.txt_StoneCount, nSTONE)
NovaAPI.SetTMPText(self._mapNode.txt_freeStoneCount, nFREESTONE)
local sTips = orderedFormat(ConfigTable.GetUIText("Settings_Gem_Detai_Tips"), stoneConfig.Title)
NovaAPI.SetTMPText(self._mapNode.txt_tips, sTips)
end
function SettingsGemCtrl:PlayInAni()
self.gameObject:SetActive(true)
self.ani:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function SettingsGemCtrl:PlayOutAni()
self.ani:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, "Close", true, true, true)
end
function SettingsGemCtrl:Close()
self.gameObject:SetActive(false)
end
function SettingsGemCtrl:Awake()
self.ani = self.gameObject.transform:GetComponent("Animator")
end
function SettingsGemCtrl:OnEnable()
end
function SettingsGemCtrl:OnDisable()
end
function SettingsGemCtrl:OnDestroy()
end
function SettingsGemCtrl:OnBtnClick_Close()
EventManager.Hit("SettingsClosePop")
end
return SettingsGemCtrl
@@ -0,0 +1,272 @@
local SettingsGraphicCtrl = class("SettingsGraphicCtrl", BaseCtrl)
local ModuleManager = require("GameCore.Module.ModuleManager")
local GameRenderingSettingManager = CS.GameRenderingSettingManager
local UIGameSystemSetup = CS.UIGameSystemSetup
local GraphicQualityLevelEnum = {
GameRenderingSettingManager.QualityLevel.Low,
GameRenderingSettingManager.QualityLevel.Medium,
GameRenderingSettingManager.QualityLevel.High
}
local GraphicOptionIndex = {
ResolutionRatio = 1,
FrameRate = 2,
ShadingQuality = 3,
LightShadow = 4,
AntAliasing = 5
}
SettingsGraphicCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Display"
},
txtShadingQuality = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Display_ShadingQuality"
},
txtWindowResolution = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Display_WindowResolution"
},
btnWindowResolution = {
sComponentName = "UIButton",
callback = "OnBtnClick_WindowResolution"
},
imgResolutionGray = {},
txtResolutionValue = {nCount = 2, sComponentName = "TMP_Text"},
Screen = {
sCtrlName = "Game.UI.Settings.OptionUpdateChooseCtrl"
},
WindowResolution = {},
L2dSwitch = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
VsyncSwitch = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
ShadingQuality = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
ResolutionRatio = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
FrameRate = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
Shadow = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
AntAliasing = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
txtWidescreen = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Display_Widescreen"
},
txtBtnWidescreen = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Go"
},
btnWidescreen = {
sComponentName = "UIButton",
callback = "OnBtnClick_Widescreen"
}
}
SettingsGraphicCtrl._mapEventConfig = {
SettingsSetResolution = "OnEvent_SetResolution"
}
function SettingsGraphicCtrl:RefreshText()
if not NovaAPI.IsMobilePlatform() then
self._mapNode.Screen:SetText(ConfigTable.GetUIText("Settings_Display_Screen_Full"), ConfigTable.GetUIText("Settings_Display_Screen_Window"), nil, ConfigTable.GetUIText("Settings_Display_Screen"))
end
self._mapNode.L2dSwitch:SetText(ConfigTable.GetUIText("Settings_L2d"))
self._mapNode.ShadingQuality:SetText(ConfigTable.GetUIText("Settings_Display_ShadingQuality_Low"), ConfigTable.GetUIText("Settings_Display_ShadingQuality_Medium"), ConfigTable.GetUIText("Settings_Display_ShadingQuality_High"), ConfigTable.GetUIText("Settings_Display_ShadingQuality"))
if NovaAPI.IsMobilePlatform() then
self._mapNode.ResolutionRatio:SetText(ConfigTable.GetUIText("Settings_Display_ResolutionRatio_Low"), ConfigTable.GetUIText("Settings_Display_ResolutionRatio_Medium"), ConfigTable.GetUIText("Settings_Display_ResolutionRatio_High"), ConfigTable.GetUIText("Settings_Display_ResolutionRatio"))
end
self._mapNode.FrameRate:SetText(ConfigTable.GetUIText("Settings_Display_FrameRate_Low"), ConfigTable.GetUIText("Settings_Display_FrameRate_Medium"), ConfigTable.GetUIText("Settings_Display_FrameRate_High"), ConfigTable.GetUIText("Settings_Display_FrameRate"))
self._mapNode.Shadow:SetText(ConfigTable.GetUIText("Settings_Display_Shadow_Low"), ConfigTable.GetUIText("Settings_Display_Shadow_Medium"), ConfigTable.GetUIText("Settings_Display_Shadow_High"), ConfigTable.GetUIText("Settings_Display_Shadow"))
self._mapNode.AntAliasing:SetText(ConfigTable.GetUIText("Settings_Display_AntAliasing_Low"), ConfigTable.GetUIText("Settings_Display_AntAliasing_Medium"), ConfigTable.GetUIText("Settings_Display_AntAliasing_High"), ConfigTable.GetUIText("Settings_Display_AntAliasing"))
if not NovaAPI.IsMobilePlatform() then
self._mapNode.VsyncSwitch:SetText(ConfigTable.GetUIText("Settings_Vsync"))
end
end
function SettingsGraphicCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsGraphicCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsGraphicCtrl:LoadSetting()
self.optionLevelIndex = {}
if NovaAPI.IsMobilePlatform() then
self.optionLevelIndex[GraphicOptionIndex.ResolutionRatio] = 1
end
self.optionLevelIndex[GraphicOptionIndex.FrameRate] = 1
self.optionLevelIndex[GraphicOptionIndex.ShadingQuality] = 1
self.optionLevelIndex[GraphicOptionIndex.LightShadow] = 1
self.optionLevelIndex[GraphicOptionIndex.AntAliasing] = 1
for i = 1, #GraphicQualityLevelEnum do
if NovaAPI.IsMobilePlatform() and GameRenderingSettingManager.Instance.resolutionScaleQualityTier == GraphicQualityLevelEnum[i] then
self.optionLevelIndex[GraphicOptionIndex.ResolutionRatio] = i
self._mapNode.ResolutionRatio:Init(function(index)
GameRenderingSettingManager.Instance.resolutionScaleQualityTier = GraphicQualityLevelEnum[index]
self.optionLevelIndex[GraphicOptionIndex.ResolutionRatio] = index
EventManager.Hit(EventId.MarkFullRectWH)
end, i)
end
if GameRenderingSettingManager.Instance.frameRateQualityTier == GraphicQualityLevelEnum[i] then
self.optionLevelIndex[GraphicOptionIndex.FrameRate] = i
self._mapNode.FrameRate:Init(function(index)
GameRenderingSettingManager.Instance.frameRateQualityTier = GraphicQualityLevelEnum[index]
self.optionLevelIndex[GraphicOptionIndex.FrameRate] = index
end, i)
end
if GameRenderingSettingManager.Instance.shadingQualityTier == GraphicQualityLevelEnum[i] then
self.optionLevelIndex[GraphicOptionIndex.ShadingQuality] = i
self._mapNode.ShadingQuality:Init(function(index)
GameRenderingSettingManager.Instance.shadingQualityTier = GraphicQualityLevelEnum[index]
self.optionLevelIndex[GraphicOptionIndex.ShadingQuality] = index
end, i)
end
if GameRenderingSettingManager.Instance.lightShadowQualityTier == GraphicQualityLevelEnum[i] then
self.optionLevelIndex[GraphicOptionIndex.LightShadow] = i
self._mapNode.Shadow:Init(function(index)
GameRenderingSettingManager.Instance.lightShadowQualityTier = GraphicQualityLevelEnum[index]
self.optionLevelIndex[GraphicOptionIndex.LightShadow] = index
end, i)
end
if GameRenderingSettingManager.Instance.antialiasingQualityTier == GraphicQualityLevelEnum[i] then
self.optionLevelIndex[GraphicOptionIndex.AntAliasing] = i
self._mapNode.AntAliasing:Init(function(index)
GameRenderingSettingManager.Instance.antialiasingQualityTier = GraphicQualityLevelEnum[index]
self.optionLevelIndex[GraphicOptionIndex.AntAliasing] = index
end, i)
end
end
if not NovaAPI.IsMobilePlatform() then
self.nScreen = GameRenderingSettingManager.Instance:IsFullScreen() and 1 or 2
self:RefreshScreen()
self.timer = self:AddTimer(0, 0.034, function()
self.nScreen = GameRenderingSettingManager.Instance:IsFullScreen() and 1 or 2
if self.nBeforeScreen ~= self.nScreen then
self:ForceChange1080p(self.nBeforeScreen, self.nScreen)
self:RefreshScreen()
end
end, true, true, true)
self.nResolution = GameRenderingSettingManager.Instance:GetCurrentResolutionIndex() + 1
self:ChangeWindowResolution(self.nResolution)
end
self.bUseLive2D = self._panel:LoadLocalData("UseLive2D")
self._mapNode.L2dSwitch:Init(function()
self.bUseLive2D = not self.bUseLive2D
EventManager.Hit("SettingsChangeL2d", self.bUseLive2D)
self._panel:SaveLocalData("UseLive2D", self.bUseLive2D)
end, self.bUseLive2D)
if not NovaAPI.IsMobilePlatform() then
self.bVsync = GameRenderingSettingManager.Instance.vSyncEnabled
self._mapNode.VsyncSwitch:Init(function()
self.bVsync = not self.bVsync
GameRenderingSettingManager.Instance.vSyncEnabled = self.bVsync
end, self.bVsync)
end
end
function SettingsGraphicCtrl:SaveSetting()
GameRenderingSettingManager.Instance:SaveSetting()
end
function SettingsGraphicCtrl:ChangeWindowResolution(nIndex)
if nIndex then
for i = 1, 2 do
NovaAPI.SetTMPText(self._mapNode.txtResolutionValue[i], self.tbResolution[nIndex])
end
end
end
function SettingsGraphicCtrl:RefreshScreen()
self._mapNode.Screen:Init(function(index, callback)
GameRenderingSettingManager.Instance:SetScreenResolution(self.nResolution - 1, index == 1)
local nCur = GameRenderingSettingManager.Instance:IsFullScreen() and 1 or 2
if nCur == index then
callback()
self.nBeforeScreen = self.nScreen
self.nScreen = index
self:ForceChange1080p(self.nBeforeScreen, index)
end
end, self.nScreen, 2)
self.nBeforeScreen = self.nScreen
end
function SettingsGraphicCtrl:ForceChange1080p(nBefore, nAfter)
if nBefore == 1 and nAfter == 2 then
local nCount = #self.tbResolution
local nMax = 4 <= nCount and 4 or nCount
for i = 1, nMax do
if string.find(self.tbResolution[i], "1920") then
EventManager.Hit("SettingsSetResolution", i)
return
end
end
end
end
function SettingsGraphicCtrl:Awake()
self.bInit = false
local bMobile = NovaAPI.IsMobilePlatform()
self._mapNode.Screen.gameObject:SetActive(not bMobile)
self._mapNode.WindowResolution.gameObject:SetActive(not bMobile)
self._mapNode.ResolutionRatio.gameObject:SetActive(bMobile)
self._mapNode.VsyncSwitch.gameObject:SetActive(not bMobile)
if not bMobile then
local tbSupport = GameRenderingSettingManager.Instance:GetSupportScreenResolutions()
self.tbResolution = {}
for i = 0, tbSupport.Length - 1 do
table.insert(self.tbResolution, tbSupport[i].x .. "×" .. tbSupport[i].y)
end
end
self:RefreshText()
end
function SettingsGraphicCtrl:OnEnable()
end
function SettingsGraphicCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
if self.timer ~= nil then
self.timer:Cancel()
self.timer = nil
end
end
function SettingsGraphicCtrl:OnDestroy()
end
function SettingsGraphicCtrl:OnBtnClick_WindowResolution()
if next(self.tbResolution) == nil then
return
end
EventManager.Hit("SettingsResolution", self.nResolution, self.tbResolution)
end
function SettingsGraphicCtrl:OnEvent_SetResolution(nIndex)
self.nResolution = nIndex
GameRenderingSettingManager.Instance:SetScreenResolution(self.nResolution - 1, self.nScreen == 1)
self:ChangeWindowResolution(self.nResolution)
end
function SettingsGraphicCtrl:OnBtnClick_Widescreen()
if ModuleManager.GetIsAdventure() then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Widescreen_BattleUnable"))
elseif Settings.CURRENT_CANVAS_FULL_RECT_WIDTH / Settings.CURRENT_CANVAS_FULL_RECT_HEIGHT <= 2 then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Settings_Widescreen_ScreenUnable"),
callbackConfirm = function()
EventManager.Hit(EventId.OpenPanel, PanelId.SettingsPreview)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
else
EventManager.Hit(EventId.OpenPanel, PanelId.SettingsPreview)
end
end
return SettingsGraphicCtrl
@@ -0,0 +1,218 @@
local SettingsKeyboardCtrl = class("SettingsKeyboardCtrl", BaseCtrl)
local InputManager = CS.InputManager
local MouseName = {
leftButton = 1,
rightButton = 2,
middleButton = 3,
backButton = 4,
forwardButton = 5
}
SettingsKeyboardCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard"
},
txtBindingTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_Binding"
},
OptionBinding = {
nCount = 8,
sCtrlName = "Game.UI.Settings.OptionKeyboardBindingCtrl"
},
OptionBindingMove = {
nCount = 4,
sCtrlName = "Game.UI.Settings.OptionKeyboardBindingCtrl"
},
txtBtnReset = {sComponentName = "TMP_Text", sLanguageId = "Reset"},
btnReset = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reset"
},
txtBindTitle1 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_BindingGroup1"
},
txtBindTitle2 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_BindingGroup2"
},
txtOptionTitleBack = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Back"
},
txtKeyboardBack = {sComponentName = "TMP_Text"}
}
SettingsKeyboardCtrl._mapEventConfig = {}
function SettingsKeyboardCtrl:RefreshText()
for i = 1, 4 do
self._mapNode.OptionBindingMove[i]:SetText(ConfigTable.GetUIText("Action_" .. self._panel.Move[i]))
end
for i = 1, 8 do
self._mapNode.OptionBinding[i]:SetText(ConfigTable.GetUIText("Action_" .. self._panel.Action[i]))
end
NovaAPI.SetTMPText(self._mapNode.txtKeyboardBack, "Esc")
end
function SettingsKeyboardCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsKeyboardCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsKeyboardCtrl:LoadSetting()
self._panel.mapKeyboardBind = {}
for _, v in ipairs(self._panel.Action) do
local bHas, tbControl = InputManager.Instance:GetInputActionConfig(v)
if bHas then
if tbControl.Count ~= 3 then
printError("input config数量不为3,缺失配置")
return
end
self._panel.mapKeyboardBind[v] = {}
for i = 0, tbControl.Count - 1 do
local mapControl = tbControl[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
self._panel.mapKeyboardBind[v][i] = {
name = mapControl.name,
displayName = mapControl.displayName
}
end
end
end
end
local bHorizontal, tbHorizontal = InputManager.Instance:GetInputActionConfig("Horizontal")
if bHorizontal then
if tbHorizontal.Count ~= 7 then
printError("input config数量不为7,缺失配置")
return
end
self._panel.mapKeyboardBind.Right = {}
self._panel.mapKeyboardBind.Left = {}
local nPositiveIndex, nNegativeIndex = 1, 1
for i = 0, tbHorizontal.Count - 1 do
local mapControl = tbHorizontal[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
if mapControl.isPositive then
self._panel.mapKeyboardBind.Right[nPositiveIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nPositiveIndex = nPositiveIndex + 1
elseif mapControl.isNegative then
self._panel.mapKeyboardBind.Left[nNegativeIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nNegativeIndex = nNegativeIndex + 1
end
end
end
end
local bVertical, tbVertical = InputManager.Instance:GetInputActionConfig("Vertical")
if bVertical then
if tbVertical.Count ~= 7 then
printError("input config数量不为7,缺失配置")
return
end
self._panel.mapKeyboardBind.Up = {}
self._panel.mapKeyboardBind.Down = {}
local nPositiveIndex, nNegativeIndex = 1, 1
for i = 0, tbVertical.Count - 1 do
local mapControl = tbVertical[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
if mapControl.isPositive then
self._panel.mapKeyboardBind.Up[nPositiveIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nPositiveIndex = nPositiveIndex + 1
elseif mapControl.isNegative then
self._panel.mapKeyboardBind.Down[nNegativeIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nNegativeIndex = nNegativeIndex + 1
end
end
end
end
self:RefreshOption()
end
function SettingsKeyboardCtrl:RefreshOption()
for i = 1, 4 do
local sAction = self._panel.Move[i]
self._mapNode.OptionBindingMove[i]:Init(sAction)
end
for i = 1, 8 do
local sAction = self._panel.Action[i]
self._mapNode.OptionBinding[i]:Init(sAction)
end
end
function SettingsKeyboardCtrl:SaveSetting()
local device = function(sAction, nIndex)
local mapInput = self._panel.mapKeyboardBind[sAction][nIndex]
if mapInput.name == "" then
return ""
end
local bMouse = MouseName[mapInput.name] ~= nil
local sPre = bMouse and "<Mouse>/" or "<Keyboard>/"
return sPre .. mapInput.name
end
for _, v in ipairs(self._panel.Action) do
for i = 1, 2 do
InputManager.Instance:OverrideButtonBinding(v, i, device(v, i))
if v == "Fire1" then
InputManager.Instance:OverrideButtonBinding("Fire3", i, device(v, i))
end
end
end
for i = 1, 2 do
InputManager.Instance:OverrideButtonBinding("Horizontal", i * 3, device("Right", i))
InputManager.Instance:OverrideButtonBinding("Horizontal", i * 3 - 1, device("Left", i))
InputManager.Instance:OverrideButtonBinding("Vertical", i * 3, device("Up", i))
InputManager.Instance:OverrideButtonBinding("Vertical", i * 3 - 1, device("Down", i))
end
end
function SettingsKeyboardCtrl:Awake()
self.bInit = false
self:RefreshText()
end
function SettingsKeyboardCtrl:OnEnable()
end
function SettingsKeyboardCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsKeyboardCtrl:OnDestroy()
end
function SettingsKeyboardCtrl:OnBtnClick_Reset()
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Settings_Tip_Reset"),
callbackConfirm = function()
local nUID = PlayerData.Base:GetPlayerId()
InputManager.Instance:ResetBindingOverrides(nUID)
self:LoadSetting()
local mapMsg = {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = ConfigTable.GetUIText("Settings_KeyReset")
}
EventManager.Hit(EventId.OpenMessageBox, mapMsg)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
return SettingsKeyboardCtrl
@@ -0,0 +1,168 @@
local SettingsLangPkgCtrl = class("SettingsLangPkgCtrl", BaseCtrl)
SettingsLangPkgCtrl._mapNodeConfig = {
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Language_Package"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Download"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Back"
},
Option = {nCount = 2},
txtOptionTitle = {nCount = 2, sComponentName = "TMP_Text"},
txtState = {nCount = 2, sComponentName = "TMP_Text"},
btnDownload = {
nCount = 2,
sComponentName = "UIButton",
callback = "OnBtnClick_Download"
},
Checkmark = {nCount = 2, sComponentName = "Animator"},
txtBackTip = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_LangPkg_BackTip"
},
txtVoJpTip = {
sComponentName = "TMP_Text",
sLanguageId = "SwitchToJPLanTips2"
}
}
SettingsLangPkgCtrl._mapEventConfig = {}
function SettingsLangPkgCtrl:Open(tbVoAvailable, tbDownload)
self.tbVoAvailable = tbVoAvailable
self.tbDownload = tbDownload
self.tbEnableState = {}
self:Refresh()
self:PlayInAni()
end
function SettingsLangPkgCtrl:Refresh()
local nCount = #self.tbVoAvailable
for i = 1, 2 do
if i > nCount then
self._mapNode.Option[i]:SetActive(false)
else
self._mapNode.Option[i]:SetActive(true)
do
local mapDownloadData = self.tbDownload[self.tbVoAvailable[i]]
if mapDownloadData.nTotalSize == 0 then
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle[i], self.tbLang[self.tbVoAvailable[i]])
else
local nSize = math.ceil(mapDownloadData.nTotalSize / 1048576)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle[i], self.tbLang[self.tbVoAvailable[i]] .. " (" .. nSize .. "MB)")
end
local bDownload = mapDownloadData.bDownloaded
self._mapNode.btnDownload[i].gameObject:SetActive(not bDownload)
self._mapNode.txtState[i].gameObject:SetActive(bDownload)
if bDownload then
NovaAPI.SetTMPText(self._mapNode.txtState[i], ConfigTable.GetUIText("Settings_LangPkg_Downloaded"))
else
self.tbEnableState[self.tbVoAvailable[i]] = false
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.Checkmark[i]:Play("checkmark_out", -1, 1)
end
cs_coroutine.start(wait)
end
end
end
end
end
function SettingsLangPkgCtrl:PlayInAni()
self.gameObject:SetActive(true)
self.ani:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function SettingsLangPkgCtrl:PlayOutAni()
self.ani:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, "Close", true, true, true)
end
function SettingsLangPkgCtrl:Close()
self.gameObject:SetActive(false)
end
function SettingsLangPkgCtrl:Awake()
self.ani = self.gameObject.transform:GetComponent("Animator")
self.tbLang = {}
self.tbLang[AllEnum.Language.CN] = ConfigTable.GetUIText("Settings_Language_Voice_Chinese")
self.tbLang[AllEnum.Language.JP] = ConfigTable.GetUIText("Settings_Language_Voice_Japanese")
self.tbLang[AllEnum.Language.EN] = ConfigTable.GetUIText("Settings_Language_Voice_English")
self.tbLang[AllEnum.Language.KR] = ConfigTable.GetUIText("Settings_Language_Voice_Korean")
self.tbLang[AllEnum.Language.TW] = ConfigTable.GetUIText("Settings_Language_Voice_TraditionalChinese")
end
function SettingsLangPkgCtrl:OnEnable()
end
function SettingsLangPkgCtrl:OnDisable()
end
function SettingsLangPkgCtrl:OnDestroy()
end
function SettingsLangPkgCtrl:OnBtnClick_Cancel(btn)
EventManager.Hit("SettingsClosePop")
end
function SettingsLangPkgCtrl:OnBtnClick_Confirm(btn)
if next(self.tbEnableState) == nil then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Download_None"))
return
end
local bAllfalse = true
for _, v in pairs(self.tbEnableState) do
if v == true then
bAllfalse = false
break
end
end
if bAllfalse then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Settings_Download_NeedSelect"))
return
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Settings_LangPkg_BackConfirm"),
callbackConfirm = function()
for language, bEnable in pairs(self.tbEnableState) do
if bEnable then
NovaAPI.Enable_VoLanguage(language)
local tab = {}
table.insert(tab, {
"role_id",
tostring(PlayerData.Base._nPlayerId)
})
table.insert(tab, {
"set",
"language_manage"
})
table.insert(tab, {
"arg",
tostring(language)
})
NovaAPI.UserEventUpload("setting_choice", tab)
end
end
PanelManager.OnConfirmBackToLogIn()
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function SettingsLangPkgCtrl:OnBtnClick_Download(btn, nIndex)
self.tbEnableState[self.tbVoAvailable[nIndex]] = not self.tbEnableState[self.tbVoAvailable[nIndex]]
if self.tbEnableState[self.tbVoAvailable[nIndex]] then
self._mapNode.Checkmark[nIndex]:SetTrigger("PlayCheckmarkShow")
else
self._mapNode.Checkmark[nIndex]:SetTrigger("PlayCheckmarkHide")
end
end
return SettingsLangPkgCtrl
@@ -0,0 +1,179 @@
local SettingsLanguageCtrl = class("SettingsLanguageCtrl", BaseCtrl)
SettingsLanguageCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Language"
},
txtVoiceTittle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Language_Settings"
},
Option = {},
btnPackage = {
sComponentName = "UIButton",
callback = "OnBtnClick_Package"
},
txtPackage = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Language_Package"
},
txtBtnPackage = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Btn_Go"
},
Voice = {
sCtrlName = "Game.UI.Settings.OptionDynamicCtrl"
},
Language = {
sCtrlName = "Game.UI.Settings.OptionDynamicCtrl"
}
}
SettingsLanguageCtrl._mapEventConfig = {
SettingsDownloadLanguage = "OnEvent_DownloadLanguage"
}
function SettingsLanguageCtrl:RefreshText()
local lan_voc = ConfigTable.GetUIText("Settings_Language_Voice")
local lan_txt = ConfigTable.GetUIText("Settings_Language_Text")
local lan_needDownload = ConfigTable.GetUIText("Settings_Language_NeedDownload")
local lan_downloaded = ConfigTable.GetUIText("Settings_Language_Downloaded")
local tbText = {}
tbText[AllEnum.Language.CN] = ConfigTable.GetUIText("Settings_Language_Text_Chinese")
tbText[AllEnum.Language.JP] = ConfigTable.GetUIText("Settings_Language_Text_Japanese")
tbText[AllEnum.Language.EN] = ConfigTable.GetUIText("Settings_Language_Text_English")
tbText[AllEnum.Language.KR] = ConfigTable.GetUIText("Settings_Language_Text_Korean")
tbText[AllEnum.Language.TW] = ConfigTable.GetUIText("Settings_Language_Text_TraditionalChinese")
local nTextCount = table.nums(tbText)
local tbLang = {}
tbLang[AllEnum.Language.CN] = ConfigTable.GetUIText("Settings_Language_Voice_Chinese")
tbLang[AllEnum.Language.JP] = ConfigTable.GetUIText("Settings_Language_Voice_Japanese")
tbLang[AllEnum.Language.EN] = ConfigTable.GetUIText("Settings_Language_Voice_English")
tbLang[AllEnum.Language.KR] = ConfigTable.GetUIText("Settings_Language_Voice_Korean")
tbLang[AllEnum.Language.TW] = ConfigTable.GetUIText("Settings_Language_Voice_TraditionalChinese")
local nLangCount = table.nums(tbLang)
local textLang = {}
for i = 1, nTextCount do
textLang[i] = tbText[self.tbTextAvailable[i]]
end
local voLang = {}
for i = 1, nLangCount do
voLang[i] = ""
if self.tbVoAvailable[i] then
local sPre = tbLang[self.tbVoAvailable[i]]
local sSuf = self.tbDownload[self.tbVoAvailable[i]].bDownloaded and lan_downloaded or lan_needDownload
voLang[i] = sPre .. sSuf
end
end
self._mapNode.Voice:SetText(lan_voc, voLang)
self._mapNode.Language:SetText(lan_txt, textLang)
end
function SettingsLanguageCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
self:RefreshText()
end
function SettingsLanguageCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsLanguageCtrl:LoadSetting()
local tbTextAvailable = NovaAPI.GetAvailable_TextLanguage()
local tbVoAvailable = NovaAPI.GetAvailable_VoLanguage()
self.tbTextAvailable, self.tbVoAvailable, self.tbDownload = {}, {}, {}
for i = 0, tbTextAvailable.Length - 1 do
table.insert(self.tbTextAvailable, tbTextAvailable[i])
end
for i = 0, tbVoAvailable.Length - 1 do
local sVoLan = tbVoAvailable[i]
table.insert(self.tbVoAvailable, sVoLan)
local bDownloaded, nTotalSize, nNeedDownloadSize = NovaAPI.HasDownload_VoLanguage(sVoLan)
self.tbDownload[sVoLan] = {
bDownloaded = bDownloaded,
nTotalSize = nTotalSize,
nNeedDownloadSize = nNeedDownloadSize
}
end
local sCurrentTxtLanguage = NovaAPI.GetCur_TextLanguage()
local sCurrentVoLanguage = NovaAPI.GetCur_VoiceLanguage()
self.nVoLang = table.indexof(self.tbVoAvailable, sCurrentVoLanguage)
self.nTextLang = table.indexof(self.tbTextAvailable, sCurrentTxtLanguage)
self._mapNode.Voice:Init(function(index)
NovaAPI.SetCur_VoiceLanguage(self.tbVoAvailable[index])
Settings.sCurrentVoLanguage = self.tbVoAvailable[index]
self.nVoLang = index
local tab = {}
table.insert(tab, {
"role_id",
tostring(PlayerData.Base._nPlayerId)
})
table.insert(tab, {
"set",
"vocie_language"
})
table.insert(tab, {
"arg",
tostring(index)
})
NovaAPI.UserEventUpload("setting_choice", tab)
end, self.nVoLang, #self.tbVoAvailable, nil, true)
self._mapNode.Language:Init(function(index)
NovaAPI.SetCur_TextLanguage(self.tbTextAvailable[index])
Settings.sCurrentTxtLanguage = self.tbTextAvailable[index]
self.nTextLang = index
local tab = {}
table.insert(tab, {
"role_id",
tostring(PlayerData.Base._nPlayerId)
})
table.insert(tab, {
"set",
"game_language"
})
table.insert(tab, {
"arg",
tostring(index)
})
NovaAPI.UserEventUpload("setting_choice", tab)
PanelManager.OnConfirmBackToLogIn()
end, self.nTextLang, #self.tbTextAvailable, ConfigTable.GetUIText("Settings_Language_BackConfirm"))
local gray = function(tbAvailable)
local tbGray = {}
for k, v in ipairs(tbAvailable) do
if not self.tbDownload[v].bDownloaded then
tbGray[k] = true
end
end
return tbGray
end
self._mapNode.Voice:SetGray(gray(self.tbVoAvailable), ConfigTable.GetUIText("Settings_VoiceGrayTips"))
if self.tbVoAvailable ~= nil and 1 >= #self.tbVoAvailable then
self._mapNode.Option:SetActive(false)
local languageTra = self._mapNode.Language.gameObject.transform
local goLanLine = languageTra:Find("line").gameObject
goLanLine:SetActive(false)
end
end
function SettingsLanguageCtrl:SaveSetting()
end
function SettingsLanguageCtrl:Awake()
self.bInit = false
end
function SettingsLanguageCtrl:OnEnable()
end
function SettingsLanguageCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsLanguageCtrl:OnDestroy()
end
function SettingsLanguageCtrl:OnBtnClick_Package()
EventManager.Hit("SettingsLanguage", self.tbVoAvailable, self.tbDownload)
end
function SettingsLanguageCtrl:OnEvent_DownloadLanguage()
end
return SettingsLanguageCtrl
@@ -0,0 +1,58 @@
local SettingsNotificationCtrl = class("SettingsNotificationCtrl", BaseCtrl)
local UIGameSystemSetup = CS.UIGameSystemSetup
SettingsNotificationCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Notification"
},
txtForwardNews = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Notification_ForwardNews"
},
Energy = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
Dispatch = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
}
}
SettingsNotificationCtrl._mapEventConfig = {}
function SettingsNotificationCtrl:RefreshText()
self._mapNode.Energy:SetText(ConfigTable.GetUIText("Settings_Notification_Energy"))
self._mapNode.Dispatch:SetText(ConfigTable.GetUIText("Settings_Notification_Dispatch"))
end
function SettingsNotificationCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsNotificationCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsNotificationCtrl:LoadSetting()
self._mapNode.Energy:Init(function()
end, true)
self._mapNode.Dispatch:Init(function()
end, true)
end
function SettingsNotificationCtrl:SaveSetting()
end
function SettingsNotificationCtrl:Awake()
self.bInit = false
self:RefreshText()
end
function SettingsNotificationCtrl:OnEnable()
end
function SettingsNotificationCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsNotificationCtrl:OnDestroy()
end
return SettingsNotificationCtrl
+44
View File
@@ -0,0 +1,44 @@
local SettingsPanel = class("SettingsPanel", BasePanel)
SettingsPanel._bAddToBackHistory = false
SettingsPanel._nSnapshotPrePanel = 1
local LocalSettingData = require("GameCore.Data.LocalSettingData")
SettingsPanel._tbDefine = {
{
sPrefabPath = "Settings/SettingsPanel.prefab",
sCtrlName = "Game.UI.Settings.SettingsCtrl"
}
}
function SettingsPanel:LoadLocalData(key)
return LocalSettingData.GetLocalSettingData(key)
end
function SettingsPanel:SaveLocalData(subKey, value)
LocalSettingData.SetLocalSettingData(subKey, value)
end
function SettingsPanel:Awake()
self.mapKeyboardBind = {}
self.mapGamepadBind = {}
self.Action = {
"Fire1",
"Fire2",
"Fire4",
"Interactive",
"ActorSwitch1",
"ActorSwitch2",
"SwitchWithUltra1",
"SwitchWithUltra2"
}
self.Move = {
"Up",
"Down",
"Left",
"Right"
}
self.ControlType = {Gamepad = 0, Keyboard = 1}
end
function SettingsPanel:OnEnable()
end
function SettingsPanel:OnDisable()
end
function SettingsPanel:OnDestroy()
end
return SettingsPanel
@@ -0,0 +1,61 @@
local SettingsPreviewCtrl = class("SettingsPreviewCtrl", BaseCtrl)
SettingsPreviewCtrl._mapNodeConfig = {
MainView = {
sCtrlName = "Game.UI.Settings.PreviewMainViewCtrl"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnConfirm = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Cancel"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Confirm"
},
txtSliderTip = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Widescreen_Tips"
},
txtSliderCount = {sComponentName = "TMP_Text"},
Slider = {
sComponentName = "Slider",
callback = "OnValueChange_Widescreen"
}
}
SettingsPreviewCtrl._mapEventConfig = {}
function SettingsPreviewCtrl:Open(nType)
self._mapNode.MainView:Refresh()
self.nValue = NovaAPI.GetAdaptedAreaCustomWidth()
NovaAPI.SetTMPText(self._mapNode.txtSliderCount, self.nValue)
end
function SettingsPreviewCtrl:Awake()
end
function SettingsPreviewCtrl:OnEnable()
local tbParam = self:GetPanelParam()
if type(tbParam) == "table" then
self:Open()
end
end
function SettingsPreviewCtrl:OnDisable()
end
function SettingsPreviewCtrl:OnDestroy()
end
function SettingsPreviewCtrl:OnBtnClick_Close()
NovaAPI.SetSliderValue(self._mapNode.Slider, self.nValue)
EventManager.Hit(EventId.ClosePanel, PanelId.SettingsPreview)
end
function SettingsPreviewCtrl:OnBtnClick_Confirm()
EventManager.Hit(EventId.ClosePanel, PanelId.SettingsPreview)
end
function SettingsPreviewCtrl:OnValueChange_Widescreen(_, value)
local curValue, _ = math.modf(value)
NovaAPI.SetTMPText(self._mapNode.txtSliderCount, curValue)
end
return SettingsPreviewCtrl
@@ -0,0 +1,24 @@
local SettingsPreviewPanel = class("SettingsPreviewPanel", BasePanel)
SettingsPreviewPanel._bIsMainPanel = false
local LocalSettingData = require("GameCore.Data.LocalSettingData")
SettingsPreviewPanel._tbDefine = {
{
sPrefabPath = "Settings/SettingsPreviewPanel.prefab",
sCtrlName = "Game.UI.Settings.SettingsPreviewCtrl"
}
}
function SettingsPreviewPanel:LoadLocalData(key)
return LocalSettingData.GetLocalSettingData(key)
end
function SettingsPreviewPanel:SaveLocalData(subKey, value)
LocalSettingData.SetLocalSettingData(subKey, value)
end
function SettingsPreviewPanel:Awake()
end
function SettingsPreviewPanel:OnEnable()
end
function SettingsPreviewPanel:OnDisable()
end
function SettingsPreviewPanel:OnDestroy()
end
return SettingsPreviewPanel
@@ -0,0 +1,104 @@
local SettingsResolutionCtrl = class("SettingsResolutionCtrl", BaseCtrl)
SettingsResolutionCtrl._mapNodeConfig = {
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Display_ResolutionTitle"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtBtnConfirm1 = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Confirm"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "MessageBox_Cancel"
},
txtOptionTitle = {nCount = 4, sComponentName = "TMP_Text"},
btnChoose = {
nCount = 4,
sComponentName = "UIButton",
callback = "OnBtnClick_Choose"
},
Checkmark = {nCount = 4, sComponentName = "Animator"},
Option = {nCount = 4},
line = {nCount = 4}
}
SettingsResolutionCtrl._mapEventConfig = {}
function SettingsResolutionCtrl:Open(nResolution, tbResolution)
self.nIndex = nResolution
self.tbResolution = tbResolution
self:PlayInAni()
self:Refresh()
end
function SettingsResolutionCtrl:Refresh()
local nCount = #self.tbResolution
if 4 <= nCount then
self._mapNode.line[4]:SetActive(false)
else
self._mapNode.line[nCount]:SetActive(false)
end
for i = 1, 4 do
local sText = self.tbResolution[i]
if sText then
self._mapNode.Option[i].gameObject:SetActive(true)
NovaAPI.SetTMPText(self._mapNode.txtOptionTitle[i], sText)
else
self._mapNode.Option[i].gameObject:SetActive(false)
end
end
for i = 1, 4 do
if i == self.nIndex then
self._mapNode.Checkmark[i]:Play("checkmark_in", -1, 1)
else
self._mapNode.Checkmark[i]:Play("checkmark_out", -1, 1)
end
end
end
function SettingsResolutionCtrl:PlayInAni()
self.gameObject:SetActive(true)
self.ani:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function SettingsResolutionCtrl:PlayOutAni()
self.ani:Play("t_window_04_t_out")
self:AddTimer(1, 0.2, "Close", true, true, true)
end
function SettingsResolutionCtrl:Close()
self.gameObject:SetActive(false)
end
function SettingsResolutionCtrl:Awake()
self.ani = self.gameObject.transform:GetComponent("Animator")
end
function SettingsResolutionCtrl:OnEnable()
end
function SettingsResolutionCtrl:OnDisable()
end
function SettingsResolutionCtrl:OnDestroy()
end
function SettingsResolutionCtrl:OnBtnClick_Cancel(btn)
EventManager.Hit("SettingsClosePop")
end
function SettingsResolutionCtrl:OnBtnClick_Confirm(btn)
EventManager.Hit("SettingsClosePop")
EventManager.Hit("SettingsSetResolution", self.nIndex)
end
function SettingsResolutionCtrl:OnBtnClick_Choose(btn, index)
if self.nIndex == index then
return
end
self._mapNode.Checkmark[self.nIndex]:SetTrigger("PlayCheckmarkHide")
self._mapNode.Checkmark[index]:SetTrigger("PlayCheckmarkShow")
self.nIndex = index
end
return SettingsResolutionCtrl
+166
View File
@@ -0,0 +1,166 @@
local SettingsSoundCtrl = class("SettingsSoundCtrl", BaseCtrl)
local UIGameSystemSetup = CS.UIGameSystemSetup
local WwiseManger = CS.WwiseAudioManager
SettingsSoundCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Sound"
},
txtSound = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Sound_Title"
},
Music_Btn = {sNodeName = "Music_Btn", sComponentName = "Button"},
Music_Slider = {
sComponentName = "Slider",
callback = "OnMusicSliderValueChange"
},
MusicFill = {sComponentName = "Image"},
MusicHandle = {sComponentName = "Image"},
Music_Value = {sComponentName = "TMP_Text"},
Effect_Btn = {sNodeName = "Effect_Btn", sComponentName = "Button"},
Effect_Slider = {
sComponentName = "Slider",
callback = "OnEffectSliderValueChange"
},
EffectFill = {sComponentName = "Image"},
EffectHandle = {sComponentName = "Image"},
Effect_Value = {sComponentName = "TMP_Text"},
Voice_Btn = {sNodeName = "Voice_Btn", sComponentName = "Button"},
Voice_Slider = {
sComponentName = "Slider",
callback = "OnVoiceSliderValueChange"
},
VoiceFill = {sComponentName = "Image"},
VoiceHandle = {sComponentName = "Image"},
Voice_Value = {sComponentName = "TMP_Text"},
Music = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
Effect = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
Voice = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
MuteInBackground = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
}
}
SettingsSoundCtrl._mapEventConfig = {}
function SettingsSoundCtrl:RefreshText()
self._mapNode.Music:SetText(ConfigTable.GetUIText("Settings_Sound_Music"))
self._mapNode.Effect:SetText(ConfigTable.GetUIText("Settings_Sound_Sfx"))
self._mapNode.Voice:SetText(ConfigTable.GetUIText("Settings_Sound_Voice"))
self._mapNode.MuteInBackground:SetText(ConfigTable.GetUIText("Settings_Sound_MuteOnMinimize"))
end
function SettingsSoundCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsSoundCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsSoundCtrl:LoadSetting()
self.musicValue = self._panel:LoadLocalData("NumMusic")
self.openMusic = self._panel:LoadLocalData("OpenMusic")
self._mapNode.Music:Init(function()
self.openMusic = not self.openMusic
self:RefreshMusicSlider()
WwiseManger.Instance.m_playMusic = self.openMusic
end, self.openMusic)
self:RefreshMusicSlider()
self.effectValue = self._panel:LoadLocalData("NumSfx")
self.openEffect = self._panel:LoadLocalData("OpenSfx")
self._mapNode.Effect:Init(function()
self.openEffect = not self.openEffect
self:RefreshEffectSlider()
WwiseManger.Instance.m_playSfx = self.openEffect
end, self.openEffect)
self:RefreshEffectSlider()
self.voiceValue = self._panel:LoadLocalData("NumChar")
self.openVoice = self._panel:LoadLocalData("OpenChar")
self._mapNode.Voice:Init(function()
self.openVoice = not self.openVoice
self:RefreshVoiceSlider()
WwiseManger.Instance.m_voice = self.openVoice
end, self.openVoice)
self.bMuteInBackground = self._panel:LoadLocalData("WwiseMuteInBackground")
local curPlatform = CS.ClientManager.Instance.Platform
local bIsPC = curPlatform == "windows" or curPlatform == "mac"
local goVoiceLine = self._mapNode.Voice.gameObject.transform:Find("line")
goVoiceLine.gameObject:SetActive(bIsPC)
self._mapNode.MuteInBackground.gameObject:SetActive(bIsPC)
self._mapNode.MuteInBackground:Init(function()
self.bMuteInBackground = not self.bMuteInBackground
WwiseManger.Instance.bMuteInBackground = self.bMuteInBackground
end, self.bMuteInBackground)
self:RefreshVoiceSlider()
end
function SettingsSoundCtrl:SaveSetting()
self._panel:SaveLocalData("OpenMusic", self.openMusic)
self._panel:SaveLocalData("NumMusic", self.musicValue)
self._panel:SaveLocalData("OpenSfx", self.openEffect)
self._panel:SaveLocalData("NumSfx", self.effectValue)
self._panel:SaveLocalData("OpenChar", self.openVoice)
self._panel:SaveLocalData("NumChar", self.voiceValue)
if not NovaAPI.IsMobilePlatform() then
self._panel:SaveLocalData("WwiseMuteInBackground", self.bMuteInBackground)
end
end
function SettingsSoundCtrl:Awake()
self.bInit = false
self:RefreshText()
end
function SettingsSoundCtrl:OnEnable()
end
function SettingsSoundCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsSoundCtrl:OnDestroy()
end
function SettingsSoundCtrl:RefreshMusicSlider()
self._mapNode.Music_Btn.interactable = self.openMusic
NovaAPI.SetSliderInteractable(self._mapNode.Music_Slider, self.openMusic)
NovaAPI.SetSliderValue(self._mapNode.Music_Slider, self.musicValue)
NovaAPI.SetTMPText(self._mapNode.Music_Value, self.musicValue)
end
function SettingsSoundCtrl:OnMusicSliderValueChange(_, value)
local curValue, _ = math.modf(value)
self.musicValue = curValue
NovaAPI.SetTMPText(self._mapNode.Music_Value, self.musicValue)
WwiseManger.Instance.MusicVolume = curValue / 10
end
function SettingsSoundCtrl:RefreshEffectSlider()
self._mapNode.Effect_Btn.interactable = self.openEffect
NovaAPI.SetSliderInteractable(self._mapNode.Effect_Slider, self.openEffect)
NovaAPI.SetSliderValue(self._mapNode.Effect_Slider, self.effectValue)
NovaAPI.SetTMPText(self._mapNode.Effect_Value, self.effectValue)
end
function SettingsSoundCtrl:OnEffectSliderValueChange(_, value)
local curValue, _ = math.modf(value)
self.effectValue = curValue
NovaAPI.SetTMPText(self._mapNode.Effect_Value, self.effectValue)
WwiseManger.Instance.SfxVolume = curValue / 10
end
function SettingsSoundCtrl:RefreshVoiceSlider()
self._mapNode.Voice_Btn.interactable = self.openVoice
NovaAPI.SetSliderInteractable(self._mapNode.Voice_Slider, self.openVoice)
NovaAPI.SetSliderValue(self._mapNode.Voice_Slider, self.voiceValue)
NovaAPI.SetTMPText(self._mapNode.Voice_Value, self.voiceValue)
end
function SettingsSoundCtrl:OnVoiceSliderValueChange(_, value)
local curValue, _ = math.modf(value)
self.voiceValue = curValue
NovaAPI.SetTMPText(self._mapNode.Voice_Value, self.voiceValue)
WwiseManger.Instance.VoiceVolume = curValue / 10
end
return SettingsSoundCtrl