Before edit() cleared the input on screen by overdrawing it from x to
the right side of the screen. This works fine for terminals but for
example setting the watches alarm time it does not.
The text font is 5x8 so overdrawing the max input length + 1 * 5 is
sufficient to clear the screen from our input and the cursor. Also if
the value ends up being too big it is clamped to the right side
of the screen.
According to the naming convention class member variables need to be
prefixed with an underscore.
Unfortunately, I already started converting time constants when making
this change so ticksToMsec() and constant changes are sprinkled over
this commit.
Instead of manipulating C-Strings edit() now takes a Common::String as a
parameter and the terminal input gets redrawn after every keystroke what
simplifies the function greatly.
During the gameplay room state is overwritten and needs to be restored
on restart/load. Currently the original room state is not preserved and
thus needs to be destroyed and reinitialized to obtain the original
state.
GetKeyInput/MouseInput/Input() block until the expected input happens.
GetKeyInput() takes a parameter that checks if the key input is a
'printable' character, backspace, delete, return or escape.
Also, the key state is now stored instead of just the ascii value of the
pressed key.
Currrently the only implemented scene that uses this function is looking
at the monitor in the cockpit. Depending on use cases in other scenes
the function needs to be extended.
Before the status line would show invalid input for a frame what was
especially annoying during animations, as they currently tend to block the game
loop for their duration.
The original game's time was stored in 55ms ticks but we just run on
milliseconds. setAnimationTimer() sets the ticks the currrent room's
animation() function will not be called.
Most notably changes are,
Handling of object state when calling drawImage() for
inverse section rendering
Beginning to convert GUI to GuiElements (_guiCommandButton)
Mouse Input handling
This is still WIP but better than the glitchfest before.
Of course the short description does not adequately describe the changes
made with this commit and I assume this won't be the last big
restructuring unfortunately.
Focus of this commit was to implement/fix the code so the main user
interface can be rendered. Bugs in the core routines for rendering
Messages and Images were fixed as well.