configurable values to make the game go faster while testing

This commit is contained in:
Rudis Muiznieks 2021-08-21 21:35:42 -05:00
parent e6b75fdccd
commit f16fb1fcbf
8 changed files with 35 additions and 12 deletions

View File

@ -22,6 +22,12 @@ function gameLoop (state: GameState, renderer: IRenderer): void {
// run with default config at startup // run with default config at startup
((): void => { ((): void => {
const config: GameConfig = new GameConfig(); const config: GameConfig = new GameConfig();
// debug values to make the game play faster while testing
config.baseTitheAmount = 1000;
config.baseCryptoReturnAmount = 100;
config.baseCredibilityRestoreRate = 5;
const renderer: IRenderer = new DebugRenderer(); const renderer: IRenderer = new DebugRenderer();
const state: GameState = config.generateState(); const state: GameState = config.generateState();

View File

@ -21,6 +21,10 @@ class GameConfig {
public relOtherShare: number = 0.02; public relOtherShare: number = 0.02;
public relNoneShare: number = 0.16; public relNoneShare: number = 0.16;
public baseTitheAmount: number = 10;
public baseCryptoReturnAmount: number = 1;
public baseCredibilityRestoreRate: number = 0.25;
public generateState (): GameState { public generateState (): GameState {
const state: GameState = new GameState(); const state: GameState = new GameState();
@ -60,16 +64,18 @@ class GameConfig {
'Non-Religious', 'Atheists and agnostics.', 'Non-Religious', 'Atheists and agnostics.',
this.relNoneShare * this.worldPopulation)); this.relNoneShare * this.worldPopulation));
// add hidden resources
state.addResource('creds', new Credibility());
// add resources // add resources
state.addResource('money', new Money(3.50)); state.addResource('money', new Money(3.50,
this.baseTitheAmount, this.baseCryptoReturnAmount));
state.addResource('crpto', new CryptoCurrency()); state.addResource('crpto', new CryptoCurrency());
state.addResource('tents', new Tent()); state.addResource('tents', new Tent());
state.addResource('house', new House()); state.addResource('house', new House());
state.addResource('cmpnd', new Compound()); state.addResource('cmpnd', new Compound());
// add passive resources
state.addResource('creds', new Credibility(
this.baseCredibilityRestoreRate));
return state; return state;
} }
} }

View File

@ -3,7 +3,7 @@
class Compound extends Infrastructure { class Compound extends Infrastructure {
constructor () { constructor () {
super('Compounds', super('Compounds',
'Provides space for tents and houses.'); 'Provides space for tents and houses and a place to hide more money.');
this.cost.money = 15000; this.cost.money = 15000;
this._costMultiplier.money = 1.5; this._costMultiplier.money = 1.5;
} }

View File

@ -3,7 +3,8 @@
class Credibility extends Passive { class Credibility extends Passive {
private _lastValue: number = 100; private _lastValue: number = 100;
constructor () { constructor (
private _baseRestoreRate: number) {
super( super(
'Credibility', 'Credibility',
'Affects your ability to recruit and retain followers.', 'Affects your ability to recruit and retain followers.',
@ -15,6 +16,6 @@ class Credibility extends Passive {
} }
public inc (state: GameState): number { public inc (state: GameState): number {
return 0.25; return this._baseRestoreRate;
} }
} }

View File

@ -5,6 +5,7 @@ class House extends Infrastructure {
super('Houses', super('Houses',
'Provides room to house 10 followers.'); 'Provides room to house 10 followers.');
this.cost.money = 150000; this.cost.money = 150000;
this._baseMax = 0;
this._costMultiplier.money = 1.1; this._costMultiplier.money = 1.1;
} }

View File

@ -8,11 +8,13 @@ class Money extends Purchasable {
constructor ( constructor (
public value: number, public value: number,
private readonly _baseTitheAmount: number,
private readonly _baseCryptoReturnAmount: number
) { ) {
super('Money', 'Used to purchase goods and services.'); super('Money', 'Used to purchase goods and services.');
this.clickText = 'Collect Tithes'; this.clickText = 'Collect Tithes';
this.clickDescription = 'Voluntary contributions from followers.'; this.clickDescription = 'Voluntary contributions from followers.';
this._baseMax = 1000000; this._baseMax = 500000;
} }
public isUnlocked (state: GameState): boolean { public isUnlocked (state: GameState): boolean {
@ -21,7 +23,7 @@ class Money extends Purchasable {
public inc (state: GameState): number { public inc (state: GameState): number {
// crypto currency // crypto currency
return state.getResource('crpto').value * 0.5; return state.getResource('crpto').value * this._baseCryptoReturnAmount;
} }
protected _purchaseAmount (state: GameState): number { protected _purchaseAmount (state: GameState): number {
@ -36,7 +38,7 @@ class Money extends Purchasable {
state.getResource('creds').value -= lost; state.getResource('creds').value -= lost;
} }
// each follower gives you $10 // each follower gives you $10
const tithings: number = plorg.value * 10; const tithings: number = plorg.value * this._baseTitheAmount;
this._lastCollectionTime = state.now; this._lastCollectionTime = state.now;
return tithings; return tithings;
} }
@ -45,4 +47,10 @@ class Money extends Purchasable {
const followers: number = state.getResource('plorg').value; const followers: number = state.getResource('plorg').value;
return `You collected $${amount} from ${followers} followers.`; return `You collected $${amount} from ${followers} followers.`;
} }
public max (state: GameState): number | null {
let max: number = this._baseMax;
max += state.getResource('cmpnd').value * 500000;
return max;
}
} }

View File

@ -5,7 +5,7 @@ class Tent extends Infrastructure {
super('Tents', super('Tents',
'Provides room to house 2 followers.'); 'Provides room to house 2 followers.');
this.cost.money = 250; this.cost.money = 250;
this._costMultiplier.money = 1.1; this._costMultiplier.money = 1.05;
this._baseMax = 5; this._baseMax = 5;
} }

View File

@ -91,7 +91,8 @@ class DebugRenderer implements IRenderer {
el.getElementsByClassName('resource-btn'); el.getElementsByClassName('resource-btn');
if (elB.length > 0) { if (elB.length > 0) {
const enabled: boolean = state.isPurchasable(resource.cost) const enabled: boolean = state.isPurchasable(resource.cost)
&& resource.value < resource.max(state); && (resource.max(state) === null
|| resource.value < resource.max(state));
if (enabled) elB[0].removeAttribute('disabled'); if (enabled) elB[0].removeAttribute('disabled');
else elB[0].setAttribute('disabled', 'disabled'); else elB[0].setAttribute('disabled', 'disabled');
} }