Crouching was a prerequisite for climbing as I wanted it to be the default state when exiting a climb. That way the player can climb up into narrow spaces. I got rolling implemented right away as well as it was easy to code and made jumping around more fun.
Was planning on posting a clip with the new climbing ability earlier this week, but I encountered a game crashing bug in GDScript that I've finally been able to isolate. Will try and see if I can reproduce it in a test project and report it 🤔
While refactoring, I did some more clean up of the features I've developed so far, and I made ledge traversal work much better for surfaces with weird angles. Also created new debug features to help investigate some issues.
I created a state machine that supports black-box states—they can operate without knowing of the others. Instead of specifying the next state, they can simply flag for the StateManager to figure out what the next state should be. This way I can maintain really loose coupling.
Augmentations are what I call similarily isolated features, but that aren't dependent on state. However, a state can disable an augmentation if desired, so that interaction is suspended while climbing or something.
As states are Spatials I can also place nodes relating to each state under it in the hierarchy and keep it visually isolated as well. Feeling pretty confident this will scale well for this game project.
Still working on ledge grabbing, but the character class has started to get messy, so I must refactor it first and figure out how to best manage its state going forward. Will try separating everything neatly using a state machine.
So, you don't use Godot yet but would like to use it one day. Which of these describes closest the main limiting factor to you?
Please describe in a reply! If you use Godot already, please RT so we get more answers :)