I generally try to make sure that every commit in a repo can be built and run without what I call "unexplainable weirdness" because you might end up just building over unexplainable weirdness if you allow yourself to commit it. With this game, though, quite possibly because of bad design on my part, sometimes a lot of stuff has to be done in different places to get rid of unexplainable weirdness. So you end up with huge commit messages like this:
Liminal space correctly decides when whole throng is in, and level_usher clears level, sets up new one, and moves everyone over.
- liminal_space:
- Use level_completed flag to avoid emitting level complete signal more than once per level completion.
- Emit signal deferred so that respondents don't have to worry about being with a physics update.
- throng_root_node:
- await physics_frame before concluding clear_current_level, so that deleted nodes are gone before any following code runs.
- Factor move_to_place out of add_at_random_place.
- exit:
- Emit signal deferred so that respondents don't have to worry about being with a physics update.
- Sync presentation after sending a guy to liminal space.
- level_usher:
- Set throng position to the position of the first individual in the throng after moving guys to the new level.
- Reset level_completed flag after setting up new level.
- Use thing.exit_liminal_space instead of directly calling remove_child because it handles the visual representation and the in_liminal flag.
- thing:
- Update remove_visual_presentation() to do a queued move of the sprite_root from the sprite_presenter back to the thing instead of freeing it, so it has it for add_visual_presentation() later.
- sprite_presenter:
- Check for the presence of arg with == null instead of not so args that equal Vector2.ZERO aren't counted as missing.