parametric game fules. minor simulator refactoring
This commit is contained in:
@@ -2,6 +2,7 @@ import { type ResourceGenerator } from "@idle-economy/engine";
|
||||
import { observer } from "mobx-react-lite";
|
||||
import { ResourcesView } from "./ResourcesView";
|
||||
import { root } from "./state/Root";
|
||||
import { formatNumber } from "./tools/format";
|
||||
|
||||
type Props = {
|
||||
generator: ResourceGenerator,
|
||||
@@ -12,8 +13,10 @@ export const ResourceGeneratorView = observer(function (props: Props) {
|
||||
let gen = props.generator;
|
||||
let showName = gen.rule.name === 'prestige';
|
||||
|
||||
const upgradeLevelsAvailable = gen.upgradeLevelsAvailable(root.upgradeStep);
|
||||
const upgradeToLevel = gen.level + upgradeLevelsAvailable;
|
||||
const realUpgradeLevelsAvailable = gen.upgradeLevelsAvailable(root.upgradeStep);
|
||||
const isUpgradable = realUpgradeLevelsAvailable === 0;
|
||||
const upgradeLevelsAvailable = Math.max(1, realUpgradeLevelsAvailable);
|
||||
const upgradeToLevel = gen.level + (realUpgradeLevelsAvailable > 0 ? upgradeLevelsAvailable : (root.upgradeStep === 'max' ? 1 : root.upgradeStep));
|
||||
|
||||
function handleGeneratorClick(): void {
|
||||
if (props.generator.rule.manualGeneration)
|
||||
@@ -36,7 +39,7 @@ export const ResourceGeneratorView = observer(function (props: Props) {
|
||||
>
|
||||
<div className={`name ${showName ? '' : 'hidden'}`}>{gen.rule.name}</div>
|
||||
<div>LEVEL {gen.level}</div>
|
||||
<div>+<ResourcesView resources={gen.getGain().toObject()} /> / {gen.getPeriod()} sec</div>
|
||||
<div>+<ResourcesView resources={gen.getGain().toObject()} /> / {formatNumber(gen.getPeriod())} sec</div>
|
||||
{/* <div><ProgressView period={gen.getPeriod()} progress={gen.progress} /></div> */}
|
||||
{/* <div>{gen.isVisible ? 'visible' : 'not visible'}</div>
|
||||
<div>{gen.isUpgradable ? 'upgradable' : 'not upgradable'}</div>
|
||||
@@ -45,12 +48,16 @@ export const ResourceGeneratorView = observer(function (props: Props) {
|
||||
<button
|
||||
className="upgrade"
|
||||
onClick={handleGeneratorUpgradeClick}
|
||||
disabled={upgradeLevelsAvailable === 0}
|
||||
disabled={isUpgradable}
|
||||
>
|
||||
<div>UPGRADE {gen.level} ⇒ {upgradeToLevel}</div>
|
||||
<div>at: <ResourcesView resources={gen.getUpgradePrice(upgradeToLevel).toObject()} /></div>
|
||||
<div>at: <ResourcesView resources={gen.getUpgradePrice(upgradeToLevel - 1).toObject()} /></div>
|
||||
<div>cost: </div>
|
||||
<div>+<ResourcesView resources={gen.getGain(upgradeToLevel).toObject()} /> / {gen.getPeriod(upgradeToLevel)} sec</div>
|
||||
<div>+<ResourcesView resources={gen.getGain(upgradeToLevel).toObject()} /> / {formatNumber(gen.getPeriod(upgradeToLevel))} sec</div>
|
||||
{/* <div>realUpgradeLevelsAvailable: {realUpgradeLevelsAvailable}</div>
|
||||
<div>isUpgradable: {isUpgradable ? 'true' : 'false'}</div>
|
||||
<div>upgradeLevelsAvailable: {upgradeLevelsAvailable}</div>
|
||||
<div>upgradeToLevel: {upgradeToLevel}</div> */}
|
||||
</button>
|
||||
</div>
|
||||
</>)
|
||||
|
||||
+12
-1
@@ -2,10 +2,21 @@ import { makeGame, ResourceGenerator, ResourceSet } from "@idle-economy/engine";
|
||||
import { makeAutoObservable } from "mobx";
|
||||
import { Notation, Presets } from 'eternal_notations';
|
||||
import { now } from "../tools/time";
|
||||
import { defaultGameRulesOptions, type GameRulesOptions } from "@idle-economy/engine/src/rulesets/rules";
|
||||
|
||||
const gameRulesOptions: GameRulesOptions = defaultGameRulesOptions;
|
||||
|
||||
// const gameRulesOptions: GameRulesOptions = {
|
||||
// startingResources: 0,
|
||||
// generationBasePrice: 1,
|
||||
// generationPower: 1.2,
|
||||
// upgradeBasePrice: 2000,
|
||||
// upgradeFactor: 1.01,
|
||||
// }
|
||||
|
||||
export class Root {
|
||||
|
||||
private readonly game = makeGame();
|
||||
private readonly game = makeGame(gameRulesOptions);
|
||||
|
||||
public resources: ResourceSet = new ResourceSet();
|
||||
public generators: ResourceGenerator[] = [];
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import type Decimal from 'break_eternity.js';
|
||||
import { root } from '../state/Root';
|
||||
import Decimal, { type DecimalSource } from 'break_eternity.js';
|
||||
import { Presets } from 'eternal_notations';
|
||||
|
||||
export function formatNumber(value: Decimal | undefined): string {
|
||||
return root.numberNotation.format(value ?? 0);
|
||||
export function formatNumber(value: DecimalSource | undefined): string {
|
||||
const v = new Decimal(value ?? 0);
|
||||
if (v.lt(1))
|
||||
return Presets.Default.format(v)
|
||||
else
|
||||
return root.numberNotation.format(v);
|
||||
}
|
||||
Reference in New Issue
Block a user