197 lines
6.3 KiB
Lua
197 lines
6.3 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()
|
|
self:_addListeners()
|
|
end
|
|
|
|
function BattleUI:_display()
|
|
local uiMap = self.root:genAllChildren()
|
|
self:initGridCell()
|
|
self:initSkill()
|
|
end
|
|
|
|
function BattleUI:_addListeners()
|
|
local uiMap = self.root:genAllChildren()
|
|
uiMap["battle_ui.close_btn"]:addClickListener(function()
|
|
ModuleManager.BattleManager:endBattleAndExit()
|
|
end)
|
|
end
|
|
|
|
function BattleUI:initSkill()
|
|
if self.skillObjs then
|
|
return
|
|
end
|
|
self.skillObjs = {}
|
|
|
|
local uiMap = self.root:genAllChildren()
|
|
for elementType, skillEntity in pairs(DataManager.BattleData:getSkillEntities()) do
|
|
if not self.skillObjs[elementType] then
|
|
local prefix = "battle_ui.bg_2.skill_node_" .. elementType
|
|
self.skillObjs[elementType] = {
|
|
icon = uiMap[prefix],
|
|
mask = uiMap[prefix .. ".mask"],
|
|
}
|
|
self.skillObjs[elementType].imgComp = self.skillObjs[elementType].mask:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE)
|
|
self.skillObjs[elementType].icon:setSprite(GConst.ATLAS_PATH.ICON_SKILL, skillEntity:getBattleIcon())
|
|
self.skillObjs[elementType].mask:setSprite(GConst.ATLAS_PATH.ICON_SKILL, skillEntity:getBattleIcon())
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:refreshSkill(elementMap)
|
|
if not self.skillObjs then
|
|
return
|
|
end
|
|
|
|
for elementType, skillEntity in pairs(DataManager.BattleData:getSkillEntities()) do
|
|
if not self.skillObjs[elementType] then
|
|
return
|
|
end
|
|
local add = 0
|
|
if elementMap and elementMap[elementType] then
|
|
add = elementMap[elementType]
|
|
end
|
|
local curEnergy = skillEntity:getEnergy() + add
|
|
local needEnergy = skillEntity:getNeedEnergy()
|
|
self.skillObjs[elementType].imgComp.fillAmount = (needEnergy - curEnergy) / needEnergy
|
|
end
|
|
end
|
|
|
|
function BattleUI:initGridCell()
|
|
if self.root.gridCells then
|
|
self.gridCells = self.root.gridCells
|
|
self.gridInitOver = true
|
|
end
|
|
|
|
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()
|
|
self.root.gridCells = self.gridCells
|
|
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, self.curElementType)
|
|
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
|
|
self.curElementType = elementType
|
|
local entities = DataManager.BattleData:getGridEnties()
|
|
for posId, entity in pairs(entities) do
|
|
if entity and entity:getCell() then
|
|
entity:getCell():refresh(entity, self.curElementType)
|
|
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
|
|
|
|
self:refreshSkill()
|
|
end
|
|
|
|
function BattleUI:fallGrid(listInfo, callback)
|
|
self.fallAniCount = 0
|
|
for posId, info in pairs(listInfo) do
|
|
self.fallAniCount = self.fallAniCount + 1
|
|
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))
|
|
cell.fallSeq:AppendCallback(function()
|
|
self.fallAniCount = self.fallAniCount - 1
|
|
if self.fallAniCount == 0 then
|
|
if callback then
|
|
callback()
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
return BattleUI |