英雄解锁和强制上阵的判定

This commit is contained in:
xiekaidong 2023-04-19 22:20:22 +08:00
parent ce6c6feee3
commit 9be9feefbd
9 changed files with 145 additions and 17 deletions

View File

@ -38,6 +38,9 @@ local LocalizationGlobalConst =
REWARD_PREVIEW_DESC = "REWARD_PREVIEW_DESC",
HERO_DESC_8 = "HERO_DESC_8",
HERO_DESC_9 = "HERO_DESC_9",
BATTLE_DESC_8 = "BATTLE_DESC_8",
HERO_DESC_10 = "HERO_DESC_10",
}
return LocalizationGlobalConst

View File

@ -38,6 +38,9 @@ local localization_global =
["REWARD_PREVIEW_DESC"] = "奖励预览",
["HERO_DESC_8"] = "使用",
["HERO_DESC_9"] = "信息",
["HERO_DESC_10"] = "通关章节{0}解锁",
["BATTLE_DESC_8"] = "还有可上阵英雄",
}
return localization_global

View File

@ -20,6 +20,10 @@ function ChapterManager:openBox(chapterId, index)
end
function ChapterManager:startFight()
if not ModuleManager.FormationManager:formationIsFull() then
GFunc.showToast(I18N:getGlobalText(I18N.GlobalConst.BATTLE_DESC_8))
return
end
---- 通信
ModuleManager.BattleManager:playBattle(GConst.BattleConst.BATTLE_TYPE.STAGE)
end

View File

@ -17,4 +17,25 @@ function FormationManager:upHeroToStageFormation(heroId, matchType)
end)
end
function FormationManager:formationIsFull()
local actvieMap = DataManager.HeroData:getMatchActiveHeroMap()
local formation = DataManager.FormationData:getStageFormation()
local count = 0
for matchtype = 1, GConst.BattleConst.ELEMENT_TYPE_COUNT do
if not formation[matchtype] or formation[matchtype] <= 0 then
if actvieMap[matchtype] and table.nums(actvieMap[matchtype]) > 0 then
return false
end
else
count = count + 1
end
end
if count <= 0 then
return false
end
return true
end
return FormationManager

View File

@ -6,9 +6,11 @@ function HeroCell:init()
self.heroBg = uiMap["hero_cell.hero_bg"]
self.check = uiMap["hero_cell.hero_bg.mask"]
self.matchImg = uiMap["hero_cell.hero_bg.match_img"]
self.progressBg = uiMap["hero_cell.hero_bg.progress_bg"]
self.progress = uiMap["hero_cell.hero_bg.progress"]
self.progressTx = uiMap["hero_cell.hero_bg.progress_tx"]
self.lvTx = uiMap["hero_cell.hero_bg.lv_tx"]
self.unlockTx = uiMap["hero_cell.hero_bg.unlock_tx"]
self.isGray = false
self.baseObject:addClickListener(function()
if self.clickCallback then
@ -27,6 +29,16 @@ function HeroCell:refresh(heroEntity, isGray)
self.progressTx:setText(fragmentCount .. "/" .. needFragmentCount)
self.progress:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = fragmentCount / needFragmentCount
self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, heroEntity:getLv()))
if heroEntity:isUnlock() then
self.lvTx:setVisible(true)
self.progressBg:setVisible(not heroEntity:isMaxLv())
self.unlockTx:setVisible(false)
else
self.lvTx:setVisible(false)
self.progressBg:setVisible(false)
self.unlockTx:setVisible(true)
self.unlockTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_10, heroEntity:getUnlcokChapter()))
end
end
function HeroCell:refreshWithCfgId(id, isGray)
@ -41,6 +53,9 @@ function HeroCell:refreshWithCfgId(id, isGray)
self.progressTx:setText(fragmentCount .. "/" .. needFragmentCount)
self.progress:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = fragmentCount / needFragmentCount
self.lvTx:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_1, lv))
self.lvTx:setVisible(true)
self.progressBg:setVisible(true)
self.unlockTx:setVisible(false)
end
function HeroCell:_refresh(heroInfo, isGray)

View File

@ -10,7 +10,7 @@ function HeroComp:init()
return HERO_LIST_CELL
end)
self.scrollRect:addRefreshCallback(function(index, cell)
cell:refresh(index, self.heroList, self.stageFormation, self.allHeroCount, self.activeCount, function(cell, heroId)
cell:refresh(index, self.heroList, self.stageFormation, self.allHeroCount, self.unlockCount, function(cell, heroId)
self:onClickHero(cell, heroId)
end)
end)
@ -55,6 +55,8 @@ function HeroComp:init()
end
function HeroComp:refresh()
self:clearAdapt()
self:adapt()
self.stageFormation = DataManager.FormationData:getStageFormation()
self:refreshStageFormation()
self:refreshScrollRect()
@ -95,11 +97,11 @@ end
function HeroComp:refreshScrollRect()
self:sortHeroList()
self.allHeroCount = #self.heroList
self.activeCount = DataManager.HeroData:getActiveHeroCount()
local lockCount = self.allHeroCount - self.activeCount
self.unlockCount = DataManager.HeroData:getUnlockHeroCount()
local lockCount = self.allHeroCount - self.unlockCount
local cellCount = 0
if self.activeCount > 0 then
cellCount = cellCount + math.ceil(self.activeCount / 4)
if self.unlockCount > 0 then
cellCount = cellCount + math.ceil(self.unlockCount / 4)
end
if lockCount > 0 then
cellCount = cellCount + math.ceil(lockCount / 4)
@ -121,6 +123,7 @@ function HeroComp:sortHeroList()
table.sort(self.heroList, function(a, b)
heroA = HeroData:getHeroById(a)
heroB = HeroData:getHeroById(b)
if heroA:isUnlock() == heroB:isUnlock() then
if heroA:isActived() and heroB:isActived() then
if heroA:getLv() == heroB:getLv() then
if heroA:getQlt() == heroB:getQlt() then
@ -138,6 +141,9 @@ function HeroComp:sortHeroList()
else
return a > b
end
else
return heroA:isUnlock()
end
end)
end
@ -166,4 +172,33 @@ function HeroComp:onClickHero(cell, heroId)
end
end
function HeroComp:adapt()
local addH = GFunc.calculateFitSizeY()
local uiMap = self:getBaseObject():genAllChildren()
local scrollRect = uiMap["hero_ui.scrollrect"]
local viewport = uiMap["hero_ui.scrollrect.viewport"]
if not self.rectDefaultSize then
self.rectDefaultSize = scrollRect:getSizeDelta()
end
if not self.viewDefaultSize then
self.viewDefaultSize = viewport:getSizeDelta()
end
scrollRect:setSizeDelta(self.rectDefaultSize.x, self.rectDefaultSize.y + addH)
viewport:setSizeDelta(self.viewDefaultSize.x, self.viewDefaultSize.y + addH)
end
function HeroComp:clearAdapt()
local uiMap = self:getBaseObject():genAllChildren()
local scrollRect = uiMap["hero_ui.scrollrect"]
local viewport = uiMap["hero_ui.scrollrect.viewport"]
if not self.rectDefaultSize then
self.rectDefaultSize = scrollRect:getSizeDelta()
end
if not self.viewDefaultSize then
self.viewDefaultSize = viewport:getSizeDelta()
end
scrollRect:setSizeDelta(self.rectDefaultSize.x, self.rectDefaultSize.y)
viewport:setSizeDelta(self.viewDefaultSize.x, self.viewDefaultSize.y)
end
return HeroComp

View File

@ -21,7 +21,7 @@ function ChapterData:init(data, notChangeChapterId)
if not notChangeChapterId then
self.data.chapterId = data and data.chapterId or MIN_CHAPTER_ID
end
self.data.maxChapterId = data and data.maxChapterId or self.data.chapterId - 1
self.data.maxChapterId = 2--data and data.maxChapterId or self.data.chapterId - 1
self.data.chapterBoxInfo = data and data.chapterBoxInfo or {}
self.data.chapterFightInfo = data and data.chapterFightInfo or {}
end
@ -136,4 +136,8 @@ function ChapterData:getFightCost(chapterId)
return 0
end
function ChapterData:getMaxChapterId()
return self.data.maxChapterId
end
return ChapterData

View File

@ -1,10 +1,13 @@
local HeroEntity = require "app/userdata/hero/hero_entity"
local HeroData = class("HeroData", BaseData)
local HERO_CFG = ConfigManager:getConfig("hero")
function HeroData:ctor()
self.heroes = {}
self.data.activeCount = 0
self.data.isDirty = false
self.matchActiveHeroMap = {}
end
function HeroData:clear()
@ -18,6 +21,17 @@ function HeroData:init(data)
self:addHero(heroInfo.cfg_id, heroInfo.lv)
end
end
for heroId, info in pairs(HERO_CFG) do
local entity = self:getHeroById(heroId)
if entity:isActived() then
local matchType = entity:getMatchType()
if not self.matchActiveHeroMap[matchType] then
self.matchActiveHeroMap[matchType] = {}
end
self.matchActiveHeroMap[matchType][entity:getCfgId()] = true
end
end
end
function HeroData:addHero(cfgId, lv)
@ -50,12 +64,33 @@ function HeroData:getActiveHeroCount()
return self.data.activeCount
end
function HeroData:getUnlockHeroCount()
local count = 0
for id, entity in pairs(self.heroes) do
if entity:isUnlock() then
count = count + 1
end
end
return count
end
function HeroData:setHeroLv(id, lv)
local entity = self:getHeroById(id)
if not entity:isActived() then
self.data.activeCount = self.data.activeCount + 1
end
entity:setLv(lv)
if entity:isActived() then
local matchType = entity:getMatchType()
if not self.matchActiveHeroMap[matchType] then
self.matchActiveHeroMap[matchType] = {}
end
self.matchActiveHeroMap[matchType][entity:getCfgId()] = true
end
end
function HeroData:getMatchActiveHeroMap()
return self.matchActiveHeroMap
end
function HeroData:setDirty()

View File

@ -105,6 +105,10 @@ function HeroEntity:getCfgAtk(lv)
return 0
end
function HeroEntity:getUnlcokChapter()
return self.config.unlock_chapter or 0
end
function HeroEntity:updateAllAttr()
for k, v in pairs(self.baseAttrOriginal) do
self.allAttr[k] = v
@ -156,6 +160,10 @@ function HeroEntity:canLvUp()
return true
end
function HeroEntity:isUnlock()
return self:getUnlcokChapter() <= DataManager.ChapterData:getMaxChapterId()
end
function HeroEntity:isActived()
return self.data.lv >= self:getBeginLv()
end