Because this is a prototype, we hadn't got a proper key bind system yet. Instead things are pretty raw.
This was fine but it's got to the stage where we're debugging and trying enough things that we're standing on each others toes with the binds, and could do with ways to bind keys to specific console commands. So I added a key bind system.
There's really two stages of the key bind system. Setting it up so you can bind specific keys to certain console commands is simple. Then you have to consider how that's going to be used for keys like "forward" that you want to query the state of, rather than running a command based on it.
I used the same method we use in Rust. If you bind a key that starts with a "+", on key press it calls that string + " true", on release it calls that string + " false". This means you can have a console variable which is a bool and will get set true or false depending on whether the key is down. Or a function that gets a bool parameter to switch something on or off.
I opted to create a special class for it.
This class implements IConsoleCommand, an interface the console system can talk to.
This allows us to do a bit of logic in the class to provide useful functions like JustPressed, JustReleased, rather than just IsDown.