Facet-MUD-Project / Facet-MUD-Project/facetjs

Game.gameLoop is not deterministic

Open
#21 1 comment 0 reactions 0 assignees View on GitHub
bug design decision needed good first issue help wanted
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.