diff --git a/public/css/debugger.css b/public/css/debugger.css index 0ef73ce..8713844 100644 --- a/public/css/debugger.css +++ b/public/css/debugger.css @@ -61,3 +61,6 @@ body, html { #resource-container-passive .resource { background-color: #ffc; } +#resource-container-research .resource { + background-color: #cff; +} diff --git a/src/model/GameConfig.ts b/src/model/GameConfig.ts index de4d84c..e5ee99d 100644 --- a/src/model/GameConfig.ts +++ b/src/model/GameConfig.ts @@ -1,9 +1,11 @@ /// +/// /// /// /// /// /// +/// /// /// /// @@ -79,6 +81,8 @@ class GameConfig { state.addResource('house', new House()); state.addResource('chrch', new Church()); state.addResource('cmpnd', new Compound()); + state.addResource('blpmt', new BuildingPermit()); + state.addResource('mchch', new MegaChurch()); // add passive resources state.addResource('creds', new Credibility()); diff --git a/src/model/resource/BuildingPermit.ts b/src/model/resource/BuildingPermit.ts new file mode 100644 index 0000000..9ef6cba --- /dev/null +++ b/src/model/resource/BuildingPermit.ts @@ -0,0 +1,18 @@ +/// + +class BuildingPermit extends Research { + constructor () { + super('Building Permit', + 'Unlocks several new buildings you can build outside of your compounds.'); + this.cost.money = 250000; + } + + 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/IResource.ts b/src/model/resource/IResource.ts index 2bb0eb0..b0b255a 100644 --- a/src/model/resource/IResource.ts +++ b/src/model/resource/IResource.ts @@ -3,6 +3,7 @@ enum ResourceType { Job = 'job', Consumable = 'consumable', Infrastructure = 'infrastructure', + Research = 'research', Passive = 'passive' } diff --git a/src/model/resource/MegaChurch.ts b/src/model/resource/MegaChurch.ts new file mode 100644 index 0000000..0a18437 --- /dev/null +++ b/src/model/resource/MegaChurch.ts @@ -0,0 +1,20 @@ +/// + +class MegaChurch extends Infrastructure { + constructor () { + super('MegaChurches', + 'Room for 5 pastors'); + this.cost.money = 7500000; + this._costMultiplier.money = 1.01; + this._baseMax = 2; + } + + public isUnlocked (state: GameState): boolean { + if (this._isUnlocked) return true; + const permit: IResource = state.getResource('blpmt'); + if (permit.value > 0) { + this._isUnlocked = true; + } + return this._isUnlocked; + } +} diff --git a/src/model/resource/Pastor.ts b/src/model/resource/Pastor.ts index c758aa7..88bd2ec 100644 --- a/src/model/resource/Pastor.ts +++ b/src/model/resource/Pastor.ts @@ -9,7 +9,9 @@ class Pastor extends Job { } public max (state: GameState): number { - return state.getResource('chrch').value * 2; + let max: number = state.getResource('chrch').value * 2; + max += state.getResource('mchch').value * 5; + return max; } public isUnlocked (state: GameState): boolean { diff --git a/src/model/resource/Research.ts b/src/model/resource/Research.ts new file mode 100644 index 0000000..a822a59 --- /dev/null +++ b/src/model/resource/Research.ts @@ -0,0 +1,16 @@ +/// + +abstract class Research extends Purchasable { + public readonly resourceType: ResourceType = ResourceType.Research; + + constructor ( + public readonly name: string, + public readonly description: string + ) { + super(name, description); + this.value = 0; + this._baseMax = 1; + this.clickText = 'Learn'; + this.clickDescription = 'Complete this research.' + } +}