From b1cf0acaaefff2bb065f361fdb04672db0bc1674 Mon Sep 17 00:00:00 2001 From: wenyu Date: Wed, 18 Mar 2026 19:41:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(logic):=20=E5=B0=86=E5=AF=BC=E5=BC=B9?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E9=80=BB=E8=BE=91=E4=BB=8E=20shipLogic=20?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=88=B0=20missileLogic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 重构代码结构,将与导弹容量计算和验证相关的函数从 shipLogic 模块提取到新创建的 missileLogic 模块,以提高代码的模块化和可维护性。同时更新所有相关导入路径以引用新的模块。 --- src/logic/missileLogic.ts | 62 +++++++++++++++++++++++++++++++++++-- src/logic/shipLogic.ts | 58 ---------------------------------- src/logic/shipValidation.ts | 3 +- src/views/DefenseView.vue | 5 +-- src/views/GMView.vue | 2 +- 5 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/logic/missileLogic.ts b/src/logic/missileLogic.ts index aa13252..714e0ba 100644 --- a/src/logic/missileLogic.ts +++ b/src/logic/missileLogic.ts @@ -3,8 +3,66 @@ * 处理星际导弹攻击、射程计算、拦截等 */ -import type { Planet, MissileAttack, DefenseType, TechnologyType, Position } from '@/types/game' -import { DefenseType as DefenseTypes } from '@/types/game' +import type { Planet, MissileAttack, DefenseType, TechnologyType, Position, BuildQueueItem } from '@/types/game' +import { DefenseType as DefenseTypes, BuildingType } from '@/types/game' + +/** + * 计算导弹发射井容量 + */ +export const calculateMissileSiloCapacity = (buildings: Partial>): number => { + const siloLevel = buildings[BuildingType.MissileSilo] || 0 + return siloLevel * 10 // 每级存储10枚导弹 +} + +/** + * 计算当前导弹总数 + */ +export const calculateCurrentMissileCount = (defense: Partial>): 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>, + buildings: Partial>, + 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 +} /** * 计算导弹射程(基于脉冲引擎等级) diff --git a/src/logic/shipLogic.ts b/src/logic/shipLogic.ts index 35e36a0..4659d65 100644 --- a/src/logic/shipLogic.ts +++ b/src/logic/shipLogic.ts @@ -156,64 +156,6 @@ export const checkShieldDomeLimit = ( return true } -/** - * 计算导弹发射井容量 - */ -export const calculateMissileSiloCapacity = (buildings: Partial>): number => { - const siloLevel = buildings[BuildingType.MissileSilo] || 0 - return siloLevel * 10 // 每级存储10枚导弹 -} - -/** - * 计算当前导弹总数 - */ -export const calculateCurrentMissileCount = (defense: Partial>): 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>, - buildings: Partial>, - 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 -} - /** * 创建舰船建造队列项 */ diff --git a/src/logic/shipValidation.ts b/src/logic/shipValidation.ts index 0a1ba54..58d854e 100644 --- a/src/logic/shipValidation.ts +++ b/src/logic/shipValidation.ts @@ -1,6 +1,7 @@ import type { Planet, Resources, BuildQueueItem, Fleet, Officer } from '@/types/game' import { ShipType, DefenseType, TechnologyType, OfficerType, BuildingType } from '@/types/game' import * as shipLogic from './shipLogic' +import * as missileLogic from './missileLogic' import * as resourceLogic from './resourceLogic' import * as officerLogic from './officerLogic' 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' } } diff --git a/src/views/DefenseView.vue b/src/views/DefenseView.vue index 9555adf..cb006b5 100644 --- a/src/views/DefenseView.vue +++ b/src/views/DefenseView.vue @@ -190,6 +190,7 @@ import * as publicLogic from '@/logic/publicLogic' import * as shipValidation from '@/logic/shipValidation' import * as shipLogic from '@/logic/shipLogic' + import * as missileLogic from '@/logic/missileLogic' import * as gameLogic from '@/logic/gameLogic' import * as waitingQueueLogic from '@/logic/waitingQueueLogic' import * as officerLogic from '@/logic/officerLogic' @@ -204,12 +205,12 @@ // 导弹容量相关计算 const missileSiloCapacity = computed(() => { if (!planet.value) return 0 - return shipLogic.calculateMissileSiloCapacity(planet.value.buildings) + return missileLogic.calculateMissileSiloCapacity(planet.value.buildings) }) const currentMissileCount = computed(() => { if (!planet.value) return 0 - return shipLogic.calculateCurrentMissileCount(planet.value.defense) + return missileLogic.calculateCurrentMissileCount(planet.value.defense) }) // AlertDialog 状态 diff --git a/src/views/GMView.vue b/src/views/GMView.vue index f6867a9..fa5fd74 100644 --- a/src/views/GMView.vue +++ b/src/views/GMView.vue @@ -318,7 +318,7 @@ import * as npcBehaviorLogic from '@/logic/npcBehaviorLogic' import * as publicLogic from '@/logic/publicLogic' import { calculateMaxFleetStorage } from '@/logic/fleetStorageLogic' - import { calculateMissileSiloCapacity } from '@/logic/shipLogic' + import { calculateMissileSiloCapacity } from '@/logic/missileLogic' import { Home, Trash2 } from 'lucide-vue-next' // --- 预设系统 ---