1,495 Commits over 1,157 Days - 0.05cph!
Fix NRE on unsized Image panel with no texture
<img> panel will now default size to their Texture size
When rendering an Image panel mimick background-size: cover instead of contain - fix it looking shit at edges
Add Open Visual Studio & Regenerate Solution options to editor window
Fix InputBuilder From/To UserCmd wrongly using static instance which meant you couldn't manipulate it properly on bots
Remove long obsolete InputBuilder.CursorAim/CursorOrigin ( Use InputBuilder.Cursor instead )
Update Steamworks SDK 1.53
Resolve deprecated SteamNetworkingSockets usage
Add ISteamInput interface to managed and callback forwarders
Controller API using Steam Input; glyph textures, multiple controller support, analog states, etc.
Use C# Controller API in InputBuilder to replicate default Source behaviour with Steam Input & disable XInput devices in C++ engine
Ignore uncompiled texture .jpg when sending files to client
Parse CSS floats / ints with InvariantCulture in generated code too, should fix remaining issues with odd regional setups
Add ISteamInput interface from Facepunch.Steamworks
Initialize Steam Input from managed
Add dispatch events to SteamInput for device callbacks dis/connected, these are always called for already connected controllers
Update Steamworks 1.53 for Steam Input improvements including Steam Deck support
Update networksystem to resolve removal of deprecated funcs / renaming in Steamworks 1.58
SteamInput.EnableDeviceCallbacks() - should be giving us controller connected / disconnected events but isn't, steamworks bug?
Basic action manifest with menu & ingame controls sets, in future we could provide a lot more versatile sets for different genres
Start exposing a Controller class in Sandbox.Game, let's make them easily grabbable so we can do UI or BuildInput with them directly
Chuck up some debug panels in the input settings menu for each connected controller to debug features
Async steam input glyph texture loader
Generalize Steam Input into a Controller API, abstract all actions into enums close to our pre-existing IN_ actions
Quick button prompt panel e.g `<ControllerActionHint ActionName="Jump">`, uses relevant user's bound controller glyphs.
Forward SteamInput callbacks to C# Steamworks properly
Poll action handles until they're non zero, workaround for a known bug where we shouldn't be needing to do this
Update IGA file to match enums and action manifest, add a basic PS4 controller manifest
Remove dead code
Manage controller connected with callbacks and add events for connected / disconnected, this should keep handles in place too on reconnects
Controller.TriggerVibration: accept normalized floats instead of 0 <-> ushort.MaxValue and support Xbox trigger impusle rumble.
Disable XInput init / polling in inputsystem, handle it all in managed via Steam Input
Controller API Init/Poll in Sandbox.Client too
Iterate more on Controller API, replicate Down/Pressed/Up methods of InputBuilder, document more shit
Create controller input in InputBuilder from managed Controller API ( maybe this should be in base instead so the user can override it for whatever reason? )
Initial work on UI navigation with controller
Use InvariantCulture when parsing time in scss too
Fix initial fgd autogen needing config folder to exist
Remove dead code
Manage controller connected with callbacks and add events for connected / disconnected, this should keep handles in place too on reconnects
Controller.TriggerVibration: accept normalized floats instead of 0 <-> ushort.MaxValue and support Xbox trigger impusle rumble.
Forward SteamInput callbacks to C# Steamworks properly
Poll action handles until they're non zero, workaround for a known bug where we shouldn't be needing to do this
Update IGA file to match enums and action manifest, add a basic PS4 controller manifest
Add ISteamInput interface from Facepunch.Steamworks
Initialize Steam Input from managed
Add dispatch events to SteamInput for device callbacks dis/connected, these are always called for already connected controllers
Update Steamworks 1.53 for Steam Input improvements including Steam Deck support
Update networksystem to resolve removal of deprecated funcs / renaming in Steamworks 1.58
SteamInput.EnableDeviceCallbacks() - should be giving us controller connected / disconnected events but isn't, steamworks bug?
Basic action manifest with menu & ingame controls sets, in future we could provide a lot more versatile sets for different genres
Start exposing a Controller class in Sandbox.Game, let's make them easily grabbable so we can do UI or BuildInput with them directly
Chuck up some debug panels in the input settings menu for each connected controller to debug features
Async steam input glyph texture loader
Generalize Steam Input into a Controller API, abstract all actions into enums close to our pre-existing IN_ actions
Quick button prompt panel e.g `<ControllerActionHint ActionName="Jump">`, uses relevant user's bound controller glyphs.
If we surpass MAX_ACTUAL_RENDERTARGETS don't try to allocate more, fixes buffer overflow crashes
(cherry picked from commit 124a7d351686733fe63d829c49ee65f18aec8359)
Double MAX_ACTUAL_RENDERTARGETS to 256, with people making their own tools 128 would easily get hit
(cherry picked from commit 08628fb0f855688c84909b976a2d3b3c3cd678da)
Backport engine fix for debug scratch rendertargets running out
Support loading font files with SemiLight (350) or ExtraBlack (950) names
Fix NRE in stylesheet parser if an invalid file is requested
Parse floats properly in stylesheets with InvariantCulture
Add WaterSceneObject's PlanarReflection as a scene object child properly
Support loading font files with SemiLight (350) or ExtraBlack (950) names
Add ISteamInput interface from Facepunch.Steamworks
Initialize Steam Input from managed
Add dispatch events to SteamInput for device callbacks dis/connected, these are always called for already connected controllers
Update Steamworks 1.53 for Steam Input improvements including Steam Deck support
Update networksystem to resolve removal of deprecated funcs / renaming in Steamworks 1.58
SteamInput.EnableDeviceCallbacks() - should be giving us controller connected / disconnected events but isn't, steamworks bug?
Basic action manifest with menu & ingame controls sets, in future we could provide a lot more versatile sets for different genres
Start exposing a Controller class in Sandbox.Game, let's make them easily grabbable so we can do UI or BuildInput with them directly
Chuck up some debug panels in the input settings menu for each connected controller to debug features
▊▇▉ ▇▅ #▆▊▉▅▇ ▋▅█▅▄▇ ▄▉ ▅▆ ▌▆▉▌█▌▉▅▍ ▆▇▋▋▅▋█ ▊▍▋▌█▇▌ ▍▍▊▄▋ █▊▇▉, ▊▆▉ ▇▌▊▌ ▇▊█▊ ▍▍ ▍ ▇▇▇ ▊▋▅▋▇ ▋█▇▉▍▋ ▋▌▊▆▍▌▅█▉
▆▍▇ ▍▉▅▅▍▇▍▄▋▊ ▌▋▄▊▇▄ ▅▊▊▍▆ ▊▋ ▄_▍▅▌▍█▄▅▅▋▇::▇▄▊▉▉▉█, ▇▇▋▅▊ ▉▋▍▇▇ ▋▉ ▄▄▇▌▅▅▌▉▍ ▉▊█▊/▄▊▆▆█▊ ▅▅█▍ ▆▍▌▇▊▄▍ ▅▋▇▊▋▆▍ ▆▉▇▊▄▉
▌▋▇█▊▌▉▋ ▍▋▊ █▊▅▄▌▆▌▅█ ▍▇ ▌ ▄▄▆█▇▄▌▆█▄▍▄▉▊█ ▊▌▉▆▆▄▋▅ ▄▅▌▇ ▇▉█ ▉▉█▌▆█▇█ ▅▊ ▄█▆▇▋▄█, ▆▋▆▇▍▋▄▌ ▇▌▅▆█▊█▋▍ ██▊▋█▄▆ █▇▊▅▊▉
▋▇▄█▅▉▇ ▅▊▋▇▍▌▉▆ ▅▋▄▊▊▆▍▇█▋ ▋▋ ▍▍▉▄▌▆▋▅, ▌▆▄█▌ █▌▌ ▊▆▋▉█▄▆▉▉▉▍ ▆▌ ▄▊▊ ▇▋▇▅ ▄▋█▋ ▄▇▇▍▋ ▉▋▆█▄▋▅▍ ▆▇ ▍▊▄ █▇▆▉▆▋
▉▇▄▄ ▄▊▋▌▋▍█▄▊ ▇▌ ▄ ▌▊▌▋▇█▋▅ ██ █▄▆▅▉▉▅▊▇▇█ ▊▅▋▇▌▇ ▍ ▋▆▆▆▅ ██ ▉▊▉ █▅▊ ▍▊▊▅▋▊▊█ ▍▍ ▄▄▉▊▆▉▄█▉ ▅▋█ ▆▆▅▍▋▋▍ ▍▊▅▆▋. ▉▄▉▉▊▅▋█ ▌▆▅▆▊▌ ▆▄▉▄ ▍▍▌▉ ▇█▄ ▋▍▌▉▍▇▍ ▌▋ ▅▅▄ ▉▋▇▇ ▆▉▄▄▍ ▇▍█▌▇▉▆ = ▆▌▍▋▄▉▌
Remove redundant inherited member on MainMenuPanel
Don't render panels on invisible overlay panels 🤦 optimize some other code paths too
OpenVR update 1.10.20 -> 1.16.8, resolve deprecated crap
Interopgen OpenVR's IVROverlay to managed engine
Add VROverlayPanel - these are panels rendered in local VR space over the world, input is automatically simulated
VR.Init() in MenuDll, set VR.Enabled in Init only since it never changes
When in VR create a main menu with an VROverlayPanel, make this wide and 4k so it doesn't look ass
Basic interop of IVRInput to managed, get action origins & add VROverlay.SetTransformRelative( VRTrackedDevice )
Add console commands from Sandbox.Menu dll making menu_reload work again
Add missing internals to a couple OpenVR structs
Add float.MeterToInch / float.InchToMeter extension methods
Make main menu VR overlay properly show when ingame
Make the loading screen show in VR, add VROverlay.SortOrder, add RootPanel.IsVR set when a RootPanel is owned by a VROverlay
If VR is enabled make the GameList.ControlTag default to VR
Add 4k & 8k render target sizes to be used as scratch ( dx11 max texture size = 16k )
Use a copy of the current viewport instead of framebuffer when rendering panel backdrop filters
Adjust main menu vr size / scaling to a more square aspect ratio and scale it bigger so it's not difficult to read
Adjust main menu vr size / scaling to a more square aspect ratio and scale it bigger so it's not difficult to read
If VR is enabled make the GameList.ControlTag default to VR
Add 4k & 8k render target sizes to be used as scratch ( dx11 max texture size = 16k )
Use a copy of the current viewport instead of framebuffer when rendering panel backdrop filters
Add console commands from Sandbox.Menu dll making menu_reload work again
Add missing internals to a couple OpenVR structs
Add float.MeterToInch / float.InchToMeter extension methods
Make main menu VR overlay properly show when ingame
Make the loading screen show in VR, add VROverlay.SortOrder, add RootPanel.IsVR set when a RootPanel is owned by a VROverlay
OpenVR update 1.10.20 -> 1.16.8, resolve deprecated crap
Interopgen OpenVR's IVROverlay to managed engine
Add VROverlayPanel - these are panels rendered in local VR space over the world, input is automatically simulated
VR.Init() in MenuDll, set VR.Enabled in Init only since it never changes
When in VR create a main menu with an VROverlayPanel, make this wide and 4k so it doesn't look ass
Basic interop of IVRInput to managed, get action origins & add VROverlay.SetTransformRelative( VRTrackedDevice )
OpenVR update 1.10.20 -> 1.16.8, resolve deprecated crap
Add internal managed code bindings for OpenVR interfaces to Sandbox.Engine
VROverlay class in managed, do basic render & input for main menu.
These transparently handle the differing coordinate systems from
Source to OpenVR.
Add VROverlayPanel<T> where T : RootPanel, acts like a normal VROverlay but automatically renders UI to it
Render VR menu from menu addon using VROverlayPanel, render in 4K so it doesn't look shit
Store VROverlays with WeakRef, sort out IDisposable to delete VROverlayPanel.RootPanel
VROverlay input system for UI using input data from OpenVR
Handle scroll events on vr overlays, turn it into InputData for UI
Custom OpenVR interop bindings, grab the OpenVR interfaces from engine
Lets us cut out loads of bullshit making things way simpler and neater.
Restore viewport after rendering in VROverlayPanel
Simulate VR overlay mouse position properly from scale
Make engine construct OpenVR texture handles instead since they're graphics API specific
Update MouseScale properly on vr panel overlays
Update vr overlay panel render texture when panel bounds change
Hide vr overlays if vr dashboard is open
Document on when you should use an overlay vs a worldpanel
Dispose of all vr overlays on game end that may not have been picked up by GC yet
Prevent redundant calls to OpenVR in property setters
Expose TriggerLaserMouseHapticVibration for VR overlays, add quick test case to pulse when hovering panels
tidy up, unfuck namespaces / class names / docs
Fix vr overlays crashing from wrong thread by using a device thread callback ( even though we were in a render thread anyway? )
Make VR overlays work in-game, hide them when the main menu overlay is showing
Fix interop issues from rebase/squash
Decide if VROverlayPanel does input from pointer-events
Allow absolute overlay transforms from seated or standing origins
Add relative overlay transforms from other overlays (they inherit visibility too)
Add Overlay.SetHudTransform( Transform ), set it relative to system.HeadsetView overlay view
Start exposing IVRInput to the managed engine, let us interact with actions internally ( shit like /user/hand/right )
Add relative overlays to tracked devices
misc mark shit as internal, fixes, tidy up
Network Client.IsBot so it works clientside
tidy up, unfuck namespaces / class names / docs
Fix vr overlays crashing from wrong thread by using a device thread callback ( even though we were in a render thread anyway? )
Make VR overlays work in-game, hide them when the main menu overlay is showing
Dispose of all vr overlays on game end that may not have been picked up by GC yet
Prevent redundant calls to OpenVR in property setters
Expose TriggerLaserMouseHapticVibration for VR overlays, add quick test case to pulse when hovering panels
Make engine construct OpenVR texture handles instead since they're graphics API specific
Update MouseScale properly on vr panel overlays
Update vr overlay panel render texture when panel bounds change
Hide vr overlays if vr dashboard is open
Document on when you should use an overlay vs a worldpanel
Use our own interop bindings for OpenVR, grab interface from engine
Refactor VROverlay, just set stuff once in property setters instead of in render thread
No need for a separate MainMenuPanel impl for VR, just make a VROverlayPanel of it
Restore viewport after rendering in VROverlayPanel
Simulate VR overlay mouse position properly from scale
Store VROverlays with WeakRef, sort out IDisposable to delete VROverlayPanel.RootPanel
VROverlay input system for UI using input data from OpenVR
Handle scroll events on vr overlays, turn it into InputData for UI
Make vr controllers scroll UI the right way and consume the delta after it's used
VR mainmenu, split out the lobby bar into a seperate offset overlay
VROverlay: handle key management automatically internally
Add VROverlayPanel<T> where T : RootPanel, acts like a normal VROverlay but automatically renders UI to it
Render VR menu from menu addon using VROverlayPanel, render in 4K so it doesn't look shit
OpenVR update 1.10.20 -> 1.16.8, resolve deprecated crap
Add internal managed code bindings for OpenVR interfaces to Sandbox.Engine
VROverlay class in managed with rendering props and render update loop
Basic VROverlay in Sandbox.Menu with a render target texture of the menu UI - probably a shit place for it but can be moved easily.
https://files.facepunch.com/matt/1b1811b1/vrmonitor_A6tO3ufJP9.png
Iterate on VROverlay API, make the coordinate system match engine, poll events and simulate input in the menu.
Fix Event.Hotload not calling on the server, fixes network tables not updating on hotload and probably other shit
Basic VROverlay in Sandbox.Menu with a render target texture of the menu UI - probably a shit place for it but can be moved easily.
https://files.facepunch.com/matt/1b1811b1/vrmonitor_A6tO3ufJP9.png
OpenVR update 1.10.20 -> 1.16.8, resolve deprecated crap
Add internal managed code bindings for OpenVR interfaces to Sandbox.Engine
VROverlay class in managed with rendering props and render update loop
Make sure we update our GameAssembly hash on initial load, fixes all networking errors
Make non public and inherited methods register for events again
fix build log discord post on long message commits
Ensure resident model resources get added to the manifest, fixes error models from missing resources in manifest.
This would specifically happen if a server starts a game / map a second time, the resources would remain resident,
so when a client does their initial join these models are missing from the manifest resulting in an error.
If the client had previously joined on the first time their resources would already be resident and not error.
Simplest way to do it, rather then change (and slow down) how the rest of the resource system works.
If a resource we try to preload returns an error handle, don't keep the handle alive. Map resources specifically will become valid and load automatically after this.
Change WorldInput API to instances to resolve issues and allow simultaneous inputs.
* Replace WorldInput.Update with instanced WorldInput fixing hovering and clicking issues as well as allowing simultaneous inputs.
* Resolved various issues with WorldPanel.RayToLocalPosition not using the right axis, being inverted and not scaling.
* Simulate double click and mousemove events for world inputs.
* Fix right clicks not working on WorldInput.
Fix missing game lobby settings
Fix world panel input by changing WorldInput.Update to [Event.WorldInput.Build] called from the input system.
WorldPanel.RayToLocalPosition: fix wrong local position being used for inside checks
Simulate right (and middle) mouse button properly in world panel input.
Iterate on WorldInput, allow multiple simulated inputs at the same time by migrating state to games
Fix inverted x pos and lack of world scale awareness in WorldPanel ray to local code
Use WeakReferences of WorldInputs to iterate, gives addon state full ownership and lets GC work nicely.
Clear WorldInput reference list on LoopEvent.Init/Shutdown
Expose and doc more on WorldInput public class; UseMouseInput allows nice usage with Input.Cursor rays
Simulate ondoubleclick & onmousemove events, add WorldInput.Enabled for toggling easily, tidy and refactor UISystem a bit fix potential NREs, small optimizations.
Allow RootPanel.Parent = null though
Throw if trying to set RootPanel.Parent
Fix a couple of NREs preventing -dedicated from working
Expose and doc more on WorldInput public class; UseMouseInput allows nice usage with Input.Cursor rays
Fix world panel input by changing WorldInput.Update to [Event.WorldInput.Build] called from the input system.
WorldPanel.RayToLocalPosition: fix wrong local position being used for inside checks
Simulate right (and middle) mouse button properly in world panel input.
Iterate on WorldInput, allow multiple simulated inputs at the same time by migrating state to games
Fix inverted x pos and lack of world scale awareness in WorldPanel ray to local code
Use WeakReferences of WorldInputs to iterate, gives addon state full ownership and lets GC work nicely.
Clear WorldInput reference list on LoopEvent.Init/Shutdown
SetProperty fallback on [Property] attributes, fixes map entities not working from having their properties not set