Files
SL1900 46f967a584 Update - 1.6.0.84
EN: 1.6.0.84
CN: 1.6.0.87
JP: 1.6.0.88
KR: 1.6.0.91
2026-02-04 13:00:00 +09:00

133 lines
4.4 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"
},
txtGiveGift = {
sComponentName = "TMP_Text",
sLanguageId = "CharacterRelation_Favour_Gift"
},
btnGiveGift = {
sNodeName = "btnGiveGift",
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()
local openCallback = function()
local callback = function()
local bSetGridPos = true
EventManager.Hit(EventId.OpenPanel, PanelId.Phone, 3, self.curCharId, bSetGridPos)
end
PlayerData.Phone:TrySendAddressListReq(callback)
end
PlayerData.Base:CheckFunctionBtn(GameEnum.OpenFuncType.Phone, openCallback)
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