c1_lua/lua/app/ui/battle/battle_ui.lua
xiekaidong 76ace3a065 棋盘
2023-04-07 11:24:27 +08:00

136 lines
4.1 KiB
Lua

local BattleUI = class("BattleUI", BaseUI)
local GRID_CELL = "app/ui/battle/cell/grid_cell"
local GRID_CELL_PATH = "assets/prefabs/ui/battle/cell/grid_cell.prefab"
local DEFAULT_X = 10000
function BattleUI:getPrefabPath()
return "assets/prefabs/ui/battle/battle_ui.prefab"
end
function BattleUI:onLoadRootComplete()
self:_display()
end
function BattleUI:_display()
local uiMap = self.root:genAllChildren()
self:initGridCell()
end
function BattleUI:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["battle_ui.close_btn"]:addClickListener(function()
self:initGridCell()
end)
end
function BattleUI:initGridCell()
if self.gridCells and self.gridInitOver then
self:onInitGridCellOver()
return
end
local uiMap = self.root:genAllChildren()
local parent = uiMap["battle_ui.bg_2.board_node"]
self.gridCells = {}
self.cellLoadRemianCount = GConst.BattleConst.ROW_COUNT * GConst.BattleConst.COLUMN_COUNT
for r = 1, GConst.BattleConst.ROW_COUNT do
for c = 1, GConst.BattleConst.COLUMN_COUNT do
CellManager:loadCellAsync(GRID_CELL_PATH, GRID_CELL, parent, function(cell)
local posId = ModuleManager.BattleManager:getPosId(r, c)
self.gridCells[posId] = cell
local gameObject = cell:getGameObject()
gameObject.name = "grid_cell_" .. posId
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X) -- 初始化时放到屏幕外
self.cellLoadRemianCount = self.cellLoadRemianCount - 1
if self.cellLoadRemianCount <= 0 then
self.gridInitOver = true
self:onInitGridCellOver()
end
end)
end
end
end
function BattleUI:onInitGridCellOver()
for posId, cell in pairs(self.gridCells) do
local entity = DataManager.BattleData:getGridEntity(posId)
if entity then
cell:refresh(entity)
cell:addTouchListener(function(eventType)
if self.battleController then
self.battleController:onTouchEvent(eventType, entity:getPosId())
end
end)
cell:unBindAll()
cell:bind(entity, "isDirty", function()
cell:refresh(entity)
end)
local pos = entity:getPos()
cell:getBaseObject():setAnchoredPosition(pos.x, pos.y)
entity:setCell(cell)
end
end
end
function BattleUI:setController(controller)
self.battleController = controller
end
function BattleUI:showBoardMask(elementType)
if not self.gridCells then
return
end
local entities = DataManager.BattleData:getGridEnties()
for posId, entity in pairs(entities) do
if entity and entity:getCell() then
entity:getCell():refresh(entity, elementType)
end
end
end
function BattleUI:eliminationAni(cellList, callback)
if not cellList then
if callback then
callback()
end
return
end
for _, cell in ipairs(cellList) do
if cell then
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X)
end
end
if callback then
self:performWithDelayGlobal(function()
callback()
end, 1)
end
end
function BattleUI:fallGrid(listInfo)
for posId, info in pairs(listInfo) do
local entity = DataManager.BattleData:getGridEntity(posId)
local cell = entity:getCell()
local posId = entity:getPosId()
if cell then
local gameObject = cell:getGameObject()
gameObject.name = "grid_cell_" .. posId
if cell.fallSeq then
cell.fallSeq:Kill()
cell.fallSeq = nil
end
local baseObject = cell:getBaseObject()
cell.fallSeq = baseObject:createBindTweenSequence()
baseObject:setAnchoredPosition(info[1].x, info[1].y)
local count = #info
cell.fallSeq:Append(baseObject:getTransform():DOLocalPath(info, GConst.BattleConst.ONE_STEP_TIME * count))
end
end
end
return BattleUI