initial commit

This commit is contained in:
azykov@mail.ru
2026-09-04 16:03:17 +03:00
commit a05d5f4547
31 changed files with 2842 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
export type UpgradeId = 'moveSpeed' | 'chopSpeed' | 'logValue' | 'pickupRadius' | 'coinSpeed';
export interface UpgradeDef {
id: UpgradeId;
name: string;
baseCost: number;
costGrowth: number;
/** The upgrade's stat value at a given level (levels start at 1, unbounded above). */
effectAtLevel: (level: number) => number;
formatEffect: (value: number) => string;
}
export const UPGRADE_LIST: UpgradeDef[] = [
{
id: 'moveSpeed',
name: 'Скорость движения',
baseCost: 5,
costGrowth: 1.35,
effectAtLevel: (level) => 160 + (level - 1) * 20,
formatEffect: (v) => `${Math.round(v)} px/с`,
},
{
id: 'chopSpeed',
name: 'Скорость рубки',
baseCost: 6,
costGrowth: 1.35,
effectAtLevel: (level) => (1 / 0.6) * Math.pow(1.15, level - 1),
formatEffect: (v) => `${v.toFixed(2)} бревен/с`,
},
{
id: 'logValue',
name: 'Стоимость бревна',
baseCost: 8,
costGrowth: 1.4,
effectAtLevel: (level) => level,
formatEffect: (v) => `${v} монет/бревно`,
},
{
id: 'pickupRadius',
name: 'Радиус подбора',
baseCost: 5,
costGrowth: 1.3,
effectAtLevel: (level) => 46 + (level - 1) * 6,
formatEffect: (v) => `${Math.round(v)} px`,
},
{
id: 'coinSpeed',
name: 'Скорость обмена на монеты',
baseCost: 7,
costGrowth: 1.35,
effectAtLevel: (level) => Math.pow(1.15, level - 1),
formatEffect: (v) => `${v.toFixed(2)} бревен/с`,
},
];
export const UPGRADES: Record<UpgradeId, UpgradeDef> = Object.fromEntries(
UPGRADE_LIST.map((def) => [def.id, def]),
) as Record<UpgradeId, UpgradeDef>;
/** Cost (in coins) to go from `currentLevel` to `currentLevel + 1`. */
export function costForNextLevel(def: UpgradeDef, currentLevel: number): number {
return Math.ceil(def.baseCost * Math.pow(def.costGrowth, currentLevel - 1));
}