2,906 Commits over 730 Days - 0.17cph!
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
Update(editor): use different colors for visualizing occluidee screen-space bounds
Red for dynamics, cyan for statics, purple for grid
Tests: visualized swing - saw all 3 colors
Bugfix(editor): fix dynamic occludees rendering sphere in LS, instead of WS
- use cached location to help detect slow updates to dynamic occludees
Tests: visualized bounds of swing seats - they're no longer at origin
Remerge of before due to submit race
Merge: from renderbatch_meshlod_improv
- Update: reimplementation of previous bugfix to be cheaper
Tests: pasted a boat, flew out and back - props were there
Optim: simplify prev bugfix, don't early initialize LOD managers
Tests: pasted a boat, flew out and back - props were there
Bugfix: from renderbatch_meshlod_improv
- Bugfix for disappearing props on boats
Tests: paste a boat, flew out of range and back - all props present
Bugfix: fix initialization race of LODComponent on whether it's dynamic or not
- Now both ToggleDynamic and OnEnable can initialize managers+occlusion
When loading from network snapshot, it was toggling dynamic state before it initialized managers, leaving it in a half-dynamic, half-static state
Tests: spawned a copy paste boat, all entities were present. Flew out of net range and back - all's there
Merge: from furniture_occlusion_fix
- Reimplement previous bugfix to retain furniture culling
Tests: rendeted and tried to run in and out, abused noclip, triggered bug once
Bugfix: restore furniture occlusion culling, check both occlusion state and appt flag
Tests: rented 601, ran in and out, noclipped a bunch - was able to trigger it only once(abusing noclip) instead of constantly, should be better