main game loop and state
This commit is contained in:
parent
b92661e934
commit
9aa7a3b3a9
13
src/main.ts
13
src/main.ts
|
@ -1,20 +1,25 @@
|
||||||
/// <reference path="./model/GameConfig.ts" />
|
/// <reference path="./model/GameConfig.ts" />
|
||||||
|
/// <reference path="./model/GameState.ts" />
|
||||||
|
|
||||||
let globalStartTime = 0;
|
let globalStartTime = 0;
|
||||||
|
|
||||||
function gameLoop (config: GameConfig): void {
|
function gameLoop (state: GameState): void {
|
||||||
// figure out how much actual time has passed
|
// figure out how much actual time has passed
|
||||||
const elapsedTime = globalStartTime > 0
|
const elapsedTime = globalStartTime > 0
|
||||||
? (new Date()).getTime() - globalStartTime : 0;
|
? (new Date()).getTime() - globalStartTime : 0;
|
||||||
|
|
||||||
|
state.advance(elapsedTime);
|
||||||
|
|
||||||
// run again in 1sec
|
// run again in 1sec
|
||||||
globalStartTime = (new Date()).getTime();
|
globalStartTime = (new Date()).getTime();
|
||||||
setTimeout(() => gameLoop(config), 1000);
|
setTimeout(() => gameLoop(state), 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
// run with default config at startup
|
// run with default config at startup
|
||||||
(() => {
|
(() => {
|
||||||
const config = new GameConfig();
|
const config = new GameConfig();
|
||||||
if (document.readyState !== 'loading') gameLoop(config);
|
const state = config.generateState();
|
||||||
else document.addEventListener('DOMContentLoaded', () => gameLoop(config));
|
|
||||||
|
if (document.readyState !== 'loading') gameLoop(state);
|
||||||
|
else document.addEventListener('DOMContentLoaded', () => gameLoop(state));
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
/// <reference path="./GameState.ts" />
|
||||||
/// <reference path="./IResource.ts" />
|
/// <reference path="./IResource.ts" />
|
||||||
/// <reference path="./resource/Religion.ts" />
|
/// <reference path="./resource/Religion.ts" />
|
||||||
|
|
||||||
|
@ -14,5 +15,42 @@ class GameConfig {
|
||||||
public relOtherShare:number = 0.02;
|
public relOtherShare:number = 0.02;
|
||||||
public relNoneShare: number = 0.16;
|
public relNoneShare: number = 0.16;
|
||||||
|
|
||||||
constructor () {}
|
public generateState(): GameState {
|
||||||
|
const state = new GameState();
|
||||||
|
|
||||||
|
// create world religions
|
||||||
|
state.addResource('xtian', new Religion(
|
||||||
|
'Christianity', 'God, Jesus, Bible, churches.',
|
||||||
|
this.relChristianityShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('islam', new Religion(
|
||||||
|
'Islam', 'God, Muhammad, Quran, mosques.',
|
||||||
|
this.relIslamShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('hindu', new Religion(
|
||||||
|
'Hinduism', 'Dogma-free spiritualism.',
|
||||||
|
this.relHinduismShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('buddh', new Religion(
|
||||||
|
'Buddhism', 'The minimization of suffering.',
|
||||||
|
this.relBuddhismShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('sikhi', new Religion(
|
||||||
|
'Sikhism', 'Meditation and ten Gurus',
|
||||||
|
this.relSikhismShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('judah', new Religion(
|
||||||
|
'Judaism', 'God, Abraham, Torah, synagogues.',
|
||||||
|
this.relJudaismShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('other', new Religion(
|
||||||
|
'Other', 'A variety of belief systems.',
|
||||||
|
this.relOtherShare * this.worldPopulation));
|
||||||
|
|
||||||
|
state.addResource('agnos', new Religion(
|
||||||
|
'Non-Religious', 'Atheists and agnostics.',
|
||||||
|
this.relNoneShare * this.worldPopulation));
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
/// <reference path="./IResource.ts" />
|
||||||
|
|
||||||
|
class GameState {
|
||||||
|
private _resources: {[key: string]: IResource} = {};
|
||||||
|
|
||||||
|
public addResource (key: string, resource: IResource): void {
|
||||||
|
this._resources[key] = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public advance (time: number): void {
|
||||||
|
console.log(`Advancing state by ${time}ms...`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,5 +7,6 @@ interface IResource {
|
||||||
description: string,
|
description: string,
|
||||||
resourceType: ResourceType,
|
resourceType: ResourceType,
|
||||||
value: number,
|
value: number,
|
||||||
max: number
|
max?: number,
|
||||||
|
unlocked: boolean
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,14 @@
|
||||||
/// <reference path="../GameConfig.ts" />
|
|
||||||
/// <reference path="../IResource.ts" />
|
/// <reference path="../IResource.ts" />
|
||||||
|
|
||||||
class Religion implements IResource {
|
class Religion implements IResource {
|
||||||
public readonly description: string;
|
public readonly resourceType = ResourceType.Religion;
|
||||||
public readonly resourceType: ResourceType = ResourceType.Religion;
|
public readonly max?: number = null;
|
||||||
|
public readonly unlocked = true;
|
||||||
public value: number;
|
|
||||||
public max: number;
|
|
||||||
|
|
||||||
constructor (
|
constructor (
|
||||||
config: GameConfig,
|
|
||||||
public readonly name: string,
|
public readonly name: string,
|
||||||
populationShare: number
|
public readonly description: string,
|
||||||
|
public readonly value: number,
|
||||||
) {
|
) {
|
||||||
this.description = name;
|
|
||||||
this.max = config.worldPopulation;
|
|
||||||
this.value = config.worldPopulation * populationShare;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue