CGameClient::OnPredict() says "don't predict anything if we are paused"
and yet we predict different stuff based on CGameClient::Predict() result
which leads to flickering here and there (e.g. for projectiles and characters).
Render a pause/play icon in the center of the screen when pausing/unpausing while the menu is not active.
The icon fades in and out over 0.5 seconds and slightly increases in size over that time.
When starting demo rendering with initial pause, the pause indicator is rendered continuous until playback is first started, to ensure that the initial pause state is communicated clearly to the user. The initial pause indicator is not included in the rendered demo, but pausing and unpausing later during demo rendering will cause it to be included in the video, same as other UI elements. Closes#7044.
The config variable `cl_demo_show_pause` (`0/1`, default `1`) is added to hide the pause indicator entirely, for example to render a demo with multiple pauses without the indicator.
The pause indicator and also the existing speed indicator are not rendered (anymore) while the menu is active, as the menu already contains this information.
Add more efficient function for formatting integer values as strings.
A benchmark shows that using this function is significantly faster than using `str_format`. It is faster by a factor of 220 with Clang 15.0 O2 (https://quick-bench.com/q/BlNoLnlyqxipf4jvsFTUxKMHDJU) and by a factor of 11 with GCC 12.2 O2 (https://quick-bench.com/q/Fxf9lDCTqXBF4pIa_IyZ5R0IqYg).
This increases FPS in the editor by ~25% when many numbers are rendered for switch/tele/speedup/tune layers or with "Show Info" being enabled.
The additional static analysis for `std::to_chars` revealed that the wrong size was used in `CHud` for `aScoreTeam[TEAM_RED]` and `aScoreTeam[TEAM_BLUE]`.
This requires incrementing the macOS deployment target from 10.13 to 10.15.
When connecting to the SQLite database fails, e.g. because the `.sqlite` file is corrupted, the server would crash with the assertion "Tried connecting while the connection is in use" when a player joins and performs any action.
This is fixed by resetting the use-flag when connecting to the SQLite database fails, which is the same behavior as for the MySQL database connection.
It was not actually necessary to clear the brushes to prevent the crashes. The crashes were fixed by not storing the texture handles for the layers anymore.
Closes#7024.
Add a button to manually reload the entities background map instead of automatically reloading it when it's changed. As the background map was only reloaded every 10 seconds, sometimes changing the background map quickly had no effect.
Improve the layout of the DDNet settings menu. Align labels and UI elements and reduce unused empty space.
vanilla 0.6 joins weren't recorded. Also after map change, for the
existing players these Join chunks were missing. Just add these
message for existing players now and add OnClientEngineJoin in all
code paths with clients connecting.
Add `str_utf8_offset_bytes_to_chars` and `str_utf8_offset_chars_to_bytes` functions to base system to convert between byte and UTF-8 character offsets in UTF-8 strings.
Previously, this was separately implemented in the textrender and in the lineinput helper.
These textrender functions are entirely replaced by the new functions:
- `ITextRender::SelectionToUTF8OffSets` (by `str_utf8_offset_chars_to_bytes`)
- `ITextRender::UTF8OffToDecodedOff` (by `str_utf8_offset_bytes_to_chars`)
- `ITextRender::DecodedOffToUTF8Off` (by `str_utf8_offset_chars_to_bytes`)
These lineinput helper functions are reimplemented using the new functions:
- `CLineInput::OffsetFromActualToDisplay` (uses `str_utf8_offset_bytes_to_chars`)
- `CLineInput::OffsetFromDisplayToActual` (uses `str_utf8_offset_chars_to_bytes`)
Register the `OnWindowResize` listener in the engine client instead of the game client and properly dispatch the event also to the editor, so text containers in the editor are cleared when the window is resized.
Closes#7018.
Fix text containers rendering broken text after the language is changed, as this cleared the glyph atlas without clearing the references to the glyph positions in the text containers. Now `OnWindowResize` is also called on language change to reset all text containers.
However, the glyph atlas is not cleared on normal window resize anymore, because this seems to be unnecessary.
In `LoadPlayerData` exactly the `LIMIT 1` clause was getting truncated from the query due to the buffer size being insufficient. Depending on the length of the table name prefix the query could have been truncated at any other position resulting in syntax errors.
In `ShowTeamTop5` the buffer size is increased because it could cause truncation with a longer than default table name prefix.
Using `/timecp` with a player name that has no time on the current map incorrectly cleared the player score/time causing it to not be shown in the scoreboard anymore.
Use different colors to highlight tuning parameters when using `dbg_tuning`:
- red: value changed globally
- blue: value changed only in current zone
- green: value changed globally but reset to default by tune zone
- grey: value unchanged globally and in current zone
In addition to this, with `dbg_tuning 1` the unchanged parameters and the velramp graphs are not shown anymore. With `dbg_tuning 2` all parameters and graphs are shown as it was previously the case with `dbg_tuning 1`.
The position of the debug information is adjusted so it overlaps less with the HUD. When many tuning parameters are shown, the parameters now wrap to another column instead of extending beyond the height of the screen.
Headers are also added to each column.
Also show current tune zone.
Show value on every line instead of having some lines without a value.
Improve labels.
Reduce duplicate code and improve readability.