Skip to content

Copy default action set to standalone VR projects.#10433

Closed
Loafiat wants to merge 926 commits intoFacepunch:masterfrom
Loafiat:master
Closed

Copy default action set to standalone VR projects.#10433
Loafiat wants to merge 926 commits intoFacepunch:masterfrom
Loafiat:master

Conversation

@Loafiat
Copy link
Copy Markdown

@Loafiat Loafiat commented Apr 9, 2026

Pull Request

Thanks for contributing to s&box ❤️
Please fill out the sections below to help us review your change efficiently.


Summary

Fixes issue where the default action set wouldn't be copied over to exported standalone projects.

Motivation & Context

Currently when exporting a standalone VR project in S&box the project fails to open in VR, giving the error: "Failed to attach ActionSet to Session". This PR fixes this by including the actionsets in the export if the project supports VR.

Implementation Details

I was debating converting CoreWhitelist to an IEnumerator or adding an empty string which would be set to the right path if your project is in VR mode, but ended up just using Linq to append the path to the array when GetCoreFiles is executed.

Screenshots / Videos (if applicable)

Checklist

  • Code follows existing style and conventions
  • No unnecessary formatting or unrelated changes
  • Public APIs are documented (if applicable)
  • Unit tests added where applicable and all passing
  • I’m okay with this PR being rejected or requested to change 🙂

lolleko and others added 30 commits March 5, 2026 08:24
ValueTypes where unclearly put on the heap when assigning `object originalValue` during cloning.
Those types now use a fast path that remains boo and allocation free by using compiled expression trees
* Avoid callbackbatch aciton allocation and closure

Store the CommonCallback and GameObject/Comonent Instance instead of an action

* Scene push uses struct instead of DisposeAction

Avoids action allocation
We call objectIndex Add/Remove a lot and the t.GetInterfaces allocates an array each time.
We can avoid this using a simple ReflectionCache.
I don't think the count is very useful and it costs us a string interpolation/allocation
* Add exactFullName to TypeLibrary.GetType
…#4239)

* Fix terrain dissapearing after changing subdivision factor
* make sure we clamp subdivision between 1 and 4
* Can query FileIds, Author

* Store the published file id so we can open an existing workshop item instead of publishing a new one each time, hook up OnComplete action while we're here
* Calculate file sizes and sha256 in parallel, since this is I/O bound

* Batch all files and use a single rclone call
* [MakeDirty] allocates a Action delegate even if it's not used.

* Use field keyword instead of manual backing fields

* Add fast path for render object cloning, avoids expensive round trip through JsonPopulator
Avoids list allocation for GameObjects that have no components
Avoid RenderGroupKey allocations

This would allocate a lot easily 60Mb/s.
Instead of a dedicated struct we now compute a 64bit hash and use that for render grouping.

Remove per frame HashSet, List and LINQ allocations
* More accurate and less allocation heavy version of Task.Delay

- Shoot a single task delay for longer intervals
- Only use expensive polling for the last sub threshold

* Avoid ExecutingJob allocations when not tracking jobs
* Start moving SSR to bindless

* Classify pass stub

* Separable bilateral upscale, 0.3ms > 0.08ms, not happy with it still

* start classify and intersect indirect

* Commandlist support for UAV barriers and clearing a texture and gpubuffer

* Simplify this, move classify to it's own shader

* All indirect

* ResourceState.IndirectArgument missing from ResourceStateToVulkanFlags switch

* Fix indirect, all works

* classify doesnt get skybox

* Add Clear method to CommandList for clearing render target colors

* bilateral upscale indirect too

* Cleanup

* Simplify bilateral upscale, With RADIUS=1, separable saves only 3 taps (6 vs 9), but costs 3 barriers + shared memory + atomics — the synchronization overhead far exceeds 3 extra texture loads of doing it with a normal X Y loop

* Dotnet format, increase roughness threshold (we can afford it 😘 ) and dont need to discard these buffers on disable

* compile shaders

* this shouldnt be a property

* Add FillGPUBuffer method for efficient buffer filling using native GPU commands
…4200)

CollisionEventSystem is quite alloc heavy especially the action wiring causes 10+ heap allocations per collider.
Collect pending acks in List rather than spamming async tasks.
Process List in Tick.
So we don't allocate when a GameObejct doesn't have any tags
Fast & alloc free pass for GameTags.SetFrom
solwllms and others added 27 commits April 7, 2026 16:21
* Fix uninteractable age, height sliders
* Fix scrolling for item list
* Consistent order for item groups
* Centre UI for ultrawides
* Stop MenuUtility.RunTask invoking everything twice in editor
* Fix icon, label alignment
…#4488)

Co-authored-by: RumBugen <vladislavwanner@gmail.com>
Make sure they are not negative
* Log warning isntead of asserting when a prefab file is missing

* Prefab Instances with missing prefab files now show up as broken in the hierarchy

Their data is retained similar to missing components so if the file gets restored the instance will recreate properly

https://files.facepunch.com/lolleko/2026/April/07_15-50-CarelessIraniangroundjay.png
* Loads now cancel correctly on disconnect/close across all entry points
* Unified some loading flow and UI logic
* Fixed errors when cancelling mid-load
…te (Facepunch#4489)

* Raise GameInstance load exceptions in editor instead of silently continuing with a shutdown instance
* Key ResourceLoader watchers on AssemblyQualifiedName instead
* Init AssetTypeAttribute Name from TargetType name if it's null
* Common components

* Replace PackageCard with GameCard in content blocks, wrapped grid layout

* Move GameCard to New/ folder, use ThumbWide for all sizes

* Add `overflow: clip` and `overflow: clip-whole` modes

* New game hub layout, hero

* Layout + hero tweaks

* Hero tweaks

* Clean up content blocks, make it so that game cards don't clip on hover

* Dynamic mask

* Don't bother building CL for panels outside scroll view (400% perf benefit in main game hub)

* Disable 3D bg when not visible (50% performance benefit)

* Cards take their sizes from the image within them

* Stash tweaks before big refactor

* Initial hero carousel

* Better carousel transitions

* Try and reduce allocs inside CL combos

* `background-playback-state` CSS property (`paused` or `running`, applies to video `background-image`)

* Make out-of-focus carousel elements more obvious (no playing video, darkened)

* New branding

* Tweak navbar

* Carousel shows full thumb if not visible, helps with visual noise

* Accurate vote percentage 🙈

* Fix some carousel jankiness

* Navbar feels less disjointed

* Rebake menu lighting & envmaps

* Finalize

https://files.facepunch.com/alexguthrie/1b0311b1/bZKOQIQD0o.jpg

* Trim down visual noise

https://files.facepunch.com/alexguthrie/1b0311b1/oJh4qqaPsC.jpg

* Gradient

https://files.facepunch.com/alexguthrie/1b0511b1/uCyZyolkXE.jpg

* Format

* .heading labels use heading vars

* Carousel slower time between auto switch

* No play button on GameCard

* Content blocks full width

* Adjust GameCard sizes

* Content block header padding

* Add MenuHelpers.PlayGame, GameModal uses it, make hero "Play Now" button use it

---------

Co-authored-by: Matt Stevens <matt@mattstevens.co.uk>
Fix transform update regression from 7b853ce

Rotation.AlmostEqual default threshold was too loose (0.0001 dot-product ~ 1.62° angular tolerance), causing SetLocalTransform to silently drop small transform updates.

- Rotation.AlmostEqual: default delta 0.0001 -> 0.0000001 (~0.05°), use MathF.Abs(Dot) to handle antipodal quaternions (q === -q)
- Transform.AlmostEqual: use Rotation's own default instead of passing the Position/Scale delta to a dot-product metric
Add `DeferGeneration` property to skip navmesh generation during scene load, allowing tiles to be generated and unloaded on demand at runtime.

New public API:
- `NavMesh.DeferGeneration` - skip tile generation on load
- `NavMesh.RequestTileGeneration`/`RequestTilesGeneration` - fire-and-forget via cache loop
- `NavMesh.UnloadTile`/`UnloadTiles` - remove tiles from the navmesh
* preload resolutions on init
@Loafiat
Copy link
Copy Markdown
Author

Loafiat commented Apr 10, 2026

Not sure why formatting failed, I checked through and it seems to be all good.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.