964 Commits over 243 Days - 0.17cph!
Update: Temp logging of geiger counter equip events
Tests: local session
Optim: defer boxing when calling LogEntry
Reduces the overhead of logging a smidge when we won't be emitting any logs due to debug level.
Tests: ran local session, logs still there
Update: Converting custom combat logs to use LogEntry
Tests: local session, checked that collisions generated hurt logs
Update: minor log format changes to help with searchability
By wrapping the category in it'll be easier to do simple searches without hitting popular words (like Spawn)
Tests: ran locally
Clean: Making frequent logs less spammy in normal detail mode
- Bradley velocity report is removed (as it didn't add much value)
- Network update logs moved to highest detail level, 3
Otherwise, it floods the output too much, making it hard to parse logs
Tests: ran locally, checked logs are less spammy
Bugfix: Fix logging name frequently missing a NetID
It was possible to generate and cache name too early
Tests: local editor session, observed that same game object's identity updated properly
Update: When logging emit an instance ID
Without it can be hard to aggregate logs per game object
Tests: ran in editor
Bugfix: RCon test page now works
It's barebones, but enough.
Tests: tested in local session, could see commands take effect
New: Initial version of Save Viewer
It's very simplistic, but currently displays ID, prefab name, and parent ID (if exists). Allows to search by these and prefab name
Tests: loaded a test save from staging server (200k entities, 20mb), was able to interact and get data I wanted
Clean: simplify code in WhatUsesThis.ParsePrefab
Tests: none, trivial changes
Bugfix: WhatUsesThis - avoid duplciate results
It was possible that our recursive search would pick up the same references as AssetDatabase, so exclude those.
Tests: Asset used to return 5 results with 2 pairs of dupes - now it's 3 results with no dupes
Update: WhatUsesThis is now able to inspect prefabs recursively
It'll search for any GUIDs that are mentioned on any attached MonoBehaviors and cache them. Search is done in the background while database scan is ongoing - no perf degradation.
Tests: ran Rebuild then searched for the prefab that didn't report any results - now reports 6 hits
Update: pool.print_memory now allows to filter by T, case sensitie
Will be useful in narrowing down leaks in a more precise fashion
Tests: Ran the command with/without filter args
Merge: from /main/expand_ipooled
Tests: tested all modes in editor, built client and server binaries, tried 2p local multiplayer - coor loop was good.
Merge: from main
I've reached a good checkpoint, so prepping to merge back to staging
Tests: tested all modes in editor, built client and server binaries, tried 2p local multiplayer - coor loop was good.
Update: TokenBucket implements IPooled
Tests: none, trivial changes
Update: Sliced-/GranularAudioClip.Grain now implement IPooled
Didn't realize there were extra similar types, added.
Tests: None, trivial changes
Update: Planner.Guide.Snapping implements IPooled
Another candidate for struct conversion - added it to the task.
Tests: tested with laser light snapping - still snaps
Update: SoundModulation.Modulator now implements IPooled
Ideally this should be a struct, since it's an 8byte object, but that would require to change too many places for now. Will create a separate task for this.
Tests: local session, ran around and shot - could hear steps, impact on different surfaces
Update: MusicManager.ClipPlaybackData now implements IPooled
Tests: booted in local session, no exceptions
Update: MusicClipLoader.LoadedAudioClip now implements IPooled
Tests: booted in local session, no exceptions
Updating: EngineAudioClip.Grain implements IPooled
Will need to explore further if it's dead script
Tests: None, trivial change
Merge: from main
Tests: none
Update: Replacing Pool.FreeUnsafe with Pool.Free where possible
Since more IPooled usage has been added, these were left untouched by accident.
Tests: none, trivial changes
Merge: from main
Tests: checked all modes build
Update: Network.Message implements IPooled
Technically, this should be converted to a struct instead, but the benefit/effort is not worth it right now.
Also marked a static as readonly, since we never modify it.
Tests: single client-server session was pumping messages succesfully. Built all modes. Tested recoridng and playback.
Update: WaterDynamics.InstanceBatch implements IPooled
Also removed a bit of dead code and unused functions.
Tests: checked that rowboat still produces foam
Update: PlayerReclaimEntry implements IPooled
Tests: tested in local multiplayer in softcore mode
Update: ImpostorBatch implements IPooled
Moved some code around and removed some always-true checks.
Tests: during local game hit all new functions in the right order
Update: convert PositionLerp to IPooled
Previously implemented as IDisposable, so this was a straighforward switch.
Tests: ran a local 2player game, forced the client to disconnect - confirmed EnterPool got called
Merge: from main
Tests: built all modes in editor
Update: fixing invalid namespace reference
Tests: none, trivial change
Clean: Removing other TMP hidden warnings
Turns out I added an extra csc file that I missed today.
Tests: none, trivial changes
Update: fixing depr warnings in TMP
Originally I excluded it from fixes as it was an external package, but it has a couple of our fixes already.
Tests: none, trivial changes
Update: Review feedback
Avoid creating a struct when fetching state of ParticleSystem
Tests: none, trivial change
Merge: from main
Tests: Build all modes
Merge: from /main/pool_reduce_freeunsafe
Tests: tested on feature branch with build tests
Update: Replace Pool.FreeUnsafe with Free
No funcitonal change, just reducing work in the future. Also updated relevant binary.
Tests: Build a win64 client locally and built all modes in editor.
Merge: from main
Tests: none
Buildfix: updating stale DLL
Tests: built all modes
Update: Fixing obsolete FreeList usage
Tests: none, trivial change
Update: Consolidating Facepunch.System.Tests
- Cleaned up a bunch of bogus using statements
Tests: Ran combined unit tests - they pass.
Merge: from main
Tests: ran around, gathered, shot, built
Merge: from /main/experiment_reduce_gc_server_refresh
Tests: ran new unit tests, checked Server Browser work
Merge: from main
Tests: ran new unit tests, checked ServerBrowser
Update: StringView gains index and range support
Added tests to cover new functionality. Added more checks for Substring operations
Tests: ran new unit tests, checked ServerBrowser
Update: StringView - prefer ctor overloads instead of default args
Saves a couple branches in some scenarios.
- Also expanded tests to cover all ctors and arg ranges
Tests: Ran new unit tests and checked server browser
Clean: Updating the docs of StringView to compare against Memory
Turns out I missed System.memory during my initial research, which serves a very similar purpose. Sadly, it doesn't cover all our use cases, so we still need StringView - I've mentioned these shortcomings in the xml doc.
Tests: none, trivial change
Update: Finalizing StringView
- StringView's constructor now follow's Span form (source, start, len) instead of (source, start, end). Fixed updated unit tests.
- Reimplemented CompareIgnoreCase via EqualityComparer<T> instead of IEqualityComparer<T> as per MS recommendation.
- Annotated every public method with xml docs
Test: ran unit tests - all green. Checked ServerBrowser - still good.
Update: Expanding HashEquality test for StringView
To confirm that the required interface is implemented correctly and gets invoked.
Tests: Ran the updated unit test