召唤表现
This commit is contained in:
parent
12f51be781
commit
6bd53ebfa2
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user