Actor, CPos, CVec, WAngle, WPos, WRange, WRot and WVec structs now implement IEquatable<T> which means unboxing/casting costs can be eliminated.
Also simplified the ToString method by concatenating components directly rather than using a format string since the overhead is a bit high for simple cases like this.
* Use Pair instead of KeyValuePair
* double -> var
* Butcher XML comments
* Change WinState default to Undefined and use it instead of the new GameOutcome
* Other changes
It was crashing because it tried to seek 8 bytes before the end
of a file that was empty (zero length).
I also added a few more checks and another try/catch to prevent
any more crashes related to damaged files.
List of changes:
* Better and more filters with new layout, for both mods.
* Rename/Delete/Detele all functionality.
* Simplified ReplayMetadata class considerably by introducing a new
GameInformation data object. The new GameInformation class contains
more information than previously available so the new solution is not
compatible with old replays, meaning it can't read old replays.
* Better and cleaner game information gathering in order to be written
at the end of the replay file.
* Revert changes to ReplayConnection, no longer necessary.
* Better exception message on missing sprites and fonts.
* New "SpawnOccupant" class that holds all the information needed by the
MapPreviewWidget to visualize a spawn point. It was using Session.Client
before and it was necessary to separate it to be able to show information
not available at lobby time.
* Fix keyboard focus UI bug when closing a window would not remove focus.
This closes issue #2152. The filters added are:
* Game type (singleplayer / multiplayer)
* Date
* Duration
* Outcome
* Player name
Other changes:
* Added a 'CollapseHiddenChildren' option to the ScrollPanelWidget to
make hidden children take up no space.
* Removed the extension (.rep) from the replay filenames in the
replay browser.
The replay files are just streams all network communication so to
get any info out of them it is necessary to play back the stream
until the wanted information is reached.
This introduces a new metadata block placed at the end of the
replay files and logic to read the new block, or fall back to
playing back the stream for older files.
The replay browser is also updated to use the metadata information
instead of reading the replay stream directly.
This is useful to ignore fast operations that just spam the log.
The class had to be reworked because it couldn't properly handle cases
where all of a node's children where below the threshold.
Also changed DoTimed() and RunActivity() to use PerfTimer.
Check if this instance has been disposed and don't call 'tick'
if it has.
Also remove the finalizer that was broken and wrong anyway.
'runtime' would never become null because it's readonly and
managed resources are freed automatically or may have already
been freed by then.
Refactored the Rules and SequenceProvider classes to be parts of ModData and
maintain a cache of the instances used in the mod.
The caching reduced the load times a lot, especially after the first load.
Some lazy loading in sequences also helped lower the startup time..
Note: The static classes were left behind to redirect the existing code's
calls.