debug renderer improvements

This commit is contained in:
Rudis Muiznieks 2021-08-22 13:48:48 -05:00
parent 3ada821430
commit 314806f647
9 changed files with 61 additions and 21 deletions

View File

@ -4,6 +4,10 @@ body, html {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.footer {
border: 2px solid black;
padding: 0.25em 0.5em;
}
#irreligious-game { #irreligious-game {
display: flex; display: flex;
align-items: stretch; align-items: stretch;
@ -40,7 +44,7 @@ body, html {
margin: 0 0.5em 0.5em 0; margin: 0 0.5em 0.5em 0;
} }
.resource.locked { .resource.locked {
display: none; opacity: 0.25;
} }
#resource-container-religion .resource { #resource-container-religion .resource {
background-color: #ccf; background-color: #ccf;

View File

@ -77,8 +77,8 @@ class GameConfig {
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('chrch', new Church()); state.addResource('chrch', new Church());
state.addResource('cmpnd', new Compound());
// add passive resources // add passive resources
state.addResource('creds', new Credibility()); state.addResource('creds', new Credibility());

View File

@ -1,6 +1,6 @@
class GameState { class GameState {
private _versionMaj: number = 0; private readonly _versionMaj: number = 0;
private _versionMin: number = 1; private readonly _versionMin: number = 1;
public config: GameConfig; public config: GameConfig;
@ -71,6 +71,8 @@ class GameState {
} }
public performClick (resourceKey: string): void { public performClick (resourceKey: string): void {
if (!this._resources[resourceKey].isUnlocked(this)) return;
if (this._resources[resourceKey].clickAction !== null) { if (this._resources[resourceKey].clickAction !== null) {
this._resources[resourceKey].clickAction(this); this._resources[resourceKey].clickAction(this);
for (const callback of this.onResourceClick) { for (const callback of this.onResourceClick) {
@ -172,4 +174,11 @@ class GameState {
console.log('No save game was found.'); console.log('No save game was found.');
} }
} }
public reset (): void {
const newState: GameState = this.config.generateState();
localStorage.clear();
this._resources = newState._resources;
this.log('Reset all game resources.');
}
} }

View File

@ -4,8 +4,21 @@ class Church extends Infrastructure {
constructor () { constructor () {
super('Churches', super('Churches',
'Preaching grounds for 2 pastors.'); 'Preaching grounds for 2 pastors.');
this.cost.money = 10000; this.cost.money = 150000;
this._costMultiplier.money = 1.01; this._costMultiplier.money = 1.01;
this._baseMax = 2; }
public max (state: GameState): number {
// one church per compound
return state.getResource('cmpnd').value;
}
public isUnlocked (state: GameState): boolean {
if (this._isUnlocked) return true;
const compounds: IResource = state.getResource('cmpnd');
if (compounds.value > 0) {
this._isUnlocked = true;
}
return this._isUnlocked;
} }
} }

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 and a place to hide more money.'); 'Provides space for tents, houses, and churches 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

@ -4,15 +4,12 @@ class House extends Infrastructure {
constructor () { constructor () {
super('Houses', super('Houses',
'Provides room to house 10 followers.'); 'Provides room to house 10 followers.');
this.cost.money = 150000; this.cost.money = 75000;
this._baseMax = 0; this._costMultiplier.money = 1.01;
this._costMultiplier.money = 1.1;
} }
public max (state: GameState): number { public max (state: GameState): number {
let max: number = this._baseMax; return state.getResource('cmpnd').value * 2;
max += state.getResource('cmpnd').value * 2;
return max;
} }
public isUnlocked (state: GameState): boolean { public isUnlocked (state: GameState): boolean {

View File

@ -52,6 +52,7 @@ class PlayerOrg implements IResource {
return; return;
} }
this._lastRecruitmentLog = 0; // always log on click
this.addValue(1, state); this.addValue(1, state);
} }

View File

@ -10,6 +10,7 @@ class Tent extends Infrastructure {
} }
public max (state: GameState): number { public max (state: GameState): number {
// ten extra tents per compound
let max: number = this._baseMax; let max: number = this._baseMax;
max += state.getResource('cmpnd').value * 10; max += state.getResource('cmpnd').value * 10;
return max; return max;

View File

@ -75,14 +75,26 @@ class DebugRenderer implements IRenderer {
state.performClick(rkey)); state.performClick(rkey));
} }
} }
// create tools footer
const footer: HTMLElement = document.createElement('div');
footer.className = 'footer';
footer.innerHTML = `
<button id='dbg-btn-reset'>Reset Game</button>
`;
resDiv.appendChild(footer);
document.getElementById('dbg-btn-reset')
.addEventListener('click', (): void => {
state.reset();
this._handleClick = true;
});
} }
for (const rkey of rkeys) { for (const rkey of rkeys) {
const resource: IResource = state.getResource(rkey); const resource: IResource = state.getResource(rkey);
const container: HTMLElement = document const container: HTMLElement = document
.getElementById(`resource-container-${resource.resourceType}`); .getElementById(`resource-container-${resource.resourceType}`);
if (resource.isUnlocked(state)) {
const el: HTMLElement = document const el: HTMLElement = document
.getElementById(`resource-details-${rkey}`); .getElementById(`resource-details-${rkey}`);
if (resource.isUnlocked(state)) {
if (el.className !== 'resource') el.className = 'resource'; if (el.className !== 'resource') el.className = 'resource';
const elV: Element = const elV: Element =
el.getElementsByClassName('resource-value')[0]; el.getElementsByClassName('resource-value')[0];
@ -105,19 +117,22 @@ class DebugRenderer implements IRenderer {
if (enabled) elB[0].removeAttribute('disabled'); if (enabled) elB[0].removeAttribute('disabled');
else elB[0].setAttribute('disabled', 'disabled'); else elB[0].setAttribute('disabled', 'disabled');
} }
if (this._handleClick) {
if (resource.inc !== null && resource.inc(state) > 0) { if (resource.inc !== null && resource.inc(state) > 0) {
const elI: Element = const elI: Element =
el.getElementsByClassName('resource-inc')[0]; el.getElementsByClassName('resource-inc')[0];
elI.innerHTML = elI.innerHTML =
` +${state.formatNumber(resource.inc(state))}/s`; ` +${state.formatNumber(resource.inc(state))}/s`;
} }
if (this._handleClick) {
const elC: HTMLCollectionOf<Element> = const elC: HTMLCollectionOf<Element> =
el.getElementsByClassName('resource-cost'); el.getElementsByClassName('resource-cost');
if (elC.length > 0) { if (elC.length > 0) {
elC[0].innerHTML = this._getCostStr(resource, state); elC[0].innerHTML = this._getCostStr(resource, state);
} }
} }
} else {
if (el.className !== 'resource locked')
el.className = 'resource locked';
} }
} }
this._handleClick = false; this._handleClick = false;