GUI: Under Control
A bit slow with updates lately due to travelling for all sorts of reasons, and travelling is going to resume. But, here are some updates from the last few weeks:
Controller navigation. I've added support with purely controller based gameplay and navigation. It works! So far. Quite interesting and needs a bit of work. Godot nicely supports some default behaviours that make life easier too, like pressing left/right etc and moving to the closest interactable node. The need for controller navigation made me finally understand the difference between hover and focus :) Would be more effective if you saw my hands/controller, but ... you'll live without.
Tile selection GUI. This is simply an overlay over the game where selectable tiles (for an action) are highlighted. Simple in theory, but refactoring the previous solution will inadvertently lead to refactor butchery of the old ImGUI-based approach. Plus it's a case for reusing the same screen multiple times (e.g. an action might require to select 4 targets) which requires a little bit of work to support.
Choice selection GUI. This is a simple screen with enumerated options as buttons. Again, ties to above refactoring work.
So, after a few days of work, both were done, including refactoring the context actions. Now the entire thing works nicely with a controller, keyboard, or keyboard and mouse. I've got two context action modes, a "simple" and a "full".
For the simple context action, when pressing a button, we go through the tile and immediate neighbourhood and see what we can interact with: open a door, open a chest, attack somebody, pick up something from ground etc. If it's just a single thing, we just do it automatically, to reduce unnecessary menus.
For the full context action, when pressing another button, the tile selection GUI appears with all visible tiles. We choose a tile, and then we figure out what is possible to do on that tile (again, open a door, open a chest, etc) and that's presented as an option.
Item context menu. Clicking on an entry in the inventory screen will now bring a context menu, showing possible actions with that item: throw, drop, use, etc. Some of them are implemented, some are not.
Removed "back" buttons Since a key/button will always be devoted to going "back" a screen, I thought to remove all back buttons. This might make mouse-only play tricky, but I'm not sure that would be a problem that I need to worry about.
Active abilities screen. Simple list of buttons really, that can trigger any active ability.
Controller vibration support on screenshake. Obviously not important, but I've been curious on how it works in Godot. Super simple is the answer - added that now.
Input refactor. I used to poll input in the update loop. The proper way is to handle input events as they come. I've refactored the code to do that now.
Wait screen. The game supports arbitrary waiting time, for time-sensitive events, resting etc. To specify how much you want to rest, a simple screen was implemented.
Split stack screen. That also needs a screen, for when we're dropping/exchanging items. I don't have a good use-case yet, so no video! It's rather simple and functional though.