Facet-MUD-Project/facetjs

Game.gameLoop is not deterministic

Aperta

#21 aperta il 27 lug 2020

 (1 commento) (0 reazioni) (0 assegnatari)TypeScript (0 fork)auto 404
bugdesign decision neededgood first issuehelp wanted

Metriche repository

Star
 (1 stella)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

Describe the bug Currently, the game loop is not deterministic -- its behavior depends on outside variables; specifically, the game state. This presents a number of challenges, such as making testing a bit more difficult than it probably should be. For example, in testing, you have to call game.shutdown() before game.gameLoop(), otherwise it will begin actually looping and hang your tests indefinitely.

To Reproduce Steps to reproduce the behavior:

let game = Game.getInstance();
game.gameLoop();

...watch it loop and hang until interrupted.

let game = Game.getInstance();
game.shutdown();
game.gameLoop();

...watch it loop a single time and then exit.

Expected behavior The game loop should be fully deterministic. Given the same inputs, it should produce the same outputs and behavior.

Additional context Also outlined in this report is that this method produces side effects. Specifically, calling setTimeout(). I'm not really sure there is a way around that. But it sticks out to me in this context, as this bug is calling out the game loop as not being a "pure" function.

Guida contributor