feat: 资源与舰队安全添加及容量校验优化

实现资源和舰队安全添加函数,防止超出仓储/舰队容量时溢出,超出部分自动丢弃。运输、部署、舰队返回等流程统一使用安全添加逻辑。建造队列纳入容量校验,导弹容量校验支持队列中导弹数量。修复NPC舰船建造极端情况下的除零和NaN问题。
This commit is contained in:
谦君
2025-12-17 23:07:48 +08:00
parent ebd7eb1405
commit 6813456d12
7 changed files with 196 additions and 52 deletions

View File

@@ -173,6 +173,24 @@ export const calculateCurrentMissileCount = (defense: Partial<Record<DefenseType
return interplanetaryMissiles + antiBallisticMissiles
}
/**
* 计算建造队列中的导弹总数
*/
export const calculateQueueMissileCount = (buildQueue: Array<{ type: string; itemType: string; quantity?: number }>): number => {
let queueMissileCount = 0
for (const item of buildQueue) {
if (item.type === 'defense') {
const defenseType = item.itemType as DefenseType
if (defenseType === DefenseType.InterplanetaryMissile || defenseType === DefenseType.AntiBallisticMissile) {
queueMissileCount += item.quantity || 0
}
}
}
return queueMissileCount
}
/**
* 检查导弹容量限制
*/
@@ -180,7 +198,8 @@ export const checkMissileSiloLimit = (
defenseType: DefenseType,
currentDefense: Partial<Record<DefenseType, number>>,
buildings: Partial<Record<BuildingType, number>>,
quantity: number
quantity: number,
buildQueue?: Array<{ type: string; itemType: string; quantity?: number }>
): boolean => {
// 只对导弹类型进行检查
if (defenseType !== DefenseType.InterplanetaryMissile && defenseType !== DefenseType.AntiBallisticMissile) {
@@ -189,7 +208,8 @@ export const checkMissileSiloLimit = (
const maxCapacity = calculateMissileSiloCapacity(buildings)
const currentCount = calculateCurrentMissileCount(currentDefense)
const newCount = currentCount + quantity
const queueCount = buildQueue ? calculateQueueMissileCount(buildQueue) : 0
const newCount = currentCount + queueCount + quantity
return newCount <= maxCapacity
}