`stdout_output_level` for printing to stdout, `console_output_level` for
printing to local console and remote console and `loglevel` for the log
file.
Keep the old log level filters 0 for info and more severe, 1 for debug
and more severe and 2 for trace and more severe, introducing -1 for
warn, and -2 for error. -3 will show no log messages at all.
Change static variables to member variables and move member variables from overall console class to the console instance class, so selection is tracked separately for console instances.
Both functions track the time in seconds that has passed since some instant as a `float`. The specific start time is not relevant for calculations, therefore `IClient::GlobalTime` can be used instead of `CConsole::TimeNow`.
Use `double` instead of `int` to represent the time in milliseconds in envelope calculation.
This fixes step-ladder patterns appearing with bezier curves and artifacts appearing when two points are very close together in time.
When memory for a command or data in the command buffer cannot be allocated in `CGraphics_Threaded::AddCmd` and `CGraphics_Threaded::AllocCommandBufferData` the command buffer is cleared so it should always be possible to allocated memory successfully on the second try. Therefore assertions are added and the return values and inconsistent checks of the functions are removed.
The usage of `AddCmd` is simplified by automatically deriving an error message based on the type of the template parameter.
Only add assertion to prevent empty filename, as this causes Valgrind to crash.
Handle empty filename used for special null-image separately in gameclient.
Add `CMapBasedEnvelopePointAccess::SetPointsRange` function so the start point and number of points that should be considered when using this envelope point storage can be configured. In the editor, this range always includes all points, as each envelope directly stores only its own points, so animations were rendered correctly there. However, all points are stored in one array when loading them from the map file (i.e. when rendering the map ingame), so the start point and number of points specified for the envelopes have to be considered when accessing their envelope points.
Closes#6886.
Use `CLineInput::GetActiveInput` and `CLineInput::IsActive` instead for consistency.
The last active item pointer is now only tracked internally in `CUI` to deactivate the active line input when it's no longer used in the UI.
Write the map to a temporary file first. When the map was saved to the temporary file successfully, first delete the existing map file having the real filename, then rename the temporary file to the real filename.
If deleting or renaming fails, show an error message popup and log an error message to the console.
The implementation is consistent with the way temporary files are utilized by Microsoft Word, so this should work on Windows.
See: https://support.microsoft.com/en-us/topic/description-of-how-word-creates-temporary-files-66b112fb-d2c0-8f40-a0be-70a367cc4c85
Different from #4482, this first deletes the old map file before renaming the temporary file. Although it appears that renaming a file would also override the target file, it could be that this does not work on all systems. Additionally, this adds descriptive error messages in the cases of failure.
Closes#4476.
Co-authored-by: Dennis Felsing <dennis@felsin9.de>