999664ac13
EN: 1.5.0.80 CN: 1.5.0.82 JP: 1.5.0.84 KR: 1.5.0.87
419 lines
15 KiB
Lua
419 lines
15 KiB
Lua
local Avg_7_PersonalityChoiceCtrl = class("Avg_7_PersonalityChoiceCtrl", BaseCtrl)
|
|
local AvgData = PlayerData.Avg
|
|
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
|
|
local GameResourceLoader = require("Game.Common.Resource.GameResourceLoader")
|
|
local ResType = GameResourceLoader.ResType
|
|
local WwiseAudioMgr = CS.WwiseAudioManager.Instance
|
|
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
|
|
Avg_7_PersonalityChoiceCtrl._mapNodeConfig = {
|
|
goBlurBg = {sNodeName = "imgBlurBg"},
|
|
cgBgRole = {
|
|
sNodeName = "----bg_role----",
|
|
sComponentName = "CanvasGroup"
|
|
},
|
|
animBgRole = {
|
|
sNodeName = "----bg_role----",
|
|
sComponentName = "Animator"
|
|
},
|
|
imgDB = {sComponentName = "Image"},
|
|
rtMainRole = {
|
|
sNodeName = "goMainRole",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
rtBody = {
|
|
sNodeName = "body",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
body = {sComponentName = "Image"},
|
|
face = {sComponentName = "Image"},
|
|
rtEmoji = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
rtImgThink = {
|
|
sNodeName = "img_think_",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
tmpOS = {
|
|
sComponentName = "RubyTextMeshProUGUI"
|
|
},
|
|
rtTMPOS = {
|
|
sNodeName = "tmpOS",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
trCard = {
|
|
sNodeName = "----card----",
|
|
sComponentName = "Transform"
|
|
},
|
|
btnConfirm = {
|
|
sComponentName = "NaviButton",
|
|
callback = "OnBtnClick_Choice"
|
|
},
|
|
txtBtnConfirm = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Avg_Btn_Select"
|
|
},
|
|
rtBtnConfirm = {
|
|
sNodeName = "btnConfirm",
|
|
sComponentName = "RectTransform"
|
|
}
|
|
}
|
|
Avg_7_PersonalityChoiceCtrl._mapEventConfig = {
|
|
GamepadUIChange = "OnEvent_GamepadUIChange",
|
|
[EventId.AvgSpeedUp] = "OnEvent_AvgSpeedUp"
|
|
}
|
|
function Avg_7_PersonalityChoiceCtrl:Awake()
|
|
self.tbGoChoice = {}
|
|
self.tbBtnChoice = {}
|
|
self.tbSelectHandler = {}
|
|
self.tbCgChoice = {}
|
|
self.tbAnimChoice = {}
|
|
self.tbAnimChoiceLittleBody = {}
|
|
self.tbTMP_Title = {}
|
|
self.tbTMP_Content = {}
|
|
self.tbImgBright = {}
|
|
self.tbGoChoosed = {}
|
|
self.tbTMP_Choosed = {}
|
|
self.btnConfirmPosY = self._mapNode.rtBtnConfirm.localPosition.y
|
|
for i = 1, 3 do
|
|
local trRoot = self._mapNode.trCard:GetChild(i - 1)
|
|
local tr = trRoot:Find("Choice_1")
|
|
self.tbGoChoice[i] = trRoot.gameObject
|
|
self.tbBtnChoice[i] = tr:GetComponent("NaviButton")
|
|
local func_Handler = function(...)
|
|
local ui_func = ui_handler(self, self.OnBtnSelect_Choice, self.tbBtnChoice[i], i)
|
|
ui_func(...)
|
|
end
|
|
self.tbSelectHandler[i] = func_Handler
|
|
self.tbBtnChoice[i].onSelect:AddListener(func_Handler)
|
|
GamepadUIManager.AddGamepadUINode("AVG", {
|
|
{
|
|
mapNode = self.tbBtnChoice[i],
|
|
sComponentName = "NaviButton"
|
|
}
|
|
})
|
|
self.tbCgChoice[i] = tr:GetComponent("CanvasGroup")
|
|
self.tbAnimChoice[i] = tr:GetComponent("Animator")
|
|
self.tbAnimChoiceLittleBody[i] = tr:GetChild(0):GetChild(0):GetComponent("Animator")
|
|
self.tbTMP_Title[i] = tr:Find("goDefault_1/tmpTitle_1"):GetComponent("RubyTextMeshProUGUI")
|
|
self.tbTMP_Content[i] = tr:Find("goDefault_1/tmpContent_1"):GetComponent("RubyTextMeshProUGUI")
|
|
self.tbImgBright[i] = tr:Find("imgBright_1"):GetComponent("Image")
|
|
self.tbGoChoosed[i] = tr:Find("goDefault_1/goChoosed_1").gameObject
|
|
self.tbTMP_Choosed[i] = tr:Find("goDefault_1/goChoosed_1/tmpChoosed_1"):GetComponent("RubyTextMeshProUGUI")
|
|
end
|
|
self.tbActionContent = {}
|
|
self.tbLogData = {}
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnEnable()
|
|
self:AddGamepadUINode()
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnDisable()
|
|
for i = 1, 3 do
|
|
self.tbBtnChoice[i].onSelect:RemoveListener(self.tbSelectHandler[i])
|
|
end
|
|
self.tbGoChoice = nil
|
|
self.tbBtnChoice = nil
|
|
self.tbSelectHandler = nil
|
|
self.tbCgChoice = nil
|
|
self.tbAnimChoice = nil
|
|
self.tbTMP_Title = nil
|
|
self.tbTMP_Content = nil
|
|
self.tbImgBright = nil
|
|
self.tbGoChoosed = nil
|
|
self.tbTMP_Choosed = nil
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:LoadPresetEmoji()
|
|
if self.tbHoldEmoji == nil then
|
|
self.tbHoldEmoji = {}
|
|
for _, v in ipairs(self._panel.tbAvgPreset.CharEmoji) do
|
|
local sEmojiName = v[3]
|
|
local bIsLoop = v[5]
|
|
if bIsLoop == true then
|
|
table.insert(self.tbHoldEmoji, sEmojiName)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_SetEmoji(sEmoji, sBody, bPlaySound)
|
|
self:LoadPresetEmoji()
|
|
if bPlaySound == nil then
|
|
bPlaySound = true
|
|
end
|
|
if sEmoji ~= nil and sEmoji ~= "none" then
|
|
if sEmoji == "close" then
|
|
if self.goEmojiIns ~= nil then
|
|
local animator = self.goEmojiIns:GetComponent("Animator")
|
|
if animator ~= nil then
|
|
animator:SetTrigger("tOut")
|
|
NovaAPI.SetAnimatorSpeed(animator, self._panel.nSpeedRate or 1)
|
|
end
|
|
end
|
|
else
|
|
delChildren(self._mapNode.rtEmoji)
|
|
local sFullPath = string.format("UI/Avg/AnimEmoji/%s.prefab", sEmoji)
|
|
self.goEmojiIns = self:CreatePrefabInstance(sFullPath, self._mapNode.rtEmoji)
|
|
local animator = self.goEmojiIns:GetComponent("Animator")
|
|
if animator ~= nil then
|
|
animator:SetTrigger("tIn")
|
|
NovaAPI.SetAnimatorSpeed(animator, self._panel.nSpeedRate or 1)
|
|
end
|
|
local sMainRoleAvgCharId = "avg3_100"
|
|
sMainRoleAvgCharId = AdjustMainRoleAvgCharId(sMainRoleAvgCharId)
|
|
local v3OffSetPosEmoji, v3OffsetScaleEmoji = self:GetAvgPortraitEmojiOffsetData(sMainRoleAvgCharId, sBody, self._panel:GetCharEmojiIndex(sEmoji))
|
|
self._mapNode.rtEmoji.anchoredPosition3D = v3OffSetPosEmoji
|
|
self._mapNode.rtEmoji.localScale = v3OffsetScaleEmoji
|
|
if bPlaySound == true then
|
|
self._panel:PlayCharEmojiSound(sEmoji)
|
|
end
|
|
if table.indexof(self.tbHoldEmoji, sEmoji) <= 0 then
|
|
self:AddTimer(1, 5, "_delayHideUnloopEmoji", true, true, true, self.goEmojiIns)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_delayHideUnloopEmoji(timer)
|
|
if self.goEmojiIns ~= nil and self.goEmojiIns:IsNull() == false then
|
|
self.goEmojiIns:SetActive(false)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_MoveConfirmButton(nIndex)
|
|
local rtBtn = self.tbGoChoice[nIndex]:GetComponent("RectTransform")
|
|
self._mapNode.rtBtnConfirm.localPosition = Vector3(rtBtn.localPosition.x, self.btnConfirmPosY, 0)
|
|
if self._mapNode.btnConfirm.gameObject.activeSelf == false then
|
|
self._mapNode.btnConfirm.gameObject:SetActive(true)
|
|
else
|
|
local animCtrl = self._mapNode.btnConfirm.transform:Find("AnimRoot"):GetComponent("Animator")
|
|
animCtrl:Play("btnConfirm_in", 0, 0)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnEvent_AvgSpeedUp(nRate)
|
|
if self:GetPanelId() ~= PanelId.AvgST then
|
|
return
|
|
end
|
|
self:OnEvent_AvgSpeedUp_Timer(nRate)
|
|
NovaAPI.SetAnimatorSpeed(self._mapNode.animBgRole, nRate)
|
|
for index, value in ipairs(self.tbAnimChoice) do
|
|
NovaAPI.SetAnimatorSpeed(value, nRate)
|
|
end
|
|
for index, value in ipairs(self.tbAnimChoiceLittleBody) do
|
|
NovaAPI.SetAnimatorSpeed(value, nRate)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:SetPersonalityChoice(tbParam)
|
|
local AvgUIText = require(GetAvgLuaRequireRoot(self._panel.nCurLanguageIdx) .. "Preset/AvgUIText")
|
|
EventManager.Hit(EventId.AvgResetSpeed, true)
|
|
EventManager.Hit(EventId.AvgAllMenuBtnEnable, false)
|
|
self.nCurGroupId = tbParam[1]
|
|
self.nFactor = tbParam[2]
|
|
self.tbActionContent[1] = tbParam[3]
|
|
self.tbActionContent[2] = tbParam[4]
|
|
self.tbActionContent[3] = tbParam[5]
|
|
local sBody = tbParam[6]
|
|
local sFace = tbParam[7]
|
|
local sEmoji = tbParam[8]
|
|
local sContent = tbParam[9]
|
|
local sVoice = tbParam[10]
|
|
if self._panel.bIsPlayerMale == true then
|
|
if tbParam[11] ~= nil and tbParam[11] ~= "" and tbParam[12] ~= nil and tbParam[12] ~= "" and tbParam[13] ~= nil and tbParam[13] ~= "" then
|
|
self.tbActionContent[1] = tbParam[11]
|
|
self.tbActionContent[2] = tbParam[12]
|
|
self.tbActionContent[3] = tbParam[13]
|
|
end
|
|
if tbParam[14] ~= nil and tbParam[14] ~= "" then
|
|
sContent = tbParam[14]
|
|
end
|
|
end
|
|
local nLanguageIndex = self._panel.nCurLanguageIdx
|
|
self:ResetGamepadUI()
|
|
local nHistoryChoosed = AvgData:GetHistoryChoosedPersonality(self._panel.sAvgId, self.nCurGroupId)
|
|
local mapCfgData_RolePersonality = ConfigTable.GetData("StoryRolePersonality", 1)
|
|
if mapCfgData_RolePersonality == nil then
|
|
printError("StoryRolePersonality 表中未找到主角数据")
|
|
return -1
|
|
end
|
|
local tbPersonalitys = mapCfgData_RolePersonality.Personalitys
|
|
if type(tbPersonalitys) ~= "table" then
|
|
printError("StoryRolePersonality 表中主角拥有的三个性格数据有误")
|
|
return -1
|
|
end
|
|
if #tbPersonalitys ~= 3 then
|
|
printError("StoryRolePersonality 表中主角的性格数量不为3")
|
|
return -1
|
|
end
|
|
self._color = {}
|
|
NovaAPI.SetImageColor(self._mapNode.imgDB, Color.white)
|
|
for i = 1, 3 do
|
|
local nPID = tbPersonalitys[i]
|
|
local mapCfgData_Personality = ConfigTable.GetData("StoryPersonality", nPID)
|
|
if mapCfgData_Personality == nil then
|
|
printError("StoryPersonality 表中未找到数据 id:" .. nPID)
|
|
return -1
|
|
end
|
|
self._color[i] = mapCfgData_Personality.Color
|
|
local spBg = self:GetPngSprite(mapCfgData_Personality.Db)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self.tbCgChoice[i], true)
|
|
NovaAPI.SetCanvasGroupInteractable(self.tbCgChoice[i], true)
|
|
NovaAPI.SetText_RubyTMP(self.tbTMP_Title[i], mapCfgData_Personality.Name)
|
|
NovaAPI.SetText_RubyTMP(self.tbTMP_Content[i], ProcAvgTextContent(self.tbActionContent[i], nLanguageIndex))
|
|
NovaAPI.SetImageSpriteAsset(self.tbImgBright[i], spBg)
|
|
self.tbGoChoosed[i]:SetActive(i == nHistoryChoosed)
|
|
NovaAPI.SetText_RubyTMP(self.tbTMP_Choosed[i], AvgUIText.AVG_PersonalityChoice_Choosed)
|
|
self.tbAnimChoiceLittleBody[i]:Play("personality_" .. tostring(i) .. "_idle")
|
|
end
|
|
local sMainRoleAvgCharId = "avg3_100"
|
|
sMainRoleAvgCharId = AdjustMainRoleAvgCharId(sMainRoleAvgCharId)
|
|
local spBody, spFace, v3OffsetPos, v3OffsetScale = self:GetAvgPortrait(sMainRoleAvgCharId, sBody, sFace)
|
|
NovaAPI.SetImageSpriteAsset(self._mapNode.body, spBody)
|
|
NovaAPI.SetImageSpriteAsset(self._mapNode.face, spFace)
|
|
self._mapNode.rtBody.anchoredPosition3D = v3OffsetPos
|
|
self._mapNode.rtBody.localScale = v3OffsetScale
|
|
local tbRoleRootOffset = {
|
|
avg3_100 = {
|
|
870,
|
|
-580,
|
|
1
|
|
},
|
|
avg3_101 = {
|
|
870,
|
|
-580,
|
|
1
|
|
}
|
|
}
|
|
local data = tbRoleRootOffset[sMainRoleAvgCharId]
|
|
self._mapNode.rtMainRole.anchoredPosition = Vector2(data[1], data[2])
|
|
self._mapNode.rtMainRole.localScale = Vector3(data[3], data[3], data[3])
|
|
self:_SetEmoji(sEmoji, sBody, true)
|
|
NovaAPI.SetText_RubyTMP(self._mapNode.tmpOS, ProcAvgTextContent(sContent, nLanguageIndex))
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtTMPOS)
|
|
local nW = self._mapNode.rtTMPOS.rect.width + 106
|
|
if nW < 153 then
|
|
nW = 153
|
|
end
|
|
self._mapNode.rtImgThink.sizeDelta = Vector2(nW, 139)
|
|
if type(sVoice) ~= "string" or sVoice ~= "" then
|
|
end
|
|
self._mapNode.goBlurBg:SetActive(true)
|
|
self:AddTimer(1, 0.05, "_delayVisible", true, true, true)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 1)
|
|
self.nChosenIdx = 0
|
|
local nAnimLen = NovaAPI.GetAnimClipLength(self._mapNode.animBgRole, {
|
|
"animMajor_In"
|
|
})
|
|
self:AddTimer(1, nAnimLen + 0.3, "SelectUI", true, true, true)
|
|
NovaAPI.SetScreenSleepTimeout(false)
|
|
return -1
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_delayVisible()
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgBgRole, 1)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgBgRole, true)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cgBgRole, true)
|
|
self._mapNode.animBgRole:Play("animMajor_In")
|
|
local sequence = DOTween.Sequence()
|
|
sequence:AppendInterval(0.1)
|
|
sequence:AppendCallback(dotween_callback_handler(self, self._ChoiceInAnim, 1))
|
|
sequence:AppendInterval(0.1)
|
|
sequence:AppendCallback(dotween_callback_handler(self, self._ChoiceInAnim, 2))
|
|
sequence:AppendInterval(0.1)
|
|
sequence:AppendCallback(dotween_callback_handler(self, self._ChoiceInAnim, 3))
|
|
sequence:SetUpdate(true)
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_ChoiceInAnim(n)
|
|
self.tbAnimChoice[n]:Play("animMajorChoice_In2")
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:SetPersonalityChoiceJumpTo(tbParam)
|
|
EventManager.Hit(EventId.AvgResetSpeed, false)
|
|
EventManager.Hit(EventId.AvgAllMenuBtnEnable, true)
|
|
AvgData:MarkChoosedPersonality(self._panel.sAvgId, tbParam[1], tbParam[2], self.nFactor)
|
|
EventManager.Hit("AvgCheckAutoOnOff")
|
|
return 0
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:SetPersonalityChoiceRollover(tbParam)
|
|
self._panel:SetPersonalityChoiceRollover(tbParam[1])
|
|
return 0
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:SetPersonalityChoiceEnd(tbParam)
|
|
return 0
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnBtnClick_Choice(btn)
|
|
if self.nChosenIdx > 0 then
|
|
self:ClearSelect()
|
|
self._mapNode.btnConfirm.gameObject:SetActive(false)
|
|
WwiseAudioMgr:PlaySound("ui_avg_choice_confirm")
|
|
WwiseAudioMgr:PlaySound("ui_avg_card_flyby")
|
|
self:_SetEmoji("close")
|
|
self._mapNode.animBgRole:Play("animMajor_Out")
|
|
local sChoiceAnim = ""
|
|
for i = 1, 3 do
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self.tbCgChoice[i], false)
|
|
NovaAPI.SetCanvasGroupInteractable(self.tbCgChoice[i], false)
|
|
if i == self.nChosenIdx then
|
|
sChoiceAnim = "animMajorChoice_SetOut_" .. tostring(i)
|
|
else
|
|
sChoiceAnim = "animMajorChoice_UnsetOut"
|
|
end
|
|
self.tbAnimChoice[i]:Play(sChoiceAnim)
|
|
end
|
|
self.tbLogData.nType = AllEnum.AvgLogType.Choice
|
|
self.tbLogData.sAvgId = nil
|
|
self.tbLogData.sContent = ProcAvgTextContent(self.tbActionContent[self.nChosenIdx], self._panel.nCurLanguageIdx)
|
|
self.tbLogData.sVoice = nil
|
|
EventManager.Hit(EventId.AvgMarkLog, self.tbLogData)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 1.3)
|
|
self:AddTimer(1, 1.3, "_DoClickChoice", true, true, true)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnBtnSelect_Choice(btn, nIndex)
|
|
if self.nChosenIdx == nIndex then
|
|
return
|
|
end
|
|
WwiseAudioMgr:PlaySound("ui_avg_choice_slide")
|
|
self:_MoveConfirmButton(nIndex)
|
|
local sColor = self._color[nIndex]
|
|
local _b, _color = ColorUtility.TryParseHtmlString(sColor)
|
|
NovaAPI.SetImageColor(self._mapNode.imgDB, _color)
|
|
if self.nChosenIdx > 0 then
|
|
self.tbAnimChoice[self.nChosenIdx]:Play("animMajorChoice_PickDown")
|
|
self.tbAnimChoiceLittleBody[self.nChosenIdx]:Play("personality_" .. tostring(self.nChosenIdx) .. "_idle")
|
|
end
|
|
self.tbAnimChoice[nIndex]:Play("animMajorChoice_PickUp")
|
|
self.tbAnimChoiceLittleBody[nIndex]:Play("personality_" .. tostring(nIndex) .. "_show")
|
|
self.nChosenIdx = nIndex
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.4)
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:_DoClickChoice()
|
|
if self:GetPanelId() == PanelId.AvgST then
|
|
self._mapNode.goBlurBg:SetActive(false)
|
|
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgBgRole, 0)
|
|
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.cgBgRole, false)
|
|
NovaAPI.SetCanvasGroupInteractable(self._mapNode.cgBgRole, false)
|
|
self._panel:SetPersonalityChoiceJumpTo(self.nCurGroupId, self.nChosenIdx)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:AddGamepadUINode()
|
|
GamepadUIManager.AddGamepadUINode("AVG", self:GetGamepadUINode())
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:ResetGamepadUI()
|
|
self._panel.sCurGamepadUI = "PersonalityChoice"
|
|
GamepadUIManager.ClearSelectedUI()
|
|
GamepadUIManager.SetNavigation(self.tbBtnChoice)
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:SelectUI()
|
|
local nUIType = GamepadUIManager.GetCurUIType()
|
|
if nUIType ~= AllEnum.GamepadUIType.Other then
|
|
local nSelect = self.nChosenIdx ~= 0 and self.nChosenIdx or 1
|
|
GamepadUIManager.SetSelectedUI(self.tbBtnChoice[nSelect].gameObject)
|
|
end
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:ClearSelect()
|
|
GamepadUIManager.ClearSelectedUI()
|
|
self._panel.sCurGamepadUI = nil
|
|
end
|
|
function Avg_7_PersonalityChoiceCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterType)
|
|
if sName ~= "AVG" or self._panel.sCurGamepadUI ~= "PersonalityChoice" then
|
|
return
|
|
end
|
|
if nBeforeType == AllEnum.GamepadUIType.Other or nBeforeType == AllEnum.GamepadUIType.Mouse then
|
|
self:SelectUI()
|
|
end
|
|
end
|
|
return Avg_7_PersonalityChoiceCtrl
|