feat: 新增NPC与外交逻辑,优化UI组件结构

重构并精简了部分UI组件,移除冗余弹窗与详情组件,新增NPC相关逻辑(npcBehaviorLogic、npcGrowthLogic、npcStore等)及外交逻辑(diplomaticLogic、DiplomacyView)。完善分页、标签、复选框等通用UI组件。优化战报弹窗,调整README下载链接为相对路径,修复部分国际化内容。
This commit is contained in:
谦君
2025-12-15 08:23:45 +08:00
parent 44580909a3
commit 9b9fda0400
164 changed files with 18628 additions and 2775 deletions

View File

@@ -1,6 +1,5 @@
import type { Fleet, Resources, BattleResult, Officer } from '@/types/game'
import type { Fleet, Resources, BattleResult, Officer, TechnologyType } from '@/types/game'
import { DefenseType, OfficerType } from '@/types/game'
import * as officerLogic from './officerLogic'
import { workerManager } from '@/workers/workerManager'
/**
@@ -12,31 +11,34 @@ export const simulateBattle = async (
defenderFleet: Partial<Fleet>,
defenderDefense: Partial<Record<DefenseType, number>>,
defenderResources: Resources,
attackerOfficers: Record<OfficerType, Officer>,
defenderOfficers: Record<OfficerType, Officer>
_attackerOfficers: Record<OfficerType, Officer>,
_defenderOfficers: Record<OfficerType, Officer>,
attackerTechnologies: Record<TechnologyType, number>,
defenderTechnologies: Record<TechnologyType, number>
): Promise<BattleResult> => {
// 计算军官加成
const attackerBonuses = officerLogic.calculateActiveBonuses(attackerOfficers, Date.now())
const defenderBonuses = officerLogic.calculateActiveBonuses(defenderOfficers, Date.now())
// 从科技系统读取实际科技等级
const attackerWeaponTech = attackerTechnologies['weaponsTechnology'] || 0
const attackerShieldTech = attackerTechnologies['shieldingTechnology'] || 0
const attackerArmorTech = attackerTechnologies['armourTechnology'] || 0
// 将防御加成转换为科技等级简化10%加成 = 1级科技
const attackerTechLevel = Math.floor(attackerBonuses.defenseBonus / 10)
const defenderTechLevel = Math.floor(defenderBonuses.defenseBonus / 10)
const defenderWeaponTech = defenderTechnologies['weaponsTechnology'] || 0
const defenderShieldTech = defenderTechnologies['shieldingTechnology'] || 0
const defenderArmorTech = defenderTechnologies['armourTechnology'] || 0
// 使用 Worker 执行战斗模拟
const simulationResult = await workerManager.simulateBattle({
attacker: {
ships: attackerFleet,
weaponTech: 0, // 暂时不考虑武器科技
shieldTech: attackerTechLevel,
armorTech: attackerTechLevel
weaponTech: attackerWeaponTech,
shieldTech: attackerShieldTech,
armorTech: attackerArmorTech
},
defender: {
ships: defenderFleet,
defense: defenderDefense,
weaponTech: 0,
shieldTech: defenderTechLevel,
armorTech: defenderTechLevel
weaponTech: defenderWeaponTech,
shieldTech: defenderShieldTech,
armorTech: defenderArmorTech
},
maxRounds: 6 // 最多6回合
})