InGameState handles the main gameplay loop.
Protected
Called when entering the state.
Called when exiting the in-game state. Hides the UI.
Renders the game scene.
Updates game objects, timer, and checks for win/lose.
EndState if the game is won or lost, otherwise null.
InGameState handles the main gameplay loop.