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

View File

@ -77,8 +77,8 @@ class GameConfig {
state.addResource('crpto', new CryptoCurrency());
state.addResource('tents', new Tent());
state.addResource('house', new House());
state.addResource('cmpnd', new Compound());
state.addResource('chrch', new Church());
state.addResource('cmpnd', new Compound());
// add passive resources
state.addResource('creds', new Credibility());

View File

@ -1,6 +1,6 @@
class GameState {
private _versionMaj: number = 0;
private _versionMin: number = 1;
private readonly _versionMaj: number = 0;
private readonly _versionMin: number = 1;
public config: GameConfig;
@ -71,6 +71,8 @@ class GameState {
}
public performClick (resourceKey: string): void {
if (!this._resources[resourceKey].isUnlocked(this)) return;
if (this._resources[resourceKey].clickAction !== null) {
this._resources[resourceKey].clickAction(this);
for (const callback of this.onResourceClick) {
@ -172,4 +174,11 @@ class GameState {
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 () {
super('Churches',
'Preaching grounds for 2 pastors.');
this.cost.money = 10000;
this.cost.money = 150000;
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 {
constructor () {
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._costMultiplier.money = 1.5;
}

View File

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

View File

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

View File

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

View File

@ -75,14 +75,26 @@ class DebugRenderer implements IRenderer {
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) {
const resource: IResource = state.getResource(rkey);
const container: HTMLElement = document
.getElementById(`resource-container-${resource.resourceType}`);
if (resource.isUnlocked(state)) {
const el: HTMLElement = document
.getElementById(`resource-details-${rkey}`);
if (resource.isUnlocked(state)) {
if (el.className !== 'resource') el.className = 'resource';
const elV: Element =
el.getElementsByClassName('resource-value')[0];
@ -105,19 +117,22 @@ class DebugRenderer implements IRenderer {
if (enabled) elB[0].removeAttribute('disabled');
else elB[0].setAttribute('disabled', 'disabled');
}
if (this._handleClick) {
if (resource.inc !== null && resource.inc(state) > 0) {
const elI: Element =
el.getElementsByClassName('resource-inc')[0];
elI.innerHTML =
` +${state.formatNumber(resource.inc(state))}/s`;
}
if (this._handleClick) {
const elC: HTMLCollectionOf<Element> =
el.getElementsByClassName('resource-cost');
if (elC.length > 0) {
elC[0].innerHTML = this._getCostStr(resource, state);
}
}
} else {
if (el.className !== 'resource locked')
el.className = 'resource locked';
}
}
this._handleClick = false;