2,918 Commits over 730 Days - 0.17cph!
Update: ensure BaseEntities with networkEntityScale can be saved in MT
- added GetLocalScaleMT + unit tests
- increased TestMTSave(BaseEntity) coverage
Tests: ran unit tests - 219 pass/425 fail
Bugfix(tests): rewrite test proto comparison to use serialized buffers
Was naive to hope NUnit would fall back to reflection-based Equals for objects.
Tests: ran TestMTSave(BaseEntity) - it passes (though there's 1 branch that's not covered, gotta fix)
Update: add GetNetworkTime(ThreadSafeTime) overload
Going to use it to gradually convert entity saving code (instead of modifying all 40 callsites from the get go)
Tests: ran unit test for BaseEntity - no longer complains about scripting API, but thinks outputs differ
Update: Convert BaseNetworkable.GetNetworkPosition/Rot to use GetLocalPosMT/RotMT
- every BaseEntity now caches it's TransformHandle on spawn
Only active when UsePlayerJobs >= 4
Tests: ran unit tests (now fails further). spawned a boat on craggy and sailed for a bit - no replication issues.
Update: Implement GetLocalPosMT and GetLocalRotMT that can bypass unity scripting restrictions
- added unit tests
These are dangerous and can only be used if it's known that there's no other overlap with transform hierarchy changes. WIll be slower than TransformHandle read in editor/staging, but should be similarly fast in release
Tests: ran unit tests
Update: cache Time values into ThreadSafeTime so we can avoid unity api calls
- replaced Time.frameCount read in BaseNetworkable
BaseNetworkable can now save, now the rest of BaseEntity
Tests: ran TestMTSave(BaseEntity) - still fails, but now further
New(tests): BaseNetworkableTests.TestMTSave - saves each subclass of BaseNetworkable twice on thread pool, compares results
Tests: ran all 644 cases, all fail, picks up scripting API asserts as hoped
Merge: from remove_jobs2
- Removal of UsePlayerUpdateJobs 2 supporting code, setting it lower will run at least mode 3
- Bugfix for potentially invalid buffer usage when fetching WaterInfos
- Moved more BasePlayer state to NativeArrays
Tests: ran unit tests, ran around on craggy
Update: Codegen
Tests: compiles
Clean: pass around ReadOnly instead of mutable collection where possible
Tests: compiles
Bugfix(tests): make sure PerfIsNoClipping properly cleans up spawned gameobjects
- also cleaned up some leftover deltaTime arrays in tests
This was messing up tests further in the queue
Tests: ran AH perf and unit tests
Bugfix: fix out of bounds write
Tests: ran unit test combination that previously failed - now passes
Clean: remove AntiHack.DeltaTimes persistent buffer
Was used to cache tick times, but now we cache it in PlayerStates
Tests: ran AH perf and unit tests - stumbled on an unrelated(I think? suspicious) bug
Update: move tickDeltaTime and tickNeedsFinalizing into it's own state arrays
Cleans a stale TODO
Tests: booted craggy and ran around
Bugfix(tests): remove test assertion that can sporadically fail
Since we run some checks in parallel, some state results are unreliable
Tests: ran unit tests as a batch and each in isolation
Bugfix(tests): ensure env volumes get cleaned between TestIsFlyingConsistency runs
Found a test that fails when run in isolation
Tests: ran unit tests
Bugfix(tests): use test state caches for PlayerState
Fixes failures from previous change. Spotted a bug that should cause a failure, yet it passes somehow - will investigate next
Tests: ran AH perf and unit tests
Update: move generic AH state from BasePlayer to AH.PlayerState struct
Tests: ran AH tests, perf tests failing (will fix next)
Bugfix: add missing reset call for noclip states
- also minor refactor
Tests: ran unit tests
Clean: minor refactor
- remove dead prop
- wrap unparentTime in prep for moving to it's own state array
Tests: compiles
Bugfix(tests): use passed in array instead of global static when checking overlap with player
Same bug as before but on a batched path - guess I was sleep deprived yesterday.
Tests: ran all AH perf and unit tests - they pass
Bugfix(tests): use correct array when checking overlap with other player
Fixes PerfIsFlying tests, gotta fix the batched now
Tests: ran perf + unit tests
Clean: move noclip state from BasePlayer to AntiHack.PlayerNoclipState
Tests: ran all AH tests, unit tests pass but perf tests fail (for flying checks, will fix next)
Clean: move IsNoClipping code to unit tests
Tests: compiles
Update: ensure PlayerPos/LocalPos/Rot/... caches are initialized to accurate values when player connects
Tests: none, trivial change
Clean: minor refactors
- codegen
Tests: none, trivial changes
Clean: remove last Jobs 2 code and branches
Tests: compiles
Clean: remove all speed and flyhack state fields on BasePlayer, rely on AH counterparts
Tests: ran unit tests
Clean: use AH states in unit test logic
Eliminates a chunk of BasePlayer AH field usage, can remove them next
Tests: ran unit tests
Clean: rewrite internal unit test methods to use PlayerServerState struct
Done in prep to switch to custom AH states from Jobs 3
Tests: ran unit tests
Clean: got rid of Jobs 2 branches in AntiHack code
- also moved serial IsSpeeding and IsFlying from AntiHack to Test.AntiHackTestsSetup
Keeping them so that we can still use those to validate batched logic
Tests: ran unit tests
Clean: remove BasePlayer.UpdateSubscriptions, it was only used in unit tests
- fix TestPlayer.UpdateSubscriptionsConsistency unit test
Tests: ran unit test
Clean: initial pass of removal Jobs 2 code
- removed hand-rolled async state machines
- removed all code dependent on !UseUniTasks
Tests: compiles
Merge: from culling_falsepos_improve
- Update: restore culling.debugshowstats functionality
Tests: built debug client standalone, used the command in editor
Update: replace editor GUIStyle with default one to allow culling.debugshowstats to work
- remove UNITY_EDITOR defines
Tests: built debug client standalone
Bugfix: ignore set calls if occlusionculling instance hasn't been created yet
Tests: compiles
Merge: from culling_falsepos_improv
- Bugfix for NRE blocking connection to the server
Tests: none, trivial change
Merge: from culling_falsepos_improv
- Update(debug): added a bunch of editor only debug tools to be available in standalone, in culling clientvar group
- Update(debug): improved output of some of these tools
Tests: used these tools on craggy and apartment
Update: expose more of culling debug tools
- DebugShowStats - same as PrintStats, but continuously rendered to screen
- DebugDrawHiZMipChain - draw all depth mip levels on screen
- DebugDrawHiZOverlay - overlay specific level of mipchain on the screen, -1 to disable
Tests: used all on craggy
Bugfix: ensure rendering camera is facing same direction as apt cctv camera
Tests: rented 602, looked into it - more stuff rendered
Clean: get rid of OcclusionCulling.DebugFilter
We already had DebugMask that represented exactly the same
Tests: compiles
Update: expose more of OcclusionCulling debug
- got rid of original culling.debug clientvar (superseded by debugmask which accepts a bitmask value)
- added debugscreenbounds (shows screenspace bounds + resolved LOD of hiz chain)
- added printstats
Most of this was available in the editor, should make it easier to sus out the specific conditions of bugs
Tests: used all on craggy
Update: add debugshowoccluderid to help with filtering to specific occluder
Tests: used on Craggy to look at boxes
Update: couple more debug features for OcclusionCulling debug
DebugLookingAt will try to resolve LODComponent (but our entity hierarchies are wild, so it fails frequently), DebugRange limits which occluders are debugged
Tests: used both to target props on Craggy
Update(debug): allow to filter occlusion culling debug to just 1 specific instance via culling.debugid
- added editor only way to copy id (need a way to do this in standalone)
Tests: used it to isolate apartment corridor wall (still pants to use though, need something better)
Update(editor): occlusion hiz overlay - "auto-expose" depth overlay
Original implementation made it very difficult to discern anything in enclosed spaces
Tests: used it in apartments
Update(editor): use same color for lod level of occludee when rendering ss bounds
- also added memoization of lod level
Tests: none, trivial change