404 Commits over 120 Days - 0.14cph!
More variety in test generator
Some more tests parsing
Parse JSON into custom data structure (tree) for diffing and patch application
All gameobejct tests passing
Fix video recorder crash when vulkan video fails to initialize on AMD cards
Properly cleanup resources if video or audio context creation fails at any point.
Add MovedObject patch operation, this operation tracks objects that have been reordered or moved to a different container.
Basic tests are passing now
Add complex generated GameObject diff/patch roundtrip tests
Most of them are passing, ordering seems to break sometimes
Add JsonPointer (RFC 6901) implementation and tests
Add RFC 6902 compliant JSON diffing / patch generation
Use JsonNode instad of JsonDocument in pointer
Add ApplyPatch functionality
Generate roundtrip tests
Add Test Generator for GameObject hierarchies
Remove Copy & Move operations
I can't make it work there are extremely rare edge cases for enormous diffs (thousands of objects and operations).
The code to support these edge cases was becoming more and more unhinged and illegible.
Can still tackle it later if we really need it.
Add tests for LCS
Work around .net runtime bug in Json.DeepEquals
dotnet/runtime/issues/112769
Clone/Move attempt 2
Move optimization still fails for very large diffs -> disable for now
Cleanup some debug code
Simplify Json Pointer
Object/Pattern detection in json
Smarter pattern matching; Added Patch Generation & Application
Improve handling of nested objects
Prefab Instance Overrides PoC
Remove old version of Json patch (RFC 6902)
Simplify ObjectContext collection
Revert "Mark as Dirty if physics body transform did change"
This reverts commit e493682a3343f8eed75fd50e7b437505915e64fd.
Account for more floating point imprecissions
Further, reduce goal overshooting for nav agents
Optimize crowd simulation, should be twice as fast
This mitigates the performance loss caused by enabling Collision Avoidance & Separation
Reformat Detour/Recast C# files
Mark as Dirty if physics body transform did change
Early return in PhysicsBody.Move if transform didn't change
Fix agent acceleration oscillating when reaching goal
Add Rotation.AlmostEqual
Add Transform.AlmostEqual
Only mark physics body as dirty if it actually moves
Fixes issue where navmesh areas would be rebuild unnecessarily
Accept Context Menu Event for feature tabs. Add some more validation to clipboard JSON
Fixes sbox-issues/issues/7867
Enable nav agent avoidance and separation
No idea if they have always been off or if i disabled them by accident at some point.
Get rid of float/double.Epsilon usage use more sane defaults
10^-4 for singles
10^-6 for doubles
Refactor some navmesh code, allows for less agressive locking
Spaces -> Tabs
Add some locks since this can be accessed by multiple threads
Get rid of unused ChunkyTrimesh recast code
Update recast from Facepunch/recastnavigation
Untangle navmesh threading, significantly reduces initial navmesh generation time.
Fix floating point precission issues in recast pathing code
see recastnavigation/recastnavigation#515 & recastnavigation/recastnavigation#735
NavMesh only allocate debug draw buffers if we actually want to draw
Disable Navmesh generation on prefab scenes
Don't recreate Inspector widget if the object is already inspected
Fixes sbox-issues/issues/7882
https://files.facepunch.com/lolleko/2025/March/17_09-35-SvelteMeerkat.mp4
Add 99.9 percentile to benchmark data collection to diagnose largest lag spikes
Also P5 and P95 while we are at it.
Fix Navmesh.DrawInEditor spawning 500 generation threads at the same time
Use Environment.ProcessorCount instead of ThreadPool.GetMaxThreads
We are tracking frame time not FPS so we want to use P99 not P1
Hookup GCPause performance stat for benchmarks
Calculate P95, P1 and Stuttering metrics for our benchmark samples
Run deathmatch benchmark after regular benchmark (#1850)
https://files.facepunch.com/lolleko/2025/March/13_20-16-AdvancedOrangutan.mp4
Run deathmatch benchmark after regular benchmark
https://files.facepunch.com/lolleko/2025/March/13_20-16-AdvancedOrangutan.mp4
Bump default avoidance for nav agents
Small optimizations in GameObject.Clone
Preallocate some containers
Slightly reduce reflection usage
Small optimization in Components.GetAll
Reduces allocations/garbage by getting rid of recursive lazy evaluation (yield).
Set transform to identity/zero during ConvertToPrefab serialization, restore instance transform after serialization
Closes sbox-issues/issues/7840
Fix GameSettingsModal incorrectly showing some properties as bool
Improve error handling for navmesh queries
Vectorize and cleanup some things in BBox math
Obsolete `BBox.GetVolume` we already have `BBox.Volume` (property)
Obsolete `Sphere.GetVolume`, add `Sphere.Volume` as replacement
Add static variant of Vector3.Clamp
Add static variant of Vector3.Abs
Support non uniform scale in BBox.Transform
Add back support for H.265 video encoding. Use HW accelerated Vulkan Video if available.
Encoding H.264 and H.265/HEVC now uses Vulkan video and the underlying hardware accelerators if supported.
If Vulkan video is not supported, both H.264 & H.265 will fallback to openh264.
This mean the support for H.265 encoding is limited to modern GPUs.
Update FFmpeg again, I forgot webp codecs & muxers in the last build
Custom FFmpeg build: Reduces FFmpeg binary size from 120mb to 20mb
Update ffmpeg 6.0 -> 7.1 (#1842)
Switch to libopenh264 mark h265 codec as obsolete for now
Update ffmpeg binaries 6.0->7.1
Update ffmpeg 7 incompatible code
Reset FFT data on StopPlay
Simplify ObjectContext collection
Navigation Links (#1833)
Allows to place and edit nav links.
Links are considered by pathing and agents will be able to traverse them.
Link traversal is customizable via code:
- Links can be inherited to customize behavior.
- Agents have an delegate that is invoked when they start/stop traversing a link.
Detailed Instructions: https://sbox.game/dev/doc/navigation/navmesh-links/
https://files.facepunch.com/lolleko/2025/March/05_17-11-MadCrayfish.mp4
https://files.facepunch.com/lolleko/2025/March/05_17-14-CraftyOropendola.mp4