feat: 新增多语言README并优化文档结构

新增德语、俄语、韩语、繁体中文多语言README,英文与简体中文README同步优化,统一下载链接与徽章样式,完善多语言入口。提升国际化支持与文档可读性。
This commit is contained in:
谦君
2025-12-24 01:45:17 +08:00
parent a475b1b554
commit 5e3557e2da
105 changed files with 12459 additions and 1690 deletions

135
src/logic/unlockLogic.ts Normal file
View File

@@ -0,0 +1,135 @@
/**
* 解锁检查逻辑
* 用于检测建筑/科技完成后新解锁的内容
*/
import { BuildingType, TechnologyType, type Planet } from '@/types/game'
import { BUILDINGS, TECHNOLOGIES } from '@/config/gameConfig'
import * as buildingLogic from './buildingLogic'
import * as researchLogic from './researchLogic'
export interface UnlockedItem {
type: 'building' | 'technology'
id: BuildingType | TechnologyType
name: string
}
/**
* 检查哪些建筑在完成建筑/科技后被新解锁
*/
export const checkNewlyUnlockedBuildings = (
planet: Planet,
technologies: Partial<Record<TechnologyType, number>>,
previousBuildings: Partial<Record<BuildingType, number>>,
previousTechnologies: Partial<Record<TechnologyType, number>>
): UnlockedItem[] => {
const newlyUnlocked: UnlockedItem[] = []
// 遍历所有建筑类型
for (const buildingType of Object.values(BuildingType)) {
const config = BUILDINGS[buildingType]
if (!config) continue
// 跳过已经建造过的建筑(等级 > 0
if ((planet.buildings[buildingType] || 0) > 0) continue
// 检查之前是否已解锁
const wasUnlockedBefore = checkBuildingRequirementsWith(buildingType, previousBuildings, previousTechnologies)
// 检查现在是否解锁
const isUnlockedNow = buildingLogic.checkBuildingRequirements(buildingType, planet, technologies)
// 如果之前未解锁,现在解锁了,则是新解锁
if (!wasUnlockedBefore && isUnlockedNow) {
newlyUnlocked.push({
type: 'building',
id: buildingType,
name: config.name
})
}
}
return newlyUnlocked
}
/**
* 检查哪些科技在完成建筑/科技后被新解锁
*/
export const checkNewlyUnlockedTechnologies = (
buildings: Partial<Record<BuildingType, number>>,
technologies: Partial<Record<TechnologyType, number>>,
previousBuildings: Partial<Record<BuildingType, number>>,
previousTechnologies: Partial<Record<TechnologyType, number>>
): UnlockedItem[] => {
const newlyUnlocked: UnlockedItem[] = []
// 遍历所有科技类型
for (const techType of Object.values(TechnologyType)) {
const config = TECHNOLOGIES[techType]
if (!config) continue
// 跳过已经研究过的科技(等级 > 0
if ((technologies[techType] || 0) > 0) continue
// 检查之前是否已解锁
const wasUnlockedBefore = researchLogic.checkTechnologyRequirements(techType, previousBuildings, previousTechnologies)
// 检查现在是否解锁
const isUnlockedNow = researchLogic.checkTechnologyRequirements(techType, buildings, technologies)
// 如果之前未解锁,现在解锁了,则是新解锁
if (!wasUnlockedBefore && isUnlockedNow) {
newlyUnlocked.push({
type: 'technology',
id: techType,
name: config.name
})
}
}
return newlyUnlocked
}
/**
* 使用指定的建筑和科技等级检查建筑需求
* (用于与之前状态比较)
*/
const checkBuildingRequirementsWith = (
buildingType: BuildingType,
buildings: Partial<Record<BuildingType, number>>,
technologies: Partial<Record<TechnologyType, number>>
): boolean => {
const config = BUILDINGS[buildingType]
const requirements = (config as any).requirements
if (!requirements) return true
for (const [key, level] of Object.entries(requirements)) {
const requiredLevel = level as number
if (Object.values(BuildingType).includes(key as BuildingType)) {
if ((buildings[key as BuildingType] || 0) < requiredLevel) {
return false
}
} else if (Object.values(TechnologyType).includes(key as TechnologyType)) {
if ((technologies[key as TechnologyType] || 0) < requiredLevel) {
return false
}
}
}
return true
}
/**
* 检查所有新解锁的内容(建筑 + 科技)
*/
export const checkAllNewlyUnlocked = (
planet: Planet,
technologies: Partial<Record<TechnologyType, number>>,
previousBuildings: Partial<Record<BuildingType, number>>,
previousTechnologies: Partial<Record<TechnologyType, number>>
): UnlockedItem[] => {
const unlockedBuildings = checkNewlyUnlockedBuildings(planet, technologies, previousBuildings, previousTechnologies)
const unlockedTechnologies = checkNewlyUnlockedTechnologies(planet.buildings, technologies, previousBuildings, previousTechnologies)
return [...unlockedBuildings, ...unlockedTechnologies]
}