diff --git a/public/css/debugger.css b/public/css/debugger.css
index 6997729..0ef73ce 100644
--- a/public/css/debugger.css
+++ b/public/css/debugger.css
@@ -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;
diff --git a/src/model/GameConfig.ts b/src/model/GameConfig.ts
index 0dabdbd..2a08724 100644
--- a/src/model/GameConfig.ts
+++ b/src/model/GameConfig.ts
@@ -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());
diff --git a/src/model/GameState.ts b/src/model/GameState.ts
index 3a3801b..d0e0948 100644
--- a/src/model/GameState.ts
+++ b/src/model/GameState.ts
@@ -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.');
+ }
}
diff --git a/src/model/resource/Church.ts b/src/model/resource/Church.ts
index f65964b..9ebcfd9 100644
--- a/src/model/resource/Church.ts
+++ b/src/model/resource/Church.ts
@@ -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;
}
}
diff --git a/src/model/resource/Compound.ts b/src/model/resource/Compound.ts
index 0195089..113b133 100644
--- a/src/model/resource/Compound.ts
+++ b/src/model/resource/Compound.ts
@@ -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;
}
diff --git a/src/model/resource/House.ts b/src/model/resource/House.ts
index 2ab42c9..84995dc 100644
--- a/src/model/resource/House.ts
+++ b/src/model/resource/House.ts
@@ -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 {
diff --git a/src/model/resource/PlayerOrg.ts b/src/model/resource/PlayerOrg.ts
index 10b9971..50bce33 100644
--- a/src/model/resource/PlayerOrg.ts
+++ b/src/model/resource/PlayerOrg.ts
@@ -52,6 +52,7 @@ class PlayerOrg implements IResource {
return;
}
+ this._lastRecruitmentLog = 0; // always log on click
this.addValue(1, state);
}
diff --git a/src/model/resource/Tent.ts b/src/model/resource/Tent.ts
index a59e027..1c970fd 100644
--- a/src/model/resource/Tent.ts
+++ b/src/model/resource/Tent.ts
@@ -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;
diff --git a/src/render/DebugRenderer.ts b/src/render/DebugRenderer.ts
index f213202..fcdfd04 100644
--- a/src/render/DebugRenderer.ts
+++ b/src/render/DebugRenderer.ts
@@ -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 = `
+
+ `;
+ 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}`);
+ const el: HTMLElement = document
+ .getElementById(`resource-details-${rkey}`);
if (resource.isUnlocked(state)) {
- const el: HTMLElement = document
- .getElementById(`resource-details-${rkey}`);
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 (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) {
- if (resource.inc !== null && resource.inc(state) > 0) {
- const elI: Element =
- el.getElementsByClassName('resource-inc')[0];
- elI.innerHTML =
- ` +${state.formatNumber(resource.inc(state))}/s`;
- }
const elC: HTMLCollectionOf =
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;