Files
Endfield-Data/LuaScripts/Common/Utils/DomainDevelopmentUtils.lua
2025-12-02 20:37:18 +07:00

340 lines
13 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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