break_eternity
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import Decimal, { DecimalSource } from "break_eternity.js";
|
||||
import { Resource, Resources, SerializedConverter, SerializedNodeBehaviour as SerializedBehaviour, SerializedNodeBehaviour } from "../../types";
|
||||
|
||||
export type BehaviourResourcePin = {
|
||||
@@ -67,15 +68,15 @@ export abstract class Behaviour {
|
||||
abstract getDisplayInfo(): BehaviourDisplayInfo;
|
||||
|
||||
/** Withdraws up to `amount` of `resource` from this behaviour's storage, returning how much was actually taken. */
|
||||
public take(resource: Resource, amount: number): number {
|
||||
const available = this.storage[resource] ?? 0;
|
||||
const taken = Math.min(available, amount);
|
||||
this.storage[resource] = available - taken;
|
||||
public take(resource: Resource, amount: DecimalSource): Decimal {
|
||||
const available = this.storage[resource] ?? Decimal.dZero;
|
||||
const taken = available.min(amount);
|
||||
this.storage[resource] = available.sub(taken);
|
||||
return taken;
|
||||
}
|
||||
|
||||
protected give(resource: Resource, amount: number): void {
|
||||
this.storage[resource] = (this.storage[resource] ?? 0) + amount;
|
||||
protected give(resource: Resource, amount: DecimalSource): void {
|
||||
this.storage[resource] = (this.storage[resource] ?? Decimal.dZero).add(amount);
|
||||
}
|
||||
|
||||
abstract produce(deltaTime: number): void;
|
||||
@@ -94,17 +95,17 @@ export class Converter extends Behaviour {
|
||||
|
||||
this.inputRates = {};
|
||||
for (const pin of source.inputs.pins)
|
||||
this.inputRates[pin.resource] = pin.rate;
|
||||
this.inputRates[pin.resource] = new Decimal(pin.rate);
|
||||
|
||||
this.outputRates = {};
|
||||
for (const pin of source.outputs.pins)
|
||||
this.outputRates[pin.resource] = pin.rate;
|
||||
this.outputRates[pin.resource] = new Decimal(pin.rate);
|
||||
}
|
||||
|
||||
/** Fills this converter's own storage from its outputs' production rates. */
|
||||
public produce(deltaTime: number): void {
|
||||
for (const output of this.outputs.pins)
|
||||
this.give(output.resource, (this.outputRates[output.resource] ?? 0) * deltaTime);
|
||||
this.give(output.resource, (this.outputRates[output.resource] ?? Decimal.dZero).mul(deltaTime));
|
||||
}
|
||||
|
||||
/** Pulls resources into this converter's storage from whatever each input pin is linked to. */
|
||||
@@ -113,8 +114,8 @@ export class Converter extends Behaviour {
|
||||
const source = resolve(input.link.target);
|
||||
if (!source)
|
||||
continue;
|
||||
const rate = this.inputRates[input.resource] ?? 0;
|
||||
const taken = source.take(input.link.resource, rate * deltaTime);
|
||||
const rate = this.inputRates[input.resource] ?? Decimal.dZero;
|
||||
const taken = source.take(input.link.resource, rate.mul(deltaTime));
|
||||
this.give(input.resource, taken);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user