/
kochkatech
/
CorpGame
Обзор
Документация
Войти
/
kochkatech
/
CorpGame
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
1
CI/CD
Аналитика
dev
frontend/src/gameCalc.ts
42 строки
2 KB
kochkareal
chore: добавлен .gitattributes, нормализованы переносы строк (LF везде, кроме .bat/.cmd)
06 авг 2026, 15:18
06 авг 2026, 15:18
c25ef1b
Код
Авторство
О чём код?
import { CityDef, GameConfig } from './types'; // Зеркало backend/src/economy/economy.calc.ts — используется только для отображения // до отправки запроса, сервер всегда пересчитывает и проверяет сам. // Те же 4 частых ресурса, что и на бэкенде (COMMON_RESOURCE_KEYS): уран и алмазы // никогда не требуются для открытия/апгрейда, чтобы прогрессия оставалась достижимой. const COMMON_RESOURCE_KEYS = ['wood', 'grain', 'iron', 'oil']; export function upgradeCost(config: GameConfig, city: CityDef, currentLevel: number): Record<string, number> { const baseTypes = Object.keys(city.openCost); const rarityOf = (key: string) => config.resources.find((r) => r.key === key)?.rarity ?? 0; const extraCandidates = [...COMMON_RESOURCE_KEYS] .sort((a, b) => rarityOf(a) - rarityOf(b)) .filter((key) => !baseTypes.includes(key)); const extraCount = config.costs.upgradeExtraTypesPerLevel * currentLevel; const extraTypes = extraCandidates.slice(0, extraCount); return Object.fromEntries([...baseTypes, ...extraTypes].map((key) => [key, 1])); } export function availableResources(city: CityDef, level: number): string[] { return city.resourcePool.slice(0, Math.min(city.resourcePool.length, level + 1)); } export function baseCooldownAtLevel(config: GameConfig, city: CityDef, level: number): number { const { cooldownFactor, minCooldownSec } = config.branchUpgrade; return Math.max(minCooldownSec, city.baseCooldownSec * Math.pow(cooldownFactor, level - 1)); } export function canAfford(resources: Record<string, number>, cost: Record<string, number>): boolean { return Object.entries(cost).every(([res, amount]) => (resources[res] ?? 0) >= amount); } // Количество всегда 1 — показываем только иконки нужных видов ресурсов через пробел. export function formatCost(cost: Record<string, number>, resourceIcons: Record<string, string>): string { return Object.keys(cost) .map((res) => resourceIcons[res] ?? res) .join(' '); }