324 Commits over 92 Days - 0.15cph!
Avoid div by zero in Gizmo.Draw.LineCylinder
Initial navmesh link editor
https://files.facepunch.com/lolleko/1b0411b1/sbox-dev_tfs96azAGk.mp4
Refactor non polymesh navmesh data
Initial link component
Add navmesh links to tile cache
Disable Navmesh Warning "Could not build compact data" for now
Improve handling of empty navmesh tiles
Also improve editor auto update when world bounds change.
Navmesh only run heightfield generator cleanup in task
Navmesh generator cleanup is sub 10 microseconds, so not worth it to dispatch a task, since task dispatch overhead would be higher than actual compute.
Fix potential infinite loop in navmesh generation
Fix navmesh geometry collection physicsworld NRE
Fix NavmeshGeneration performance regression caused by 51c5e14
Navmesh generator cleanup now runs in parallel
Heightfield span pools are no longer freed after a completed generator run, instead they are returned to the freelist and reused.
Disposing of the generators now waits for all active generator tasks to terminate.
Fix physics triangulation occasionally overwriting the vertex buffer
Spheres & Capsules were always written at the beginning of the buffer
Fix NRE when scene was unloaded while navmesh generation was running
Fix hull navmesh area bounds using z up instead of y up.
Dynamic NavMesh Obstacles (#1706)
Allows to block of certain areas of the navmesh both in editor and at runtime.
For this we introduce and expose the concept of **navmesh areas**. Areas can affect navmesh generation and agent behavior/pathing.
### Details
- Accomplished by implementing a tile cache that stores an intermediate representation of the navmesh
- The intermediate representation can be used to modify & remove areas of the navmesh.
- Modifying the intermediate state is magnitudes cheaper than rebuilding the navmesh from scratch.
- Static areas are basically free.
- Moving areas are a bit more expensive, but you should be able to have at least a couple of dozens of them
- The area's shape is defined by a (trigger) collider that can be linked to a nav area component
https://files.facepunch.com/lolleko/1b2911b1/sbox-dev_JTOOu8AAeA.png
https://files.facepunch.com/lolleko/1b2911b1/sbox-dev_3XdDSxj7Ly.mp4
https://files.facepunch.com/lolleko/1b2511b1/sbox-dev_XBNEUDAPfh.mp4
https://files.facepunch.com/lolleko/1b2111b1/sbox-dev_CQAKEpUbQk.mp4
### Summary
Allows to create a navmesh area, link it to a (trigger) collider & set it to blocking to create an obstacle. In the future we can expand on area functionality: custom tags, local navmesh generation parameters...
Fix NavmeshArea.IsBlocking not toggling state
Add doc comments to navarea component
Make new PhysHsape.UpdateShape functions internal
Ensure IsGenerating flag is cleared if navmesh generation fails
Attempt to use static nav generator pools again
Fix navmesh native destructor
Non static init of navmesh generators
Move navmesh generator pool initialization from static initializer to navmesh.init
Dispose of navmesh in Scene
Should fix unloaded scenes leaking native navmesh data.
Change navmesh initialization to sync
Disable some calls to narrow down where test is failing on CI
Stop PathWidget fighting back in LineEdit mode and selecting the whole text, fixes Facepunch/sbox-issues#6869
Scene view: disable gizmo interactions while doing camera movement
SteamId can be converted to from an int, but will give a warning
Fix code archive not using correct CSharpParseOptions
Don't debug output xml parse errors
Add more package tests
Fixed loading game from .sbproj with Dedicated Server that has libraries. Iterate any libraries in the project and add them as projects before compilation
Fix warning
Add dark_descent and cat_harvest package tests
Merge branch 'master' into navmesh-dynamic-obstacles
Fix navmesh generator pool disposal
Correctly dispose of native tile cache resources
▉█▆▊▅▅: █▌▆▅▉▊ ▊█▉▆▄▉▋/▆▉▋▌▅█▉ ▇▊▆▄█▌ ▇▊▌▄▄ (▄ -> ▍▊▊), ▉▆█▄▉▋▇▊▇ ▅▇▌▌█▋▊▄▅/▊▌▋▊▅▊▊▆▄ ▉█▅▄▉ ▄▉ ▄▉█▅▍▋▍ ▄▍▌▅▄ █▅▅▇▄▌▇ ▌▍ ▌▄▋▇ ▆▋▋▅
▅▅▋▋▆█▆▆ ▍▆▌▌▊▋ ▇▉ ▉▌▌ █▄▅▆▆▆▊▆█:
▊▋▊▄▅▍ ▋▋▇▇▆▋▍▅▄▊█▍▇▄▋▆▋█▍▇▄▄▌▉█▊▆▋▉▆▉▌▊▋▄▉▆▆▉▅
█▍▅▊▋▆: ▆▅▊█▍▅▅▌ <▍▋▌▋▌▉▉▅@▊▋▄▊▇.▊▄▆>
▄▉▌▋: ▍▅▍ ▆▌▆ ▇▄ ▅▅:▆█:▋▌ ▋▆▊█ +█▄▊▇
▆▇▉▅ ▍▊ ▄▇██▇▇ ▌▋▌ ▊▌▉▅█ ▄█▉ ▊▌█'▌ ▋▊▉▅ ▌▅▉ ▌▉▊▋▇▊▄ ▋▋▌▄ █▍▄█▄▊▌ ▌▅ ▇▋▌▍▆ █▌▆▋▌ ▇█▅▇▍ ▆▍▅▆█▇▆▋▊ ▉█ █▌▇▊▍▆▍▍ ▆▄▋▊ ( ▉▌▌▋▍://▌▉▉▆▊.▄▆▄█▉▇▋▄▍.▅█▋/▄▄▍▅▍/▄▉▅▄▌▉▆▉/█▊▊▆-▍▄▍_▅▌▋▅▉█▋▊▅▆.▄▉▆ )
▋▌▋▋▌▌ ▉▄▅▊▆▋▌▌▅▊▅▋▄▄▉▊▅▆▌▊▉▆▌▍▌▋▍▍▌▉▌▌█▅▉▌▄▆▉▇
▊▉▊▍▄█: ▄█▋▄▊█▍▅ <▆▆▅▅▋█▋▌@▄▉▌▆▆.▍▉▊>
▊▍▋█: ▍▍▊ ▍▍▇ ▋█ ▆▋:▍▇:▍▇ ▌▇▊▌ +█▅▊▌
▉▄▅▋ ▅▅▍▄█▊▋█▆▇ ▉▆ ▆▇▋▆ ▉▆▉█▇▍▅▆ ▍▋▉▊▌
▄█▉▌▅▆ ▉▉▅▆▆▊█▅▉▋█▊▄▇▇▆▆▉▋█▆▄▋▄▋▅▅▊▅▌▍█▄▅▅▋█▍▆▋
▌▌▊█▉▅: █▆▉▌▅▄▅▋ <▍▉▋▄▉▅▉▌@▍▊▋▄▉.▌▆▉>
▌▇▆▍: ▊▇█ ▆▉▉ ▊▌ ▅▆:▋▍:▆▇ ▅▉▍▇ +▇▅▆▍
▌▍▋▉ ▉▊▍▍▄▌▌, ▅▄▉▅▉ ▉▄▉ ▊▋ ▋▍▌▋▆▊▋▉ █▍ ▄▊▋▉█
▉▍▍▍▍▅ ▆▍▄▄▆▊▇█▌▇▊▊▅▅▄▍▌▇▍▆▇▉▌▌▉▇▄▋▄▉▄▉▊▊█▍▋▊▍▄
▇▅▊▉█▍: ▉▇▇▉▅▉▄▊ <▌▊▄▆▉▍▉▊@▇▆▇▅▄.▉▊▄>
▅▅█▌: ▍▅▍ ▆▇▉ ▌▋ ▇█:▇█:█▍ ▋▌▍▉ +▄▍▉▊
▋▇▆▇ ▍▍▊▇█▍▅
▅▋▊▊▋▌ ▍▅▋▇▍▌▍▊▄▋▌▅▉▄█▇▆▇▊▄▄▊▌▄▄▍█▇▇▅▅▅▅▋▅▌▋▇▌█
▇▊▍▆▌▅: ▍▍▊▋▉▆▄▋ <▋▇▆▋▆▍█▉@▆▌▉▊▍.▋▍▊>
▊▌▉▅: ▋█▊ ▊▆▌ ▄▉ ▊▉:▊▍:▅█ ▄▋▉▍ +▄▌▄▋
▇▄▊▅ ▆▅▍▄▅
▊▊▍▄▇▊ ▊▉█▍▍▍▋▆▊▉█▋▅▄▊▌▊▄▍▄▊▍▄▉▌▉▊▇▍▆▆█▋▅▍█▊▍▅▌
▊▌▄▊▋█: ▌▍▉▌▄▌▄▆ <▄▊▉▌▅█▆▇@▇▇▇▄▄.▍▅▅>
▆▋▍▅: ▇▋▍ ▇▌▇ ▋▊ ▌▄:▆▇:▇█ ▅▆▍▋ +▋▊▉▇
▉▊▇▋█▌ ▌▇▊▆▌▍▍▆▋ ▆▄ ▌▊▉█▆ - ▄▍ ▊▉ ▌▌▆█▍▆▉ ▍ ▆▇▍▄▍▍▌██ ▍██ █▌▉▊▊▍▄▍ ▌▆▉ █▅▌▍▍ ▅▅ ▆▊▇▍▍█▆ ▄▍ ▋▋▄▌▄▉▅▅, ▍▇▉▋'▄▆ ▊▄▄▋ ▉▍▄▍
▌▇▆▋▌▅ █▍▅█▊▄▆▆▌██▍▍▋▍▉▉▇▆▇▋▍▍▊▋▄▌▋▍▊▉▇▊▄▊▄▆▅▄▄
▍▇▅▉▆▊: ▄▇▄▆▋▌██ <▇▉▍█▋▊▅█@▆▅▍▅▆.▌▄▌>
▇█▇▆: ▇▇▋ ██▄ ▄▉ ▋▊:▍▊:▍▆ ▋▅▄▌ +▇█▌▉
▄▄▊▅▇▆▆ ▅▍▇▉ ▆▄▍▌▉▍▊▊▊ ▋▊▆▆▅▄▄ ▍▋▉▄▌ ▇▌ ▆▋▋▇ ▊▌▇▉▋▉▄ ▊▅▋▆▉▌ ▊▌▆▋█▋▇▍▇▅...
▆▇█▆▋▌ ▆▋▅▌▊▄▋▇▅▌▋▅▉▌▇▊▆▊▇▄▅▅▌▍▇▇▆▊▄▆▇▇▇▌▍▄▅▋▅▊
▄▍▉▉▄▆: ██▌▊▅▋▌▊ <▊▄▍▅█▆▋▄@▆▍▉▇▋.▊▍▆>
█▉█▋: ▍▆▉ ▆▍▅ ▍▌ ▌█:▅▉:█▋ ▅▌▅▄ +▆▍▍▍
▊▊▄▊█ ▋█▉ ▅▉▇ ▅▋█▉▊▅▇▇ ▍▆▌▌ ▍▍▄▉ ▅▅▇▆▉ ▋▄▊▍▆▇▊▅▇▇▆▉▆▆▍.▊▆█
▍▍▉▄▋▋▌▄▊▇▆: ▇▇▋▇▋█▋ ▌▊█ ▋▊ ▅▉▌▊▆▋▊▄ ▌▌▋█▆▍▊ ▆▌▅▅▊▆▍▍▄▉
▆▉▌ ▆▌▊▍▅▇▇█ ▌▅ ▉▆▄▇▇█▉▆▄ ▋▋█▍█▆▄▇▆▊ ▌▅▄ ▆▋ ▋▄▅▌▆▍▊▅ █▋▉▍▊▍ ▊▉█ ▆▅▋▅▌▌▆▊▄▍, ▅▌▄▍█▄ ▆▉▇ ▆▋▄▄▅.▉▄▆ ▌▇█▇▉ ▄▇▍▍█▊▍
▅▍▅ ▆▍█▇█▋ ▅▌██▇ ▆▋▆▄▉ ▉▌ ▊▇▆▊
▊▉▋ ▊▄▉▉▉▊ ▅▆▉▋▅▋ ▆▉█ ▋▉▍▍▆ ▌▉▋▌▌▄▄ █▊▌▉▇▌▉▋▊▊▆
▌▋▅▍ ▆█▍▌▇▆ ▆▉▋▊▊ ▆▍▄▇▊▊ █▊▊▊▊▆▋▌▊ ▌▋▅▆ ▄▅ ▅▌▇▆
▍▄▊▋ ▆▄▅'▍ ▋▉▊ ▋▆▍ ▉█▅█▇ ▊▆▅▄▋███▉▉█▅▄▋▄ ▋▊▋, ▌█ ▉█▆▄'▆▄ ▅█▅▊ ▊▄▊ █▊▄▋▄ ▍▇▋▉▉ ▇▆█▉ ▍▅▆▍▊▇▍
▌▅▍▅▋ ▋▇▍▇▌▍██▊/▄▄▍▊-▌▉▊▍▍▍#▋▌▉▅
▆▌▋▄▊ ▊▊▉▅▊▇▆: ▍▋▆▋▇▋▄▍▌▅ ▆▆▋▌▆▌▆▍ ▇▍▅▅▋█▅▌ ▋▋▍▉▌ ▇▇▉▉▍, ▋▅▉-▍▌▊▆▅▉█ ▆▌▇▌▆▅ ▆▇▄▌ '▄▋▉▉ ▄▆▍▇ ▆▍▍▅▇▇▅' ▄█ ▇▄▉▍▉▍▋▊
▍▇▅▆▋ ▄▍▉▊▌▄▉: ▄▍▉▊ ▌▌▊█ ▄▉▄▋▆▋▍▆ █▍█▌▌▍▄▍ ▋▅ ▉▍▄▊▊▉ ▄█▇▇▉ ▍▄▋▆ ▆▉█▇ █▄▍▅ ▊▄▋▇▅ ▋▅▍▊ ▌▋▆▋ ██▌█▊ ▋█▉▋▉ ▌▋▉ ▉▇▊▉▇ ▄▊▋▇▉▌ (▅▍▋'▆ █▍▄▆ .█▉▌▄▉▌ ▌▆▉▉▌▉▌ ▉▊ ▅▋▇▄ ▉ .▊▊▍ ▄▍▄)
▇▋▄▆▅▌ █▊▆ ▄▋▇▄▋▉▌▄ ▆█▍▍▉▆▉ █▅▌▉▉ ▋▊▌▅ ▉▉▅▆▇█▄▄ ▆▆ ▊▇▇ ▆▇▄▌▉ ▋▉▍▄▋ ██▋▄▍▍▄
▉▇▍▆▉▆▇ ▉▋▋█ ▍▊▆▊ ▆▄▌▉█▊ ▆▌ ▆▅█▋▋▌▊.▇▅▄▅▋▆█<▅▊▄▊▇▌> ▍▅▄▇█▋▆▊▅ █▉█▆ ▉▊▅'▅ █ ▊▋▅█▆▌, ▉█ █▋▍▅█▋ ▇▇▍▅▅▄▇▍▊ ▍▅▋▉▋▉▋▋▄▉▊▄▊
- ▋▉▌▅▌▍▇█ ▋▄▍▋▄▍ ▉█▍▅ ▅▋▄▅▆ ▉▇▌▍▋ ▍▍▊▋▋▋▊█▇▍▅▇▊ ▆▆▅ ▋▌▊ ▉▅▇▄ █▉▇▉▉ ▆▆ ▌▄▍▊█.▌█▅▍▇▇
- ▅▄▍▍▋▄ ▌ ▍▄▌█▅█▉ ▊▌ ▅▆ █▅▄▅, ▅▅▅▇▍▋█ ▋▉ ▌▇▆▄▆▄ █▌
▆▊▉▅█ ▇▌▉▄▌▍▆▍█▅▆▍ ▍▌▌▇▅▅▉▇
▆▉▌▅▉▇▌▋ █▆▉▉▍▋
▋▆▌▌▍█▉▊█ ▆▍▄▆ ▅▊ █▄▉▍▌▅▋▄ ▇▉█▅█▉ ▆▊▊▍ ▆▅▉▉▆▅▅▌ (#▉▅▊▆)
█▅▊ ▅▍▅▍▉▅▉ ▍▆█▇▉ ▇▄▅▅ ▉▇▅▄ ▄▄▍▌█▌▄▊▉. █▅▅ ▇▉▇▉▄▊▄▌ ▋▅▇▄ ▍▊▌▋ █▄▄▌▆▄ ▉▄ ▄▇▉▋▄▍▇ ▋▇ ▅ ▆▋▊▉▅ ▍▆▆▇▌ ▊▌'▌▌ ▍▆▅▉▇▆▌ ▆▍ ▆ ▉▋▅▇
▋▋▋▉▋▋▇▄++
▅▍▌▅▊▄ ▊▊▇▆█▊▋ ▌▋▌▇▄▆▍ (#▌▇▄█)
* ▋▌█ * ▉▅▄▅▅█ ▍▅ ▅▋▆▉▌▊▆▍▇▆
* █▉▍▄▍▅ ▊██▆▋ ▍█▇▋▉▄ ▉▆▄▇▆ ▌▊▉▅▅▉█
* ▇▉█▋▅▆ ▇▉_▉▅▍▉▊▄▋_▇▆▆▌▋▆▉▋▊▆▍▆
* ▋▆█▌▄▅ ▄▄▋▇▆▇ ▄█▄▉▇ ▇▉▋▅▅ ▇▇ ▌▆'▋ ▅▌▋▌ █▅▄▊
* ▆▄▇▌▇ ▉▍▄▄ ▄▌▋▇▆▍ ▇▆▊▆ ▄▊▍▅▍ ▌▇▌▆ ▍█▋▅▄▋▋█▄▉ ▅▅ ▆▄▇ ▆▍█ ▇▍▌▇▊▋▍ ▄▄▆▍/▇▄▍▋ ▋▄▉▆▋ ▋▊█▉▇▊▉
* ▄▌▉▊▍ ▄█▄▌█▉▌ ▍▅ ▄▊▉▉ ▋▉ ▅▇, █▄ ▋▍▆▊ ▋█▇'▄ ▍▆ ▍▅▉ ▊▄ ▇▊▍▌ (▇█ ▋▆▉▊▍▍ ▄▉▅▇▊ ▇▉▌▍▋▋▇█ ▅▉▌▋▆ ▌▅▌ ▉█▍▆▉▅ ▉▄▊▊▍▋!)
▉▆█▌▍▆ ▌▄▋▅▉▌▉█▆▍▌ ▉▇▌▋ ▄▉▅▅-▅▅▆▄ ▌▆▅▋▉
! ▌▌▄▄▋ ▍▄ ▅▄▇▌▄▊▅▌▉▅▅▇▅ ▍█▋▆ ▊▌▅▉▄▍▌ █ ▅▄▉█
▍▌▋▇▋▊▄▅ ▇▅█▍ ▇█▊▄▌ ▉▉█▄ ▋▇▍▌ █▅▅
▉█▍ ▊▉█▊▇▇▍▇.▇█▊▍▉▇▅▆▉▆▌▊▉█▅█▅▉▋▉/▇▉▌▊▍▅▌█▌▌▇▋▌▆▆▄▇▌▋
▊▊▆▉ ▍▋▋▇▆█ ▄█▌▉█▄ ▋▉ ▄▄▇▉▋▇▊▍ ▄▋▇▅▅▄▇ ▋▅▌▄▍▍▌
▅▌▊ ▍▌▇▉▅█▅██ ▆▋▇▅▍▍▍▍▊▄▄ ▄▇▍▅▄█
▉▄▌▊▅▌▉▌ ▋▉▇ █▍▇-▅▊▊▌▉ █▄▌▅▄▍▆▅▌ ▉▊▌▆█ ▊▌▅ ▊▋▄▍▌ ▆▆█▉▉▊ ▊▌█▊▅▊▉▇, ▋▌▌▊▌ ▋▋▇▄▊▅▍▆█/▄▄▍▋-▊▊▌▊▋█#█▊█▄
▅▄▊'▉ ▍▇▅ ▆▋▄▅▅▅▍▆ ▋█▉ ▇▆▋▇▊█▍▍▉ ▅▅ ▇▆▆▆▊▅▄ ▍▉ ▄▍▆ ▋▆▌ ▉██▍█▍ ▍ ▌▆▆▆▋▇▆▉ ▍▋▄▅█▌▌ ▍█ ▋▅▌▍, ▉█▍▍▅ ▌▌▉█▊▊▅█▇/▄▄█▇-▋▊▍▄▅▆#▉▌▍▊
▉▄▅▆▅▄ ▇▋▆▆▊/██▄█▅ ▇▄▄▉▌▌▄▇█ ▅▍▉▆▋█▇▌▅▄ ██ █▍▇▄▆▋▅▋▆▅▍
▉▄▌█▌ █▌▊ ▄▋▋▄▅: ▋▉▉▌ ▇▊▇ ▍▄▊▍▅ ▊▉▊ ▄▌▊▆▍, ▄▍▅▌ ▍██▇▇█▊▊ ▌▆▆▋▆▇█▊▌
▍▉█ ▍▇▅▍▅▉▅▅▉▄ ▄▌▇▋▍▌▅▄▉▊ (#▍▆▆█)
▆▍▌▉▅▊▅▄▇▋.▌▉▇▉▅▌▆ ▉▅ ▌ ▅▇▇█▇ !!!!!!
▊█▋█▍ ▉▋▄▋▊▆▋▉▄▍▌▄█▊▌▇ █▊▍ ▋▇█▄█▆ ▍▉▇▆▉▅▇▊█ ▅▅▉▊▍▌▄▊
█▆▍▅ ▌▋▊▍ ▅▋▌▊ ▊▅▊▊█ ▋▋▇▇█▋ ▉▇▄█▋▌▌▋▄▊ ▊▍▌▉ ▅▄▋▋▆ ██▉▄▋▄█▌.▆▅▄▊▆▍██▋▋▇▌▅▆▄, ▋▍▍▆▋ ▅▆▊▄▊▅ ▄▇▍▇▇ █▆▍▊ ▉▄▍▇ ▍█▄▇▆█▌▄
▅▇▋ ▄▌▌▊ ▋▍▉▄▄ ▄▍▅███▍▉ ▅▊▉▋▄▉ ▆▇▄ ▍█▉▌▅ ▍▍▆▇█▉▊ ▅▊▄▍▍▆, ▄▆▊▌▋ ▉▆▌█▌▄ ▄▆▉▇▋ ▄▄█ ▆▍ ▍▅ ▅▅▍▇▍▍
▍█▌▄▇ ▆▄▇▄▊▄▉▆█ ▅▆▆▆▄▆█
▊▍█ _▋▇▄▅█▋▌ ▅▇▌█▇▆ ▍▍▇▆▇ ▍██▋▋ █▄▍▌▋▇▋▉ ▇▉ ▇▇▄▅ ▍▌▇ ▌▌▆-▇▄▋▄ ▇▇▊▍▄ ▊▉▄▄ ▉▊▅▉▌▅
▌▉▇▅ ▌▌▉▍ ▆▇.▉▊▉▉█▇█ ▆▍▉▇▊▋█ ▊▄▇▇██▌ ▇█▋▄ ▊▍▌▍▅▋█ ▇▊▉▄▍█▉▅ ▅▌▉▆ ▋▆ ▌▍▉ ▌▉▆█▋█ (▅▅▌▉▌ ▇▊▆▋▌▍▆▄▌/▊▄▌▌-▆▇▍▋▅▍#▋▋▄▇)
▅▊▉▍ ▊▆█▌▄▍ ▊▋▉ ▊▌ █▌'▍▌ ▄▌▋▊▇▆██ ▇▍▌▋ ▄▇▆▄▅▇▍▊ ▌█▋▄ ▍▅█▋ ▇▍▋▅▌▍▄ ██▍▅▋▅▋ ▄▌ ▅▅▉█▇▉ - ▊▅▌▇▄ ▉▅▋▋▆▌▋▅▇ ▆▋▍▅▆▋ ▊▅▆ ▆█▄▇▌▌▋▊
▍█▋▆▉▇ █▍▉▆▋▆▌▍ █▊▋ ▊█▆█ ▆▉▍▉▍▉▌ ▍▅▇▌▄▊▌▆
▇▄▋██ ▆▋█▍ ▍▇▇▍█▊▆▇█▅ ▋▌▌▋▉▋ ▉▍▇▍▌▅▆▄ ▅▆▊ ▌▄▋▅█▄▍▊▊. ▆▍█▉▅▉ ▉█▄ ▇▉ ▇▅▊▌▆▇▉▄▋ ▄▆ ▋▆▍▇ ▇▊▍▆ ▌▌▄▍▉▊ █▌▌▇ ▉▌▄▌ ▊▇▊▇▍▍▄█▍▍▊▍. ▅▆▉ ▋ ▅▍█ ▋▉▊▆▆ ▅▆▋▉ ▋▋▅▅▆▍▉ ▊▊▍ ▋▄ ▅▇▍▅▆▊ ▉▆▇▄ ▅▊█ ▆▆▄▄▇▆▋▆▉▋▅, ▋█▊▅ ▊▌ ▅▆ ▅▇▊▅▋▅▍ ▉▊█▆▊▉▉▋▄▋.
▉▊▆▋ ▄▋▊▉▋▇▌▄▇▉.█▍▍█▄▊▅ ▇▍▇ ▊▄▋▆▅▊▆ ▋ ▉█▅▅▌█▅
▊▍▉▍ ▋▅▉▆.▍▋▋▉▄▊█ ▉ ▆▋▌▅▄▄█
█▅▅▅█▍█▆▄▉.▇█▊▉▇▅▆▅▋▌█▇▄▅▄▄▌ ▌█▄▇▅ ▉ ▉▅▋▉▄▄▇
▉▉▋ ▄▋▆▌▄▌▉.▊▍▆▆▍▄▄▄▅█▅
▉▌▍ ▅▅▌▅█▉▉ ▆▅ █▆▍▊▄▇▋▆
▌▄▌█▇▌▇▉▄ ▋█▌▉ ▆▍▊▋▌▉▇. ▊▊▆▍▇▌▋▍▄█▄▋▇▆▆▉▍▉▌▇▉ ▊▇▌▄▇▉▆ ▇▆ ▌▅▋▇▊ ▆▋▌▄▉ ▅▇ ▉▉ ▊▋█▇▍█▊. ▅▄▆▌▄ ▆█▌▄▆ ▉▊▋▊▌▍ ▄▊ ▄▌▅▉ ▆ ▅▆▄▌. ▅▇▌▅▇▍▉▊++
▅█▉'▉ ▍▇▍ ▄▆ ▉▋▌▍▌▌█ ▋▌▊▉ ▊▋▄▉▍▇▆▉ ▅▄ ▅▊▅▍▋ ██▄▅▉▅▉▄
▉█▆▌▇█ ██▉▇▄ ▄▇▇▍ ▊▉▄▇▍▅█ ▄▊▄▅▇▍▋ ▋▅ ▇▄▋█▄▋▉▌
▅▊▊▊▇▄ ▌▇▄▉█▉█▋ ▊▌▅█ ▉▌▆▄█▋▋▅
▊▍▊▍▌▌▄▅▆: ▆▉▋▊▊▅ ▋▇█▆▅ ▊▉█▍ ▇▊▅▊▊ ▄▅▍▌▅ ▇▌▋ ▅▊▉█▆
▉▇▇█▋://▍▊█▋▄.█▊▉▄▉▋▉▆▋.▇▉▆/▄▊▌█/▆▇▄▅▌▋▋█/▄▄▉▌-▌▅▄_▅▆▅█▆▊▇▇▄▉.█▌▄
▋▆▇▋▉://▆▋▇█▉.▆▋▌▅▍█▅▊▇.▉▇▇/▍▍▅▊/▌▌▍▄▊█▍▊/▊▌▋▌-▇▉█_▋▋▊▍▋▇▉▇▌▌.▌▄▆
▋▇▆ █▉▌ █▌▇▇▍▋▋▆█ ▅▋▆▇▋▄▊▊ ▆▍█▆▆▉ ▄▅▋▇▊▌▇
▉▇▇ ▉▅ ▉▇▇▋ ▅▍▄▅▅▅▊▉▇▅▄▋▍█▅▉▆▆ ▆▆▆█/▄▇▄▊▇▌▌▊ █▆▆▉▌█▆▅ █ ▍█▅ ▍█▌▊ ▉▌▆▍▌▇▅▅█
▊▌▋ ▄▉▌▋▋ ▋▊▋█▇▊▊ ▇▄ ▌▇▋▄▉▉▉ █▄▉▊▌▋ ▅▅▄▅▅▉
▉▄▍▄▋ █▆▌▄▅▅▆: ▉▉▌█▋█▇▅▆▅▊ █▆▄▌ ▍▉▊▇▆ █▄▌▍▍▆▍▊
▆▋▉ ▆▌▆▅▇▍▊▇▉▋▍▇▇██.▌▊▉▆▆▇▋▍▌()
█▊▌ ▉▉█▋▌█▉▇▉▄▍▉▄▌▆ ▌██▋█▉█, █▇▄▄█▅█▍ █▊▊ ▅▅▌
▅▄▄▌ ▌▅▌▋▊▄▆█ ▅▍█▇▋▅▇▅▄ ▄▊▌▄█▌▉▊▇▌, ▍▋▇▊-█▇▍▊▇ ▉▋ ▋▍▌▄▄█▉
▄▌█▌ ▄▋▄█▆▌█▆▆▅▆▆▆▋▌▇▄▍▋▉▍▉▇▇ ▊▄▍▇▇▄ ▉█▇▅▊▉▊
▍▅▅▆▅▆▉ █▋ ▉▆▅▅ ▉▅▅▍▌██ ▊▋ ▅▌▄▌▆▉▋▌▅▄ ▆▊▄▌▊ ▆▋▆▋▌▍ ▉▊▆▆▉█▇
█▆▆ ▅▍▆▄▇▆▇▄▄▊▌█▆▍▉ █▇█ ▋▅▆▊▌▌▉▅▋▊▋▅██▌.▌▅▋▋▋▆▍█▆▋▅▄▅█▆
▊▄▅ ▌▋▄▍█▅██ ▅█▋▇▍ ▆█▉▇▋▌ ▊▉▅▋▋▄▍, ▊▋ █ ▋▉▍▊▄▉ ▋▌▌▊▉▇▆▅▉▋▌ ▌▍▊▊▄█ ▌▇▉▊
▍▇▌▉▉ ▊▄█▍▋▊▌▋ "▋▋█▅▆▇▇ ▄▆▄▅ ▄▊▅▌▊▄" ▄▆█▌▋█▍ ▅▄▊▆ ▊▉▍▆ ▍▆▍▌▉▇ ▊▄▆▊▋▇ ▋█ ▌▉▆▋▍▊▇ █▌▍▆▉ ▄▅▊▄█▊
▄▍▅█▆ ▍▅▊█▆▆ '▆▍▅▆▊▅' ▅▄▌▊ ▆▌▉▇▍▊▄-▇█▇▅▆▄▆-▌▇█▇▆▊▆▅▅
Remove box from navmesh debug draw
Fix some NREs when accessing colliders from navmesh components
Ensure navmesh area stays in sync when linked collider changes
Cleanup NavMeshArea Component
Use custom functions instead of GJK to bake physics shapes into the navmesh
Baking a physics shape now takes sub 100μs in most scenarios.
Optimize by caching GJK simplexes when rasterizing obstacles
Experiment with arbitrary physics shapes as navmesh obstacles
Performance is not good, needs more optimization to be viable.
https://files.facepunch.com/lolleko/1b2611b1/sbox-dev_i7IaHMmjKv.mp4
Ignore triggers in NavMesh Generation
Fix issues with navmesh generation API
Should also fix tests
Fix navmesh debug draw disappearing at certain heights
Allow NavMesh areas to have arbitrary transforms
Reduce debug draw ground offset
Rename Obstacle -> Area
In the future the defined Areas defined maybe used for other purposes beyond blocking/obstructing
Be very careful about when we load assemblies in LoadNetworkTables
Facepunch/sbox-issues#6984
Only warn once if Json serialization happens during a hotload
Facepunch/sbox-issues#6984
Expose BoneCollection / Bone to ActionGraph
Fixes Facepunch/sbox-issues#6878
Give each scene dock a unique name and fix load order so we maintain layout positions
Move window layout to project cookie, will fallback to importing from editor cookie for now
Lazy-initialize NavMesh GeneratorPool
Restore AssertNoGraphErrorsInScene test
Fixes #1709
Asset Browser: Show 'Open File Location' in context menu when searching too
Asset Browser: Disable flat/recursive toggle button when searching or in meta location
Hook up Package.Data
GameModal now correctly uses GameConfig from backend
Fix "no screenshots" being thin
After purchase, keep refreshing until we have the item
Indicate when you already own items
Fix NRE in NavMesh Dispose
Restore colliders on rigidbody disable if the collider is still active
Don't let collider dictate body type when there's a rigidbody, colliders could have a mix of statics so rigidbody should be the authority on this
Load Model.Plane
Add Graphics.DrawModelInstanced with count for procedural instancing, document other instanced methods
Add DrawModelInstanced methods to CommandList
Add CommandList.Set for ComputeBuffer<T>
Update default JSON ignore condition to use JsonIgnoreCondition.Never
Resolves Facepunch/sbox-issues#6995,
Resolves Facepunch/sbox-issues#6953,
Resolves Facepunch/sbox-issues#6349
Add Graphics.ResourceBarrierTransition supports transitioning Textures and ComputeBuffers states currently, e.g if you wanted to signal a resource should be readable in fragment after a compute write to it
Fixed .config files not being added to appropriate string table for clients to receive changes
Scene collision events (#1707)
An interface to listen for all collision events that happen during a physics step
Fixed NRE when trying to delete non-asset files, resolves Facepunch/sbox-issues#7002
Support drag data for GameObjectControlWidget, resolves Facepunch/sbox-issues#6998
https://files.facepunch.com/tony/1b2311b1/sbox-dev_xLjcpe9xed.mp4
Organisation -> Organization where necessary
Resolves Facepunch/sbox-issues#6822
Delete view_shared, move CViewSetup to camerarenderer and start removing unused junk from it
Add CameraComponent.CustomSize to override aspect ratio. When rendering to a render target, sometimes you want the aspect of the screen and not the texture
Add CameraComponent.ProjectionMatrix
Add CameraComponent.CalculateObliqueMatrix to clip projection with a worldspace clip-plane
Remove SCENEOBJECTTYPEFLAG_IS_PROCEDURAL - it does nothing
Envmap feathering defaults to much tighter
SkyIndirectLighting param in hammer env_sky since it seems it never was there
Bail Model.Load early with error model for null or whitespace filename
Revert "Add recast/detour tile cache"
This reverts commit 0b2e398df82b304b23f7ddd2485b943ba1fe20ab.
We will use a custom caching solution instead.
Merge branch 'master' into navmesh-dynamic-obstacles
Fix test
Revert "Add recast/detour tile cache"
This reverts commit 0b2e398df82b304b23f7ddd2485b943ba1fe20ab.
We will use a custom caching solution instead.
Cleanup obstacle components
Integrate heightfield building into the tile cache
Refactor NavMesh class structure
Improve navmesh initialization
Remove dead code
Fix tiny memory leak
Rename CNavMeshCachedData -> CNavMeshHeightFieldData
More resilient native memory pooling
Make navmesh generator pools static
Pool memory for native tile heightfields
Revert marking the entire navmesh as unwarkable
Fix NRE in NavMesh Dispose
Optimize culling in navmesh debug draw