import type { Planet, Resources, BuildQueueItem, Fleet, Officer } from '@/types/game' import { ShipType, DefenseType, TechnologyType, OfficerType } from '@/types/game' import * as shipLogic from './shipLogic' import * as resourceLogic from './resourceLogic' import * as officerLogic from './officerLogic' import * as publicLogic from './publicLogic' /** * 验证舰船建造的所有条件 */ export const validateShipBuild = ( planet: Planet, shipType: ShipType, quantity: number, technologies: Partial> ): { valid: boolean reason?: string } => { const totalCost = shipLogic.calculateShipCost(shipType, quantity) // 检查前置条件 if (!shipLogic.checkShipRequirements(shipType, planet.buildings, technologies)) { return { valid: false, reason: 'errors.requirementsNotMet' } } // 检查资源 if (!resourceLogic.checkResourcesAvailable(planet.resources, totalCost)) { return { valid: false, reason: 'errors.insufficientResources' } } return { valid: true } } /** * 执行舰船建造 */ export const executeShipBuild = ( planet: Planet, shipType: ShipType, quantity: number, officers: Record ): BuildQueueItem => { const totalCost = shipLogic.calculateShipCost(shipType, quantity) // 计算军官加成 const bonuses = officerLogic.calculateActiveBonuses(officers, Date.now()) const buildTime = shipLogic.calculateShipBuildTime(shipType, quantity, bonuses.buildingSpeedBonus) // 扣除资源 resourceLogic.deductResources(planet.resources, totalCost) // 创建队列项 return shipLogic.createShipQueueItem(shipType, quantity, buildTime) } /** * 验证防御建造的所有条件 */ export const validateDefenseBuild = ( planet: Planet, defenseType: DefenseType, quantity: number, technologies: Partial> ): { valid: boolean reason?: string } => { const totalCost = shipLogic.calculateDefenseCost(defenseType, quantity) // 检查前置条件 if (!shipLogic.checkDefenseRequirements(defenseType, planet.buildings, technologies)) { return { valid: false, reason: 'errors.requirementsNotMet' } } // 检查资源 if (!resourceLogic.checkResourcesAvailable(planet.resources, totalCost)) { return { valid: false, reason: 'errors.insufficientResources' } } // 护盾罩限制 if (!shipLogic.checkShieldDomeLimit(defenseType, planet.defense, quantity)) { return { valid: false, reason: 'errors.shieldDomeLimit' } } return { valid: true } } /** * 执行防御建造 */ export const executeDefenseBuild = ( planet: Planet, defenseType: DefenseType, quantity: number, officers: Record ): BuildQueueItem => { const totalCost = shipLogic.calculateDefenseCost(defenseType, quantity) // 计算军官加成 const bonuses = officerLogic.calculateActiveBonuses(officers, Date.now()) const buildTime = shipLogic.calculateDefenseBuildTime(defenseType, quantity, bonuses.buildingSpeedBonus) // 扣除资源 resourceLogic.deductResources(planet.resources, totalCost) // 创建队列项 return shipLogic.createDefenseQueueItem(defenseType, quantity, buildTime) } /** * 验证舰队派遣的所有条件 */ export const validateFleetDispatch = ( planet: Planet, fleet: Partial, cargo: Resources, officers: Record, currentFleetMissions: number = 0 ): { valid: boolean reason?: string fuelNeeded?: number } => { // 计算军官加成 const bonuses = officerLogic.calculateActiveBonuses(officers, Date.now()) // 检查舰队任务槽位是否已满 const maxFleetMissions = publicLogic.getMaxFleetMissions(bonuses.additionalFleetSlots) if (currentFleetMissions >= maxFleetMissions) { return { valid: false, reason: 'errors.fleetMissionsFull' } } // 检查舰队是否足够 if (!shipLogic.checkFleetAvailable(planet.fleet, fleet)) { return { valid: false, reason: 'errors.insufficientFleet' } } // 检查是否有足够的重氢作为燃料(包含货物重量影响) const fuelNeeded = shipLogic.calculateFleetFuelConsumption(fleet, bonuses.fuelConsumptionReduction, cargo) if (planet.resources.deuterium < fuelNeeded) { return { valid: false, reason: 'errors.insufficientFuel', fuelNeeded } } return { valid: true, fuelNeeded } } /** * 执行舰队派遣(扣除舰队和燃料) */ export const executeFleetDispatch = ( planet: Planet, fleet: Partial, fuelNeeded: number, shouldDeductCargo: boolean, cargo: Resources ): void => { // 扣除舰队 shipLogic.deductFleet(planet.fleet, fleet) // 扣除燃料 planet.resources.deuterium -= fuelNeeded // 扣除运输的资源 if (shouldDeductCargo) { resourceLogic.deductResources(planet.resources, cargo) } }