This repository has been archived on 2022-01-16. You can view files and clone it, but cannot push or open issues or pull requests.
irreligious/src/main.ts

42 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-08-18 10:09:19 -05:00
/// <reference path="./model/GameConfig.ts" />
2021-08-18 15:36:02 -05:00
/// <reference path="./model/GameState.ts" />
/// <reference path="./render/DebugRenderer.ts" />
/// <reference path="./render/IRenderer.ts" />
2021-08-18 10:09:19 -05:00
let globalStartTime: number = 0;
let globalTimeout: number = null;
let cycleLength: number = 250;
2021-08-18 10:09:19 -05:00
function gameLoop (state: GameState, renderer: IRenderer): void {
2021-08-18 10:09:19 -05:00
// figure out how much actual time has passed
const elapsedTime: number = globalStartTime > 0
2021-08-18 10:09:19 -05:00
? (new Date()).getTime() - globalStartTime : 0;
2021-08-18 15:36:02 -05:00
state.advance(elapsedTime);
2021-08-21 19:02:57 -05:00
renderer.render(state);
2021-08-18 15:36:02 -05:00
2021-08-18 10:09:19 -05:00
// run again in 1sec
globalStartTime = (new Date()).getTime();
globalTimeout = setTimeout((): void =>
gameLoop(state, renderer), cycleLength);
2021-08-18 10:09:19 -05:00
}
// run with default config at startup
((): void => {
const config: GameConfig = new GameConfig();
const renderer: IRenderer = new DebugRenderer();
const state: GameState = config.generateState();
2021-08-18 15:36:02 -05:00
// re-run main loop immediately on user clicks
state.onResourceClick.push((): void => {
if (globalTimeout !== null) {
clearTimeout(globalTimeout);
gameLoop(state, renderer);
}
});
if (document.readyState !== 'loading') gameLoop(state, renderer);
else document.addEventListener('DOMContentLoaded', (): void =>
gameLoop(state, renderer));
2021-08-18 10:09:19 -05:00
})();