召唤表现

This commit is contained in:
CloudJ 2023-06-02 12:01:57 +08:00
parent 12f51be781
commit 6bd53ebfa2

View File

@ -11,26 +11,27 @@ local QLT_DELAY_TIME = {
}
local FIRST_DELAY_TIME = 0
local FADE_TIME = 0.5
local MAX_SCREEN_CELL_COUNT = 12 -- 同屏界面能展示的最大数量
local MAX_SCREEN_CELL_COUNT = 8 -- 触发滑动的限制值
local SCROLL_MOVE_TIME = 0.5
local REWARD_CELL_WIDTH = 160
local REWARD_CELL_HEIGHT = 250
local BASE_CONTENT_HEIGHT = 600
local POSITION_X_DATA = {
[1] = {0},
[2] = {-120, 120},
[3] = {-200, 0, 200},
[4] = {-240, -80, 80, 240}
}
function BoxRewardUI:ctor(params)
self.params = params or {}
self.rewards = params.rewards or {}
self.actionStatus = {} -- 表现状态
self.cellDelayTime = {} -- {idx,time}
-- if #self.params.rewards > MAX_SCREEN_CELL_COUNT then
-- self.showAction = true
-- self.turnIdx = MAX_SCREEN_CELL_COUNT // CELL_NUM
-- self.maxIdx = math.ceil(#self.params.rewards / CELL_NUM)
-- end
-- 将超过界面展示范围外的cell默认打开
if #self.params.rewards > MAX_SCREEN_CELL_COUNT then
for i = MAX_SCREEN_CELL_COUNT + 1, #self.params.rewards do
self.actionStatus[i] = true
end
end
self.isPlayAni = true
-- 前端用展示奖励
self.fragmentRewards = {}
self.coinNum = 0
@ -64,18 +65,6 @@ function BoxRewardUI:onLoadRootComplete()
self.titleTx = self.uiMap["box_reward_ui.title.text"]
self.titleTx:setText(I18N:getGlobalText(I18N.GlobalConst.SHOP_DESC_8)) -- 恭喜获得
self.scrollRectObj = self.uiMap["box_reward_ui.scroll_rect"]
self.scrollRect = self.scrollRectObj:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE)
self.scrollRect:addInitCallback(function()
return BOX_HERO_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(self.fragmentRewards[index])
self:playCellAction(cell, index)
end)
self.scrollRect:clearCells()
self.scrollRect:refillCells(#self.fragmentRewards)
self.coinNode = self.uiMap["box_reward_ui.coin_node"]
self.coinIcon = self.uiMap["box_reward_ui.coin_node.coin"]
self.coinTx = self.uiMap["box_reward_ui.coin_node.text"]
@ -89,9 +78,14 @@ function BoxRewardUI:onLoadRootComplete()
self.closeTx = self.uiMap["box_reward_ui.close_tx"]
self.closeTx:setText(I18N:getGlobalText(I18N.GlobalConst.CLICK_CLOSE_DESC))
self:refreshCloseText()
self.mask = self.uiMap["box_reward_ui.mask"]
self.mask:addClickListener(function()
-- 动画期间不可关闭
if self.isPlayAni then
return
end
self:closeUI()
-- 如果宝箱等级提升了 则要弹出宝箱等级提升UI
if DataManager.SummonData:checkNeedPopBoxLvUpUI() then
@ -102,6 +96,79 @@ function BoxRewardUI:onLoadRootComplete()
-- 关闭上一个界面
EventManager:dispatchEvent(EventManager.CUSTOM_EVENT.CLOSE_BOX_OPEN_UI)
-- 因为特殊表现 用普通scrollRect处理
self.scrollRectContent = self.uiMap["box_reward_ui.scroll_rect.viewport.content"]
self.scrollMask = self.uiMap["box_reward_ui.scroll_mask"]
self.scrollMask:setVisible(true)
self.baseCell = self.uiMap["box_reward_ui.scroll_rect.viewport.content.cell"]
self.baseCell:setVisible(false)
-- 已拥有的cell
self.rewardCells = self.rewardCells or {}
local contentTrans = self.scrollRectContent:getTransform()
local alreadyCellCount = contentTrans.childCount - 1
if alreadyCellCount > 0 then
for i = 1, alreadyCellCount do
local prefab = contentTrans:GetChild(i).gameObject
local UIPrefabObject = require "app/bf/unity/uiprefab_object"
local prefabObject = UIPrefabObject:create()
prefabObject:initWithPrefab(GConst.EMPTY_STRING, prefab)
prefabObject:initPrefabHelper()
table.insert(self.rewardCells, CellManager:addCellComp(prefabObject, BOX_HERO_CELL))
end
end
local rewardCount = #self.fragmentRewards
local cellCount = #self.rewardCells
local needCreateCount = rewardCount - cellCount
-- 将cell扩充至与奖励等数量
if needCreateCount > 0 then
for i = 1, needCreateCount do
local prefab = CS.UnityEngine.Object.Instantiate(self.baseCell:getGameObject())
local UIPrefabObject = require "app/bf/unity/uiprefab_object"
local prefabObject = UIPrefabObject:create()
prefabObject:initWithPrefab(GConst.EMPTY_STRING, prefab)
prefabObject:initPrefabHelper()
prefabObject:setParent(self.scrollRectContent, false)
prefabObject:getTransform():SetAsLastSibling()
prefabObject:setVisible(true)
-- 设定位置
local index = cellCount + i
local rowIdx = (index - 1) % CELL_NUM + 1 -- 横排位置 1-4
local cowIdx = (index - 1) // CELL_NUM + 1
if rewardCount <= CELL_NUM then -- 居中展示
prefabObject:setAnchoredPosition(POSITION_X_DATA[rewardCount][rowIdx], 0)
else
prefabObject:setAnchoredPosition(POSITION_X_DATA[4][rowIdx], -(cowIdx - 1) * REWARD_CELL_HEIGHT)
end
table.insert(self.rewardCells, CellManager:addCellComp(prefabObject, BOX_HERO_CELL))
end
end
-- 刷新
cellCount = #self.rewardCells
for i = 1, cellCount do
if i <= rewardCount then
self.rewardCells[i]:setVisible(true)
self.rewardCells[i]:refresh(self.fragmentRewards[i])
else
self.rewardCells[i]:setVisible(false)
end
end
self.maxCow = (rewardCount - 1) // CELL_NUM + 1 -- 最大行数 1-4 = 1, 5-8 = 2,...
self.maxScrollContentHeight = math.max(BASE_CONTENT_HEIGHT, self.maxCow * REWARD_CELL_HEIGHT)
self.scrollRectContent:setAnchoredPositionY(0)
self.scrollRectContent:setSizeDeltaY(self.maxScrollContentHeight)
-- 如果超出屏蔽显示范围 初始化滑动数据
if rewardCount > MAX_SCREEN_CELL_COUNT then
self.showAction = true
self.turnIdx = MAX_SCREEN_CELL_COUNT // CELL_NUM
self.maxIdx = math.ceil(rewardCount / CELL_NUM)
end
-- 播放表现
for idx = 1, rewardCount do
local cell = self.rewardCells[idx]
self:playCellAction(cell, idx)
end
end
function BoxRewardUI:playCellAction(cell, idx)
@ -126,23 +193,43 @@ function BoxRewardUI:playCellAction(cell, idx)
tween:SetEase(CS.DG.Tweening.Ease.InOutSine)
seq:Append(tween)
seq:AppendCallback(function()
self.actionStatus[idx] = true
-- self:turnToNext(idx) -- 去掉滑动
if not self:isClosed() then
self.actionStatus[idx] = true
self:turnToNext(idx)
-- 最后一个表现完毕
if idx == #self.fragmentRewards then
self.isPlayAni = false
self:refreshCloseText()
self.scrollMask:setVisible(false)
end
end
end)
end
-- function BoxRewardUI:turnToNext(idx)
-- if not self.showAction or idx ~= self.turnIdx * CELL_NUM then
-- return
-- end
-- self:performWithDelayGlobal(function()
-- self.scrollRect:moveToIndex((self.turnIdx - (MAX_SCREEN_CELL_COUNT // CELL_NUM))*CELL_NUM + 1)
-- self.turnIdx = self.turnIdx + 1
-- if self.turnIdx >= self.maxIdx then
-- self.showAction = false
-- end
-- end, 0.025)
-- end
function BoxRewardUI:turnToNext(idx)
if self:isClosed() then
return
end
if not self.showAction or idx ~= self.turnIdx * CELL_NUM then
return
end
if self.contentSeq then
self.contentSeq:Kill()
self.contentSeq = nil
end
self.contentSeq = self.root:createBindTweenSequence()
self.contentSeq:Append(
self.scrollRectContent:getTransform():DOLocalMoveY(math.min(self.maxScrollContentHeight - BASE_CONTENT_HEIGHT, (self.turnIdx + 1) * REWARD_CELL_HEIGHT - BASE_CONTENT_HEIGHT), SCROLL_MOVE_TIME)
)
self.contentSeq:AppendCallback(
function()
self.turnIdx = self.turnIdx + 1
if self.turnIdx >= self.maxIdx then
self.showAction = false
end
end
)
end
function BoxRewardUI:getCellDelayTime(idx)
if not self.cellDelayTime[idx] then
@ -163,4 +250,8 @@ function BoxRewardUI:getCellDelayTime(idx)
return self.cellDelayTime[idx]
end
function BoxRewardUI:refreshCloseText()
self.closeTx:setVisible(not self.isPlayAni)
end
return BoxRewardUI