feat: More bonus (exponential) and method to list icons needed
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
// Endless upgrades: once a family of upgrades is complete (its `requires`
|
||||
// milestone is owned), it continues forever as a repeatable line. Every level
|
||||
// multiplies the effect once more and costs exponentially more, up to
|
||||
// `maxLevel` levels, which nobody will ever reach.
|
||||
|
||||
import { bulkCost, maxAffordable } from './formulas.js';
|
||||
|
||||
export const lineLevel = (state, id) => state.endless[id] ?? 0;
|
||||
|
||||
export function lineAvailable(state, line) {
|
||||
return !line.requires || state.upgrades.includes(line.requires);
|
||||
}
|
||||
|
||||
/** How many levels `amount` ("max" or a number) buys right now, and what they cost. */
|
||||
export function endlessQuote(state, ctx, id, amount) {
|
||||
const line = ctx.endlessById.get(id);
|
||||
const level = lineLevel(state, id);
|
||||
const wanted =
|
||||
amount === 'max' ? maxAffordable(line.baseCost, line.costGrowth, level, state.funds) : amount;
|
||||
const count = Math.max(0, Math.min(wanted, line.maxLevel - level));
|
||||
return { count, cost: bulkCost(line.baseCost, line.costGrowth, level, count) };
|
||||
}
|
||||
|
||||
export function buyEndless(state, ctx, id, amount = 1) {
|
||||
const line = ctx.endlessById.get(id);
|
||||
if (!line || !lineAvailable(state, line)) return false;
|
||||
const { count, cost } = endlessQuote(state, ctx, id, amount);
|
||||
if (count <= 0 || !(state.funds >= cost)) return false; // an infinite cost is never affordable
|
||||
state.funds -= cost;
|
||||
state.endless[id] = lineLevel(state, id) + count;
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user