mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 07:55:11 +08:00
refactor(logic): 将导弹相关逻辑从 shipLogic 移动到 missileLogic
重构代码结构,将与导弹容量计算和验证相关的函数从 shipLogic 模块提取到新创建的 missileLogic 模块,以提高代码的模块化和可维护性。同时更新所有相关导入路径以引用新的模块。
This commit is contained in:
@@ -3,8 +3,66 @@
|
|||||||
* 处理星际导弹攻击、射程计算、拦截等
|
* 处理星际导弹攻击、射程计算、拦截等
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { Planet, MissileAttack, DefenseType, TechnologyType, Position } from '@/types/game'
|
import type { Planet, MissileAttack, DefenseType, TechnologyType, Position, BuildQueueItem } from '@/types/game'
|
||||||
import { DefenseType as DefenseTypes } from '@/types/game'
|
import { DefenseType as DefenseTypes, BuildingType } from '@/types/game'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算导弹发射井容量
|
||||||
|
*/
|
||||||
|
export const calculateMissileSiloCapacity = (buildings: Partial<Record<BuildingType, number>>): number => {
|
||||||
|
const siloLevel = buildings[BuildingType.MissileSilo] || 0
|
||||||
|
return siloLevel * 10 // 每级存储10枚导弹
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算当前导弹总数
|
||||||
|
*/
|
||||||
|
export const calculateCurrentMissileCount = (defense: Partial<Record<DefenseType, number>>): number => {
|
||||||
|
const interplanetaryMissiles = defense[DefenseTypes.InterplanetaryMissile] || 0
|
||||||
|
const antiBallisticMissiles = defense[DefenseTypes.AntiBallisticMissile] || 0
|
||||||
|
return interplanetaryMissiles + antiBallisticMissiles
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算建造队列中的导弹总数
|
||||||
|
*/
|
||||||
|
export const calculateQueueMissileCount = (buildQueue: BuildQueueItem[]): number => {
|
||||||
|
let queueMissileCount = 0
|
||||||
|
|
||||||
|
for (const item of buildQueue) {
|
||||||
|
if (item.type === 'defense') {
|
||||||
|
const defenseType = item.itemType as DefenseType
|
||||||
|
if (defenseType === DefenseTypes.InterplanetaryMissile || defenseType === DefenseTypes.AntiBallisticMissile) {
|
||||||
|
queueMissileCount += item.quantity || 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return queueMissileCount
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查导弹容量限制
|
||||||
|
*/
|
||||||
|
export const checkMissileSiloLimit = (
|
||||||
|
defenseType: DefenseType,
|
||||||
|
currentDefense: Partial<Record<DefenseType, number>>,
|
||||||
|
buildings: Partial<Record<BuildingType, number>>,
|
||||||
|
quantity: number,
|
||||||
|
buildQueue?: BuildQueueItem[]
|
||||||
|
): boolean => {
|
||||||
|
// 只对导弹类型进行检查
|
||||||
|
if (defenseType !== DefenseTypes.InterplanetaryMissile && defenseType !== DefenseTypes.AntiBallisticMissile) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
const maxCapacity = calculateMissileSiloCapacity(buildings)
|
||||||
|
const currentCount = calculateCurrentMissileCount(currentDefense)
|
||||||
|
const queueCount = buildQueue ? calculateQueueMissileCount(buildQueue) : 0
|
||||||
|
const newCount = currentCount + queueCount + quantity
|
||||||
|
|
||||||
|
return newCount <= maxCapacity
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算导弹射程(基于脉冲引擎等级)
|
* 计算导弹射程(基于脉冲引擎等级)
|
||||||
|
|||||||
@@ -156,64 +156,6 @@ export const checkShieldDomeLimit = (
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 计算导弹发射井容量
|
|
||||||
*/
|
|
||||||
export const calculateMissileSiloCapacity = (buildings: Partial<Record<BuildingType, number>>): number => {
|
|
||||||
const siloLevel = buildings[BuildingType.MissileSilo] || 0
|
|
||||||
return siloLevel * 10 // 每级存储10枚导弹
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 计算当前导弹总数
|
|
||||||
*/
|
|
||||||
export const calculateCurrentMissileCount = (defense: Partial<Record<DefenseType, number>>): number => {
|
|
||||||
const interplanetaryMissiles = defense[DefenseType.InterplanetaryMissile] || 0
|
|
||||||
const antiBallisticMissiles = defense[DefenseType.AntiBallisticMissile] || 0
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查导弹容量限制
|
|
||||||
*/
|
|
||||||
export const checkMissileSiloLimit = (
|
|
||||||
defenseType: DefenseType,
|
|
||||||
currentDefense: Partial<Record<DefenseType, number>>,
|
|
||||||
buildings: Partial<Record<BuildingType, number>>,
|
|
||||||
quantity: number,
|
|
||||||
buildQueue?: Array<{ type: string; itemType: string; quantity?: number }>
|
|
||||||
): boolean => {
|
|
||||||
// 只对导弹类型进行检查
|
|
||||||
if (defenseType !== DefenseType.InterplanetaryMissile && defenseType !== DefenseType.AntiBallisticMissile) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
const maxCapacity = calculateMissileSiloCapacity(buildings)
|
|
||||||
const currentCount = calculateCurrentMissileCount(currentDefense)
|
|
||||||
const queueCount = buildQueue ? calculateQueueMissileCount(buildQueue) : 0
|
|
||||||
const newCount = currentCount + queueCount + quantity
|
|
||||||
|
|
||||||
return newCount <= maxCapacity
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建舰船建造队列项
|
* 创建舰船建造队列项
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { Planet, Resources, BuildQueueItem, Fleet, Officer } from '@/types/game'
|
import type { Planet, Resources, BuildQueueItem, Fleet, Officer } from '@/types/game'
|
||||||
import { ShipType, DefenseType, TechnologyType, OfficerType, BuildingType } from '@/types/game'
|
import { ShipType, DefenseType, TechnologyType, OfficerType, BuildingType } from '@/types/game'
|
||||||
import * as shipLogic from './shipLogic'
|
import * as shipLogic from './shipLogic'
|
||||||
|
import * as missileLogic from './missileLogic'
|
||||||
import * as resourceLogic from './resourceLogic'
|
import * as resourceLogic from './resourceLogic'
|
||||||
import * as officerLogic from './officerLogic'
|
import * as officerLogic from './officerLogic'
|
||||||
import * as publicLogic from './publicLogic'
|
import * as publicLogic from './publicLogic'
|
||||||
@@ -101,7 +102,7 @@ export const validateDefenseBuild = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 导弹发射井容量限制
|
// 导弹发射井容量限制
|
||||||
if (!shipLogic.checkMissileSiloLimit(defenseType, planet.defense, planet.buildings, quantity, planet.buildQueue)) {
|
if (!missileLogic.checkMissileSiloLimit(defenseType, planet.defense, planet.buildings, quantity, planet.buildQueue)) {
|
||||||
return { valid: false, reason: 'errors.missileSiloLimit' }
|
return { valid: false, reason: 'errors.missileSiloLimit' }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -190,6 +190,7 @@
|
|||||||
import * as publicLogic from '@/logic/publicLogic'
|
import * as publicLogic from '@/logic/publicLogic'
|
||||||
import * as shipValidation from '@/logic/shipValidation'
|
import * as shipValidation from '@/logic/shipValidation'
|
||||||
import * as shipLogic from '@/logic/shipLogic'
|
import * as shipLogic from '@/logic/shipLogic'
|
||||||
|
import * as missileLogic from '@/logic/missileLogic'
|
||||||
import * as gameLogic from '@/logic/gameLogic'
|
import * as gameLogic from '@/logic/gameLogic'
|
||||||
import * as waitingQueueLogic from '@/logic/waitingQueueLogic'
|
import * as waitingQueueLogic from '@/logic/waitingQueueLogic'
|
||||||
import * as officerLogic from '@/logic/officerLogic'
|
import * as officerLogic from '@/logic/officerLogic'
|
||||||
@@ -204,12 +205,12 @@
|
|||||||
// 导弹容量相关计算
|
// 导弹容量相关计算
|
||||||
const missileSiloCapacity = computed(() => {
|
const missileSiloCapacity = computed(() => {
|
||||||
if (!planet.value) return 0
|
if (!planet.value) return 0
|
||||||
return shipLogic.calculateMissileSiloCapacity(planet.value.buildings)
|
return missileLogic.calculateMissileSiloCapacity(planet.value.buildings)
|
||||||
})
|
})
|
||||||
|
|
||||||
const currentMissileCount = computed(() => {
|
const currentMissileCount = computed(() => {
|
||||||
if (!planet.value) return 0
|
if (!planet.value) return 0
|
||||||
return shipLogic.calculateCurrentMissileCount(planet.value.defense)
|
return missileLogic.calculateCurrentMissileCount(planet.value.defense)
|
||||||
})
|
})
|
||||||
|
|
||||||
// AlertDialog 状态
|
// AlertDialog 状态
|
||||||
|
|||||||
@@ -318,7 +318,7 @@
|
|||||||
import * as npcBehaviorLogic from '@/logic/npcBehaviorLogic'
|
import * as npcBehaviorLogic from '@/logic/npcBehaviorLogic'
|
||||||
import * as publicLogic from '@/logic/publicLogic'
|
import * as publicLogic from '@/logic/publicLogic'
|
||||||
import { calculateMaxFleetStorage } from '@/logic/fleetStorageLogic'
|
import { calculateMaxFleetStorage } from '@/logic/fleetStorageLogic'
|
||||||
import { calculateMissileSiloCapacity } from '@/logic/shipLogic'
|
import { calculateMissileSiloCapacity } from '@/logic/missileLogic'
|
||||||
import { Home, Trash2 } from 'lucide-vue-next'
|
import { Home, Trash2 } from 'lucide-vue-next'
|
||||||
|
|
||||||
// --- 预设系统 ---
|
// --- 预设系统 ---
|
||||||
|
|||||||
Reference in New Issue
Block a user