Facet-MUD-Project / Facet-MUD-Project/facetjs
Game.gameLoop is not deterministic
- Dominant language
- TypeScript
- Stars
- 1
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
**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:
```ts
let game = Game.getInstance();
game.gameLoop();
```
...watch it loop and hang until interrupted.
```ts
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.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.