Files
StellaSora_DataLua/lua/game/ui/characterfavour/characterfavourctrl.lua
T
SL1900 5e0d58cfad 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
2025-12-03 01:00:00 +09:00

122 lines
4.1 KiB
Lua

local BaseCtrl = require("GameCore.UI.BaseCtrl")
local CharacterFavourCtrl = class("CharacterFavourCtrl", BaseCtrl)
CharacterFavourCtrl._mapNodeConfig = {
txtFavourLevel = {
sNodeName = "txtFavourLevel",
sComponentName = "TMP_Text"
},
transFavourBarCenter = {
sNodeName = "FavourBarCenter",
sComponentName = "Transform"
},
txtFavourNum = {sNodeName = "txtFavour", sComponentName = "TMP_Text"},
txtFavourBubble = {
sNodeName = "txtFavourBubble",
sComponentName = "TMP_Text"
},
btnFavourTask = {
sNodeName = "btnFavourTask",
sComponentName = "UIButton",
callback = "OnBtn_ClickOpenTask"
},
txtFavourTask = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Favour_Task"
},
btnFavourReward = {
sNodeName = "btnFavourReward",
sComponentName = "UIButton",
callback = "OnBtn_ClickOpenRewardPreview"
},
txtFavourReward = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Favour_Reward"
},
btnFavourGift = {
sNodeName = "btnFavourGift",
sComponentName = "UIButton",
callback = "OnBtn_ClickOpenGiftPanel"
},
imgHeart = {sNodeName = "imgHeart", sComponentName = "Image"},
aniFavour = {
sNodeName = "aniFavourRoot",
sComponentName = "Animator"
},
rectImgFavourBar = {
sNodeName = "imgFavourBar",
sComponentName = "RectTransform"
},
txtFavourTitle = {
sNodeName = "txtFavourTitle",
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Favour_Title"
}
}
CharacterFavourCtrl._mapEventConfig = {
[EventId.AffinityChange] = "OnEvent_AffinityChange"
}
function CharacterFavourCtrl:Awake()
self.progressBarWidth = 162
self.progressBarMinWidth = 0
end
function CharacterFavourCtrl:OnEnable()
end
function CharacterFavourCtrl:OnBtn_ClickOpenTask()
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourTask, self.curCharId)
end
function CharacterFavourCtrl:OnBtn_ClickOpenRewardPreview()
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourReward, self.curCharId)
end
function CharacterFavourCtrl:OnBtn_ClickOpenGiftPanel()
EventManager.Hit(EventId.CharRelatePanelOpen, PanelId.CharFavourGift, self.curCharId)
end
function CharacterFavourCtrl:Refresh(nCharId)
self.curCharId = nCharId
local affinityData = PlayerData.Char:GetCharAffinityData(nCharId)
self.curFavourLevel = affinityData.Level
self.curFavourExp = affinityData.Exp
local data = {}
local needExp = 0
local forEachAffinityLevel = function(mapData)
if mapData.AffinityLevel == self.curFavourLevel then
data = mapData
elseif mapData.AffinityLevel == self.curFavourLevel + 1 then
needExp = mapData.NeedExp
end
end
ForEachTableLine(DataTable.AffinityLevel, forEachAffinityLevel)
NovaAPI.SetTMPText(self._mapNode.txtFavourLevel, self.curFavourLevel)
NovaAPI.SetTMPText(self._mapNode.txtFavourNum, self.curFavourExp .. "/" .. needExp)
self._mapNode.txtFavourNum.gameObject:SetActive(needExp ~= 0)
NovaAPI.SetTMPText(self._mapNode.txtFavourBubble, data.AffinityLevelName)
if data.AffinityLevelIcon ~= "" then
end
self._mapNode.aniFavour.gameObject:SetActive(false)
self._mapNode.aniFavour.gameObject:SetActive(true)
self._mapNode.aniFavour:SetInteger("affinity_lv", data.AffinityLevelStage)
local percent = 0
if needExp ~= 0 then
percent = self.curFavourExp / needExp
else
percent = 1
end
self:RefreshProgressBar(percent, 0)
end
function CharacterFavourCtrl:RefreshProgressBar(nPercent, nDuration)
local sizeDelta = self._mapNode.rectImgFavourBar.sizeDelta
local nWidth = self.progressBarWidth * nPercent < self.progressBarMinWidth and self.progressBarMinWidth or self.progressBarWidth * nPercent
self._mapNode.rectImgFavourBar.sizeDelta = Vector2(nWidth, sizeDelta.y)
end
function CharacterFavourCtrl:ResetData()
self._mapNode.transFavourBarCenter.localEulerAngles = Vector3(0, 0, 0)
end
function CharacterFavourCtrl:OnEvent_AffinityChange(charId, curLevel, lastFavourLevel, curExp, lastExp)
if self._panel.nPanelId == PanelId.CharacterRelation then
self:Refresh(self.curCharId)
if lastFavourLevel < curLevel and charId == self.curCharId then
EventManager.Hit(EventId.OpenPanel, PanelId.CharFavourLevelUp, charId, curLevel, lastFavourLevel, curExp, lastExp)
end
end
end
return CharacterFavourCtrl