340 lines
13 KiB
Lua
340 lines
13 KiB
Lua
local DomainDevelopmentUtils = {}
|
||
|
||
local DetailState = {
|
||
DetailPreAndCur = 1,
|
||
Unknown = 2,
|
||
Ellipsis = 3,
|
||
}
|
||
|
||
|
||
local UpgradeEffectConfig = {
|
||
["isMineOutputUp"] = {
|
||
sortId = 0,
|
||
effectDesc = "LUA_DOMAIN_DEVELOPMENT_MINE_OUTPUT_UP",
|
||
},
|
||
["bandwidth"] = {
|
||
sortId = 1,
|
||
effectDesc = "LUA_DOMAIN_DEV_BANDWIDTH_UPGRADE",
|
||
},
|
||
["travelPoleLimit"] = {
|
||
sortId = 2,
|
||
effectDesc = "LUA_DOMAIN_DEV_TRAVEL_POLE_LIMIT_UPGRADE",
|
||
},
|
||
["battleBuildingLimit"] = {
|
||
sortId = 3,
|
||
effectDesc = "LUA_DOMAIN_DEV_BATTLE_BUILDING_LIMIT_UPGRADE",
|
||
},
|
||
}
|
||
|
||
local CANT_GET_COLOR = "787878"
|
||
|
||
local LOCKED_LEVEL_ID = "LOCKED"
|
||
local LOCKED_LEVEL_SORT_ID = 9999
|
||
|
||
function DomainDevelopmentUtils.updateLevelCellTitle(view, domainId, lv)
|
||
local domainDevSys = GameInstance.player.domainDevelopmentSystem
|
||
|
||
local domainData = domainDevSys.domainDevDataDic:get_Item(domainId)
|
||
local isCurLv = lv == domainData.lv
|
||
local reachedLevel = lv <= domainData.lv
|
||
local isGet = domainDevSys:IsLevelRewarded(domainId, lv)
|
||
|
||
local domainCfg = Tables.domainDataTable[domainId]
|
||
local colorStr = reachedLevel and domainCfg.domainGradeTitleColor or CANT_GET_COLOR
|
||
view.bgImage.color = UIUtils.getColorByString(colorStr)
|
||
view.lvNumberTxt.text = lv
|
||
|
||
view.unlockNode.gameObject:SetActive(reachedLevel)
|
||
view.inCompleteNode.gameObject:SetActive(not reachedLevel)
|
||
|
||
local firstLevel = lv == 1
|
||
view.receiveBtn.gameObject:SetActive(not firstLevel and not isGet)
|
||
view.receivedNode.gameObject:SetActive(not firstLevel and isGet)
|
||
view.completeNode.gameObject:SetActive(firstLevel)
|
||
|
||
view.rewardListNaviGroup.onIsFocusedChange:AddListener(function(isFocused)
|
||
if not isFocused then
|
||
Notify(MessageConst.HIDE_ITEM_TIPS)
|
||
end
|
||
end)
|
||
end
|
||
|
||
function DomainDevelopmentUtils.updateLevelRewardCell(cell, rewardInfo, isGet)
|
||
local hasItem = rewardInfo ~= nil
|
||
cell.itemReward.gameObject:SetActive(hasItem)
|
||
cell.emptyNode.gameObject:SetActive(not hasItem)
|
||
|
||
if rewardInfo then
|
||
cell.itemReward:InitItem(rewardInfo, function()
|
||
UIUtils.showItemSideTips(cell.itemReward, UIConst.UI_TIPS_POS_TYPE.LeftDown)
|
||
end)
|
||
cell.itemReward:SetExtraInfo({ isSideTips = DeviceInfo.usingController })
|
||
end
|
||
|
||
cell.itemReward.view.rewardedCover.gameObject:SetActive(isGet)
|
||
end
|
||
|
||
function DomainDevelopmentUtils.updateLevelEffectCell(cell, levelEffectInfoUnit, reachedLevel)
|
||
|
||
local isSpecial = false
|
||
if isSpecial then
|
||
if reachedLevel then
|
||
cell.stateCtr:SetState("AchieveSpecial")
|
||
else
|
||
cell.stateCtr:SetState("InCompleteSpecial")
|
||
end
|
||
else
|
||
if reachedLevel then
|
||
cell.stateCtr:SetState("AchieveNormal")
|
||
else
|
||
cell.stateCtr:SetState("InCompleteNormal")
|
||
end
|
||
end
|
||
|
||
if levelEffectInfoUnit.firstLevel then
|
||
cell.descTxt.text = levelEffectInfoUnit.effectDesc
|
||
else
|
||
local levelId = levelEffectInfoUnit.levelId
|
||
if levelId then
|
||
local levelName = Language.LUA_DOMAIN_DEV_LOCKED_LEVEL_DES
|
||
if levelId ~= LOCKED_LEVEL_ID then
|
||
levelName = Tables.LevelDescTable[levelId].showName
|
||
end
|
||
local effectDesc = levelEffectInfoUnit.effectDesc
|
||
cell.descTxt.text = string.format(Language.LUA_DOMAIN_DEVELOPMENT_LEVEL_NAME_CONNECT_EFFECT, levelName, effectDesc)
|
||
else
|
||
cell.descTxt.text = levelEffectInfoUnit.effectDesc
|
||
end
|
||
end
|
||
|
||
local detailState = levelEffectInfoUnit.detailState
|
||
cell.promoteNode.gameObject:SetActive(detailState == DetailState.DetailPreAndCur)
|
||
cell.unknownNode.gameObject:SetActive(detailState == DetailState.Unknown)
|
||
cell.unlockNode.gameObject:SetActive(detailState == DetailState.Ellipsis)
|
||
if levelEffectInfoUnit.isFinalMax and detailState ~= DetailState.Unknown then
|
||
cell.stateCtr:SetState("IsFinalMax")
|
||
else
|
||
cell.stateCtr:SetState("NotFinalMax")
|
||
end
|
||
|
||
if detailState == DetailState.DetailPreAndCur then
|
||
cell.preTxt.text = UIUtils.getNumString(levelEffectInfoUnit.pre)
|
||
cell.curTxt.text = UIUtils.getNumString(levelEffectInfoUnit.cur)
|
||
end
|
||
|
||
cell.animationWrapper:Play("domaingradepopupcell_in")
|
||
end
|
||
|
||
function DomainDevelopmentUtils.genLevelEffectInfo(domainId, lv)
|
||
local levelEffectInfo = {}
|
||
|
||
if lv == 1 then
|
||
table.insert(levelEffectInfo, {
|
||
firstLevel = true,
|
||
effectDesc = Language.LUA_DOMAIN_DEV_LEVEL_ONE_EFFECT_DESC,
|
||
detailState = DetailState.Ellipsis,
|
||
})
|
||
return levelEffectInfo
|
||
end
|
||
|
||
|
||
|
||
local domainCfg = Tables.domainDataTable[domainId]
|
||
local csIndex = CSIndex(lv)
|
||
local domainLevelCfg = domainCfg.domainDevelopmentLevel[csIndex]
|
||
local domainLevelEffect = domainLevelCfg.domainDevelopmentLevelEffect
|
||
local moneyLimit = domainLevelCfg.moneyLimit
|
||
|
||
local mapMgr = GameInstance.player.mapManager
|
||
|
||
|
||
local preLevel = lv - 1
|
||
local preLevelCsIndex = CSIndex(preLevel)
|
||
local domainPreLevelCfg = domainCfg.domainDevelopmentLevel[preLevelCsIndex]
|
||
|
||
|
||
|
||
local hasTransCfg, domainTransmissionCfg = Tables.factoryDomainItemTransmissionTable:TryGetValue(domainId)
|
||
if hasTransCfg then
|
||
local transferUnlockLevel = domainTransmissionCfg.unlockLevel
|
||
local transferUnlockLosslessLevel = domainTransmissionCfg.unlockLosslessLevel
|
||
local info
|
||
|
||
if lv == transferUnlockLevel then
|
||
|
||
info = {
|
||
effectDesc = string.format(Language.LUA_DOMAIN_DEVELOPMENT_UNLOCK_TRANSFER, domainCfg.domainName),
|
||
detailState = DetailState.Ellipsis,
|
||
isNewUnlockSystem = true,
|
||
isFinalMax = domainTransmissionCfg.levelToIsFinalMaxCapacity[lv],
|
||
|
||
typeSortId = 1,
|
||
levelSortId = -1,
|
||
effectSortId = -1,
|
||
}
|
||
elseif lv > transferUnlockLevel then
|
||
|
||
local preCapacity
|
||
local nowCapacity
|
||
if preLevel <= #domainTransmissionCfg.levelToCapacity then
|
||
preCapacity = domainTransmissionCfg.levelToCapacity[preLevel]
|
||
end
|
||
if lv <= #domainTransmissionCfg.levelToCapacity then
|
||
nowCapacity = domainTransmissionCfg.levelToCapacity[lv]
|
||
end
|
||
if preCapacity ~= nowCapacity and preCapacity ~= nil then
|
||
info = {
|
||
effectDesc = string.format(Language.LUA_DOMAIN_DEVELOPMENT_UNLOCK_TRANSFER_UPGRADE, domainCfg.domainName),
|
||
detailState = DetailState.DetailPreAndCur,
|
||
pre = preCapacity,
|
||
cur = nowCapacity,
|
||
isNewUnlockSystem = true,
|
||
isFinalMax = domainTransmissionCfg.levelToIsFinalMaxCapacity[lv],
|
||
|
||
typeSortId = 2,
|
||
levelSortId = -1,
|
||
effectSortId = -1,
|
||
}
|
||
end
|
||
end
|
||
|
||
if info then
|
||
table.insert(levelEffectInfo, info)
|
||
end
|
||
|
||
if lv == transferUnlockLosslessLevel then
|
||
info = {
|
||
effectDesc = string.format(Language.LUA_DOMAIN_DEVELOPMENT_UNLOCK_TRANSFER_LOSSLESS, domainCfg.domainName),
|
||
detailState = DetailState.Ellipsis,
|
||
isNewUnlockSystem = true,
|
||
|
||
typeSortId = 1,
|
||
levelSortId = -1,
|
||
effectSortId = -1,
|
||
}
|
||
table.insert(levelEffectInfo, info)
|
||
end
|
||
else
|
||
logger.error("跨区域传输表数据缺失!domainId:", domainId)
|
||
end
|
||
|
||
|
||
|
||
local preMoneyLimit = domainPreLevelCfg.moneyLimit
|
||
if preMoneyLimit ~= moneyLimit then
|
||
table.insert(levelEffectInfo, {
|
||
effectDesc = string.format(Language.LUA_DOMAIN_DEV_LEVEL_MONEY_LIMIT_UPGRADE, domainCfg.domainName),
|
||
detailState = DetailState.DetailPreAndCur,
|
||
pre = preMoneyLimit,
|
||
cur = moneyLimit,
|
||
isFinalMax = domainLevelCfg.isFinalMaxMoneyLimit,
|
||
|
||
typeSortId = 3,
|
||
levelSortId = -1,
|
||
effectSortId = -1,
|
||
})
|
||
end
|
||
|
||
|
||
|
||
|
||
local lockedLevelBandwidthUpgrade = false
|
||
local lockedLevelTravelPoleLimitUpgrade = false
|
||
local lockedLevelBattleBuildingLimitUpgrade = false
|
||
local lockedLevelMineOutputUp = false
|
||
|
||
for levelId, levelEffect in pairs(domainLevelEffect) do
|
||
|
||
local preLevelEffect = domainPreLevelCfg.domainDevelopmentLevelEffect[levelEffect.levelId]
|
||
local isLevelUnlocked = mapMgr:IsLevelUnlocked(levelId)
|
||
|
||
|
||
if (levelEffect.isMineOutputUp and (isLevelUnlocked or not lockedLevelMineOutputUp)) then
|
||
table.insert(levelEffectInfo, {
|
||
levelId = isLevelUnlocked and levelEffect.levelId or LOCKED_LEVEL_ID,
|
||
effectDesc = Language[UpgradeEffectConfig["isMineOutputUp"].effectDesc],
|
||
detailState = isLevelUnlocked and DetailState.Ellipsis or DetailState.Unknown,
|
||
isFinalMax = levelEffect.isFinalMaxMineOutputUp,
|
||
|
||
typeSortId = 5,
|
||
levelSortId = isLevelUnlocked and levelEffect.sortId or LOCKED_LEVEL_SORT_ID,
|
||
effectSortId = UpgradeEffectConfig["isMineOutputUp"].sortId,
|
||
})
|
||
if not isLevelUnlocked then
|
||
lockedLevelMineOutputUp = true
|
||
end
|
||
end
|
||
|
||
|
||
local preBandwidth = preLevelEffect.bandwidth
|
||
if (preBandwidth ~= levelEffect.bandwidth and (isLevelUnlocked or not lockedLevelBandwidthUpgrade)) then
|
||
table.insert(levelEffectInfo, {
|
||
levelId = isLevelUnlocked and levelEffect.levelId or LOCKED_LEVEL_ID,
|
||
effectDesc = Language[UpgradeEffectConfig["bandwidth"].effectDesc],
|
||
detailState = isLevelUnlocked and DetailState.DetailPreAndCur or DetailState.Unknown,
|
||
pre = preBandwidth,
|
||
cur = levelEffect.bandwidth,
|
||
isFinalMax = levelEffect.isFinalMaxBandwidth,
|
||
|
||
typeSortId = 5,
|
||
levelSortId = isLevelUnlocked and levelEffect.sortId or LOCKED_LEVEL_SORT_ID,
|
||
effectSortId = UpgradeEffectConfig["bandwidth"].sortId,
|
||
})
|
||
|
||
|
||
|
||
if not isLevelUnlocked then
|
||
lockedLevelBandwidthUpgrade = true
|
||
end
|
||
end
|
||
|
||
|
||
local preTravelPoleLimit = preLevelEffect.travelPoleLimit
|
||
if (preTravelPoleLimit ~= levelEffect.travelPoleLimit and (isLevelUnlocked or not lockedLevelTravelPoleLimitUpgrade)) then
|
||
table.insert(levelEffectInfo, {
|
||
levelId = isLevelUnlocked and levelEffect.levelId or LOCKED_LEVEL_ID,
|
||
effectDesc = Language[UpgradeEffectConfig["travelPoleLimit"].effectDesc],
|
||
detailState = isLevelUnlocked and DetailState.DetailPreAndCur or DetailState.Unknown,
|
||
pre = preTravelPoleLimit,
|
||
cur = levelEffect.travelPoleLimit,
|
||
isFinalMax = levelEffect.isFinalMaxTravelPoleLimit,
|
||
|
||
typeSortId = 5,
|
||
levelSortId = isLevelUnlocked and levelEffect.sortId or LOCKED_LEVEL_SORT_ID,
|
||
effectSortId = UpgradeEffectConfig["travelPoleLimit"].sortId,
|
||
})
|
||
if not isLevelUnlocked then
|
||
lockedLevelTravelPoleLimitUpgrade = true
|
||
end
|
||
end
|
||
|
||
|
||
local preBattleBuildingLimit = preLevelEffect.battleBuildingLimit
|
||
if (preBattleBuildingLimit ~= levelEffect.battleBuildingLimit and (isLevelUnlocked or not lockedLevelBattleBuildingLimitUpgrade)) then
|
||
table.insert(levelEffectInfo, {
|
||
levelId = isLevelUnlocked and levelEffect.levelId or LOCKED_LEVEL_ID,
|
||
effectDesc = Language[UpgradeEffectConfig["battleBuildingLimit"].effectDesc],
|
||
detailState = isLevelUnlocked and DetailState.DetailPreAndCur or DetailState.Unknown,
|
||
pre = preBattleBuildingLimit,
|
||
cur = levelEffect.battleBuildingLimit,
|
||
isFinalMax = levelEffect.isFinalMaxBattleBuildingLimit,
|
||
|
||
typeSortId = 5,
|
||
levelSortId = isLevelUnlocked and levelEffect.sortId or LOCKED_LEVEL_SORT_ID,
|
||
effectSortId = UpgradeEffectConfig["battleBuildingLimit"].sortId,
|
||
})
|
||
if not isLevelUnlocked then
|
||
lockedLevelBattleBuildingLimitUpgrade = true
|
||
end
|
||
end
|
||
end
|
||
|
||
|
||
|
||
table.sort(levelEffectInfo, Utils.genSortFunction({ "typeSortId", "levelSortId", "effectSortId" }, true))
|
||
return levelEffectInfo
|
||
end
|
||
|
||
|
||
_G.DomainDevelopmentUtils = DomainDevelopmentUtils
|
||
return DomainDevelopmentUtils |