275 lines
No EOL
7.8 KiB
Lua
275 lines
No EOL
7.8 KiB
Lua
local XUiPlayerUp = XLuaUiManager.Register(XLuaUi, "UiPlayerUp")
|
||
local WAIT_CLOSE_TIME = 2
|
||
local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate
|
||
|
||
function XUiPlayerUp:OnAwake()
|
||
self:InitAutoScript()
|
||
end
|
||
|
||
function XUiPlayerUp:OnStart(oldLevel, newLevel)
|
||
self.OldLevel = oldLevel
|
||
self.NewLevel = newLevel
|
||
|
||
self.BtnCloseTs.gameObject:SetActive(true)
|
||
self.IsAnimating = true
|
||
self.Timer = nil
|
||
|
||
self:Update()
|
||
end
|
||
|
||
function XUiPlayerUp:OnEnable()
|
||
CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.Common_UiPlayerUp)
|
||
end
|
||
|
||
function XUiPlayerUp:InitAutoScript()
|
||
self.SpecialSoundMap = {}
|
||
self:AutoAddListener()
|
||
end
|
||
|
||
function XUiPlayerUp:GetAutoKey(uiNode, eventName)
|
||
if not uiNode then
|
||
return
|
||
end
|
||
return eventName .. uiNode:GetHashCode()
|
||
end
|
||
|
||
function XUiPlayerUp:RegisterListener(uiNode, eventName, func)
|
||
local key = self:GetAutoKey(uiNode, eventName)
|
||
if not key then
|
||
return
|
||
end
|
||
local listener = self.AutoCreateListeners[key]
|
||
if listener ~= nil then
|
||
uiNode[eventName]:RemoveListener(listener)
|
||
end
|
||
|
||
if func ~= nil then
|
||
if type(func) ~= "function" then
|
||
XLog.Error("XUiPlayerUp:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
|
||
end
|
||
|
||
listener = function(...)
|
||
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
|
||
func(self, ...)
|
||
end
|
||
|
||
uiNode[eventName]:AddListener(listener)
|
||
self.AutoCreateListeners[key] = listener
|
||
end
|
||
end
|
||
|
||
function XUiPlayerUp:AutoAddListener()
|
||
self.AutoCreateListeners = {}
|
||
self:RegisterClickEvent(self.BtnClose, self.OnBtnCloseClick)
|
||
end
|
||
|
||
--@region 界面信息
|
||
function XUiPlayerUp:Update()
|
||
self:SetInitUi()
|
||
self:UpdateInitText()
|
||
self:PlayAniPlayerUpBegin()
|
||
self:SetReward()
|
||
end
|
||
|
||
function XUiPlayerUp:SetInitUi()
|
||
self:SetText()
|
||
self.HonorLevelUp.gameObject:SetActiveEx(self:IsHonorLevelOpen())
|
||
self.PlayerUp.gameObject:SetActiveEx(not self:IsHonorLevelOpen())
|
||
end
|
||
|
||
function XUiPlayerUp:SetText()
|
||
if self:IsHonorLevelOpen() then
|
||
self.TxtLv1 = self.TxtLv1_HonorLevelUp
|
||
self.TxtLv2 = self.TxtLv2_HonorLevelUp
|
||
self.TxtLevelName = self.TxtLevelName_HonorLevelUp
|
||
self.TxtMaxFriendCount = self.TxtMaxFriendCount_HonorLevelUp
|
||
else
|
||
self.TxtLv1 = self.TxtLv1_PlayerUp
|
||
self.TxtLv2 = self.TxtLv2_PlayerUp
|
||
self.TxtLevelName = self.TxtLevelName_PlayerUp
|
||
self.TxtMaxFriendCount = self.TxtMaxFriendCount_PlayerUp
|
||
self.TxtFreeActionPoint = self.TxtFreeActionPoint_PlayerUp
|
||
end
|
||
end
|
||
|
||
function XUiPlayerUp:UpdateInitText()
|
||
local addActionPoint = self:GetMaxActionPoint(self.NewLevel) - self:GetMaxActionPoint(self.OldLevel)
|
||
local differenceGrade = self.NewLevel - self.OldLevel
|
||
local num = 0
|
||
for i = 1, differenceGrade do
|
||
num = num + self:GetFreeActionPoint(self.OldLevel + i - 1)
|
||
end
|
||
|
||
if not self:IsHonorLevelOpen() then
|
||
self.TxtFreeActionPoint.text = num
|
||
end
|
||
|
||
self.TxtMaxFriendCount.text = CS.XTextManager.GetText("LevelActionPoint", self:GetMaxActionPoint(self.OldLevel), addActionPoint)
|
||
self.TxtLv1.text = self.OldLevel
|
||
self.TxtLv2.text = self.NewLevel
|
||
self.TxtLevelName.text = self:GetTxtLevelName()
|
||
self.TxtLevelNameFirst.text = self:GetTxtLevelName() -- 国际服升级字母不插入空格
|
||
end
|
||
|
||
function XUiPlayerUp:SetReward()
|
||
if not self:IsHonorLevelOpen() then
|
||
return
|
||
end
|
||
|
||
local rewards = self:GetRewards()
|
||
local rewardCount = #rewards
|
||
|
||
for i = 1, rewardCount do
|
||
local ui = CSUnityEngineObjectInstantiate(self.PanelReward,self.UiContent)
|
||
ui.gameObject:SetActiveEx(true)
|
||
ui.gameObject.name = string.format("PanelReward%d", i)
|
||
local panel = XUiGridCommon.New(self, ui)
|
||
panel.GameObject:SetActiveEx(true)
|
||
local reward = rewards[i]
|
||
panel:Refresh(reward)
|
||
end
|
||
end
|
||
|
||
--合并奖励,处理等级连升的情况
|
||
function XUiPlayerUp:GetRewards()
|
||
local newRewards = {}
|
||
for i=self.OldLevel,self.NewLevel-1 do
|
||
local rewards = XRewardManager.GetRewardList(XPlayerManager.GetRewardId(i))
|
||
for i,reward in ipairs(rewards) do
|
||
local isInside = false
|
||
for i,newReward in ipairs(newRewards) do
|
||
if newReward.TemplateId == reward.TemplateId and newReward.RewardType == reward.RewardType then
|
||
newReward.Count = newReward.Count + reward.Count
|
||
isInside = true
|
||
break
|
||
end
|
||
end
|
||
|
||
if not isInside then
|
||
local xReward = {}
|
||
for k,v in pairs(reward) do
|
||
xReward[k] = v
|
||
end
|
||
table.insert(newRewards, xReward)
|
||
end
|
||
end
|
||
end
|
||
|
||
return newRewards
|
||
end
|
||
--@endregion
|
||
|
||
--@region 120级依然显示小队等级的,不显示荣耀勋阶,这里特殊处理
|
||
function XUiPlayerUp:IsHonorLevelOpen()
|
||
if XPlayer.GetMaxLevel() == self.NewLevel then
|
||
return false
|
||
else
|
||
return XPlayer.IsHonorLevelOpen()
|
||
end
|
||
end
|
||
|
||
function XUiPlayerUp:GetMaxActionPoint(level)
|
||
return XPlayerManager.GetMaxActionPoint(level, self:IsHonorLevelOpen())
|
||
end
|
||
|
||
function XUiPlayerUp:GetFreeActionPoint(level)
|
||
if not self:IsHonorLevelOpen() then
|
||
return XPlayerManager.GetFreeActionPoint(level, self:IsHonorLevelOpen())
|
||
else
|
||
return 0
|
||
end
|
||
end
|
||
|
||
function XUiPlayerUp:GetTxtLevelName() -- 国际服升级单子中间加空格
|
||
if self:IsHonorLevelOpen() then
|
||
return CS.XTextManager.GetText("HonorLevel") .." ".. CS.XTextManager.GetText("Promote")
|
||
else
|
||
return CS.XTextManager.GetText("PlayerLevel") .." ".. CS.XTextManager.GetText("Promote")
|
||
end
|
||
end
|
||
--@endregion
|
||
|
||
--字符之间插入空格
|
||
function XUiPlayerUp:StringInsertBlank(s)
|
||
local tb = {}
|
||
local newS = ""
|
||
local index = 1
|
||
for utfChar in string.gmatch(s, "[%z\1-\127\194-\244][\128-\191]*") do
|
||
if index == 1 then
|
||
newS = newS .. utfChar
|
||
else
|
||
newS = newS .. " " .. utfChar
|
||
end
|
||
index = index + 1
|
||
end
|
||
|
||
return newS
|
||
end
|
||
|
||
function XUiPlayerUp:PlayAniPlayerUpBegin()
|
||
local aniName = self:GetAnimationName(true)
|
||
self:PlayAnimation(aniName, function()
|
||
self.IsAnimating = false
|
||
|
||
local time = 0
|
||
self.Timer = XScheduleManager.Schedule(function()
|
||
time = time + 1
|
||
if time >= WAIT_CLOSE_TIME and self.BtnCloseTs.gameObject.activeInHierarchy then
|
||
self:OnBtnCloseClick()
|
||
end
|
||
end, 1000, WAIT_CLOSE_TIME)
|
||
end)
|
||
end
|
||
|
||
function XUiPlayerUp:PlayAniPlayerUpEnd()
|
||
local aniName = self:GetAnimationName(false)
|
||
self:PlayAnimation(aniName, function()
|
||
if XTool.UObjIsNil(self.BtnClose) then
|
||
return
|
||
end
|
||
self.IsAnimating = false
|
||
|
||
if self.Timer ~= nil then
|
||
XScheduleManager.UnSchedule(self.Timer)
|
||
self.Timer = nil
|
||
end
|
||
self:Close()
|
||
XEventManager.DispatchEvent(XEventId.EVENT_PLAYER_LEVEL_UP_ANIMATION_END)
|
||
end)
|
||
end
|
||
|
||
function XUiPlayerUp:GetAnimationName(isBegin)
|
||
local aniName
|
||
if self:IsHonorLevelOpen() then
|
||
if isBegin then
|
||
aniName = "HonorLevelUpEnable"
|
||
else
|
||
aniName = "HonorLevelUpEnd"
|
||
end
|
||
else
|
||
if isBegin then
|
||
aniName = "AniPlayerUpBegin"
|
||
else
|
||
aniName = "AniPlayerUpEnd"
|
||
end
|
||
end
|
||
return aniName
|
||
end
|
||
|
||
function XUiPlayerUp:OnBtnCloseClick()
|
||
if self.IsAnimating then
|
||
return
|
||
end
|
||
|
||
self.IsAnimating = true
|
||
self:PlayAniPlayerUpEnd()
|
||
end
|
||
|
||
function XUiPlayerUp:OnDestroy()
|
||
if self.Timer ~= nil then
|
||
XScheduleManager.UnSchedule(self.Timer)
|
||
self.Timer = nil
|
||
end
|
||
|
||
XTipManager.Execute()
|
||
end |