2,820 Commits over 700 Days - 0.17cph!
Update: move GenerateCheckCapsuleQueries to GamePhyics and utilize
Tests: ran unit tests
Update: split GamePhysics.CheckCapsule<T>
- forbid CheckCapsule(batch) from returning ColliderHits - this is to better represent relationship to non-batched CheckCapsule
Tests: unit tests
Update: adding GamePhysics.CheckCapsule(batch)
Last factored out func - should be able to complete refactor shortly
Tests: none, will integrate to tests next
Bugfix: fixing native allocation leaks in tests
Tests: ran the tests with leak detections enabled
Update: GamePhysics.CheckCapsule<T>(batch) internalized layermask handling
There's room for optims, but not going to pursue them for now - will test later how the perf deteriorates with the new APIs.
Tests: ran relevant unit tests
Update: GamePhysics.CheckSphere(batch) now able to handle mask validation internally
- Renamed GamePhysics.IgnoreCollision to MasksToValidate (prev name could be misleading and confusing)
- undid sphere command building as that wasn't meshing well with MasksToValidate flow
- Added UtrilityJobs.GatherJob<T> (will need to go through other code and clean up similar/same jobs)
I still need to update GamePhysics.CheckCapsule, and replace inlined code with new versions
Tests: all relevant unit tests
Clean: simplify NativeList.CopyFrom<T>(ReadOnly)
Tests: none, trivial change
Update: Rewrite GamePhysics.HandleIgnoreCollision(batch) to allow for explicit control of what exclusion volumes to check
Tests: ran updated test
Update: adding GamePhysics.HandleIgnoreWater
- comes with it's own consistency test
Going to use those to try to refactor some of the existing code and hopefully shrink it
Tests: ran new test
Tests: adding tests that generate various "HandleIgnoreCollision" scenarios
- added TestHandleIgnoreTerrainConsistency
Covers both TerrainCollisionTrigger and WaterVisibilityTrigger.
Tests: ran the new unit test, checked that all paths all covered.
Optim: GamePhysics.HandleIgnoreTerrain - replace const seting managed loop with a Burst job
Saves 0.1ms on 10k test
Tests: ran unit test
Optim: allocate smaller buffers for WaterCollision.GetIgnoreIndirect
- Added a couple profiling scopes
Tests: unit tests
Bugfix: when we're missing TerrainCollision or WaterCollision, run all of the physics checks for trigger volumes
- Added UtilityJobs namespace, moved FillJob<T> to it
- Added a utility extension to NativeList<T> to copy from NativeArray<T>.ReadOnly (surprised it's missing)
Tests: all relevant unit tests
Clean: remove GamePhysics.OverlapSphere(batch) and GamePhysics.OverlapCapsule(batch)
- These have been inlined into CheckSphere<T> and CheckCapsule<T>
- Also updated CoarseQueryGrid.CheckJobIndirect(capsule) (returns JobHandle, works on a NativeList) since I missed it in previous commit
Tests: ran all unit tests
Update: CoarseQueryGrid - add non-indirect CheckJob API
- Also changed the API to return a JobHandle and accept a NativeList
Helps avoid extra busy work when we run direct work
Tests: ran unit tests
Bugfix: prevent WaterCollision.GetIgnore from returning garbage values
Another case that's the same as previous
Tests: none, trivial change
Clean: move all CoarseQueryGridJobs to it's own namespace
- rename the jobs to avoid duplication with namespace
Tests: compiles in editor
Bugfix: make sure TerrainCollision.GetIgnore doesn't return garbage values
Same bug as in WaterCollision that I fixed last friday.
Tests: none, trivial change
Bugfix: WaterCollision.GetIgnoreIndirect properly fills entire result set
Tests: ran unit tests + staging demo playback
Tests: adding TestWaterIgnoreConsistency to further narrow down what is going wrong
Tests: ran new unit test, it does fail as begrudgingly expected
Optim: FinalizeTickParallel - use a burst job to gather players to validate for tick history
- Cleaned up a bunch of code by switching to NativeList from NativeArray
- more TickInterpolatorCache usage
Tests: staging demo playback
Update: adding HandleIgnoreTerrain that works on a batch of positions
- also ninja-fixing a bug in batch overload of HandleIgnoreCollisions that screwed layermasks - good thing it wasn't used anywhere
Tests: ran unit tests
Merge: from parallel_validatemove/stable_playercache
Promoting stable player cache version as main dev direction
Tests: none, no conflicts
Clean: consolidate some work buffers
Tests: ran staging demo
Update: merge NativeList.Expand and NativeList.ExpandAndClear
- Rewrote the Expand branching logic to be simpler
Realized that Expand(false) always leads to a Clear - so there's no point in having ExpandAndClear
Update: Add NativeList.ExpandAndClear
- also fixed invalid check in NativeList.Expand that was comparing against list length instead of capacity, potentially causing more reallocs than necessary
Tests: none, trivial change
Clean: variable rename
Tests: none, trivial change
Bugfix: NativeList.Expand now properly clean us old list
Tests: none, trivial change
Update: TickInterpolatorCache exposes state via ReadOnly property
- Reroute all accessors and logic via static methods that take in ReadOnlyState
This enables to pass entire TickInterpolatorCache into a burst job
Tests: ran unit tests
Update: mark a bunch of BasePlayer functions as static
Makes it easier to build Burst jobs
Tests: editor compiles
Update: Split various tick validation functions into smaller loops
- Added a couple small extension utils to NativeList
This helps isolate code that we'll be able to run as Burst jobs - there's a bit more to split
Tests: Staging demo playback - got comparable results
Update: Adding last missing API - TickInterpolatorCache.TransformEntries
- added tests to cover it
Tests: ran unit tests
Update: Adding TickInterpolatorCache.PlayerTickIterator to help with code migration
- Expanded unit tests to cover the new util and a couple more code paths
Tests: none. Tests are currently failing as I uncovered a different issue - will fix in next CL
Optim: TickInterpolator.TestConsistency - Replace Assert.IsTrue with AssertTrue wrapper that doesn't allocate
- Sprinkled some scopes for future
Speeds up the unit test 20x times and avoids 3.6GB of garbage
Tests: ran the unit tests
Bugfix: avoid writes past the end of the buffer
Tests: ran unit tests
Update: Integrate TickInterpolatorCache into the server flow
Tests: played back staging demo, once with it enabled from start, another with disabling-enabling it multiple times during playback. Both cases had comparable telemetry numbers
Tests: Add more edge case testing
- Testing 1 tick only
- Testing up to capacity ticks
Tests: ran unit tests
Bugfix: TickInterpolatorCache now properly handles "Reset" position
- Fixed unit tests
Tests: ran unit tests - all tests now pass
Tests: validate PlayerTickIterator in it's initial state
Tests: ran unit tests
Clean: add a comment
Tests: none, trivial change
Update: translate ValidateMove to batched ValidateMoves
Internally it's the same logic for now, as I've yet to properly intergrate TickInterpolatorCache and need to convert a lot of internal methods
Tests: played back staging demo - got same numbers and no new errors
Update: made some caches stable across frames
Tests: played back staging demo - no new errors and stats match expected
Clean: simplify call
Tests: none, trivial change
Merge: from parallel_validatemove
Tests: none
Merge: from parallel_validatemove
- bugfix for invalid transforms in the cache - fallout from previous bugfix
Tests: played back staging demo - counts as expected and no more errors about transform cache inconsistency
Bugfix: fix transform cache rebuild loop
Previously threw away dirty indices too early, missing on some player cache changes
Tests: played back the staging demo - no more error logs about transfomr cache inconsistency
Update: consolidate debug logic
- Also ValidatePlayerCache fixed to actually check for native-null players
I'm hoping I won't need this after tomorrow, but keeping it fixed to use for testing on staging for a bit
Tests: ran through the staging demo - notifced it's picking up an issue from the prev merge, will fix shortly
Merge: from parallel_validatemove
Tests: none, no conflicts
Merge: from parallel_validatemove
- Bugfix for null players in PlayerCache causing UsePlayerUpdateJobs to get disabled
Tests: played back staging demo - got similar results
Clean: fixing broken whitespaces that I spotted with the merge
Tests: none, trivial change