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