22,417 Commits over 1,614 Days - 0.58cph!
Add Steam.Ugc.NeedsLegalAgreement()
Check to see if we need to sign the workshop legal agreement after submission and pop up a dialog so it's impossible to miss (https://files.facepunch.com/tony/1b2911b1/sbox-dev_GHSJj87gZJ.png)
Ensure sceneundosnapshots are only disposed once
Disallow undo/redo while an editor action is underway (e.g. dragging something)
Plays relaxing sound if attempted.
Fixes sbox-issues/issues/7397
Add StatusBar to GenericPicker
SceneViewport dolly zoom is timescale independent, resolves Facepunch/sbox-issues#7454
AssetList displays hovered asset/directory path in window status bar for all display modes
Show un-normalised path as AssetList status text
Test if FindPathInScene() is null
Dispatch property edits while changing in inspector
Asset.ProjectSourceObject demoted back to internal
Add EditorUtility.GetAssetFromProject
Hook up ISceneEdited editor event again for movie maker
Hide Collider.Static for concave colliders, concave can only ever be static
Add extend edges operation https://files.facepunch.com/layla/1b2911b1/sbox-dev_0zyz9ksM3A.mp4
Remove primitive list from mesh component widget, has no real use and gets in the way
Remove final leftover debug log
Add ShaderGraph.IsSubgraph and add "Shader Sub-Graph" to the New Asset menu
Shader Sub-Graphs are now saved with the `.shdrfunc` file extension despite being the same asset (just so it can be registered with a different icon and filtered against in the Asset Browser to reduce user confusion)
Give .shader, .shdrgrph, and .shdrfunc assets different colours in the Asset Browser
Don't include BlendMode, ShadingModel or Domain in Subgraphs
Don't include "Material" ShaderNode in the Create Node/Palette menus of Subgraphs. Ensure proper extensions are used when opening the respective file types.
Add PlugInfo and make BaseNode.Inputs and BaseNode.Ouputs virtual.
Added FunctionResult ShaderNode, can only be created in Subgraphs and is created as the default node in newly created Subgraphs
Fix Shader Graph wanting to save/load as sub-graphs
Make sure [Title] attributes are still respected with PlugInfo
FunctionResult can now have a variable amount of inputs of varying types defined by a Dictionary. These are to be used as the outputs of the eventual sub-graph node
Use shader-specific types for FunctionResult Inputs
https://files.facepunch.com/CarsonKompon/2025/January/16_16-02-HumiliatingMorayeel.png
Rename "Inputs" -> "Outputs" on FunctionResult since that's technically more accurate
Instantly update the Result node when Outputs are modified
https://files.facepunch.com/CarsonKompon/2025/January/16_16-18-WarmIncatern.mp4
FunctionResult node will produce Errors preventing compilation
https://files.facepunch.com/CarsonKompon/2025/January/16_16-48-VictoriousBrownbutterfly.png
Fix NRE when attempting to save with unresolved errors
Guarantee IsSubgraph is set properly from the ShaderGraph window
Only Update FunctionResult.Inputs when necessary instead of when accessed.
Add PlugInfo.GetInput() and serialize PlugInfo.Name as the property name instead of display name
Fixed NRE when FunctionResult name is left null
Subgraphs no longer attempt to generate a .shader file, and will run error checks in the graph on Save
FunctionResult Inputs now maintain connections upon being regenerated
FunctionResult node generates inputs before creating connections to ensure connections are always deserialized correctly
PlugInfo correctly uses property name if no [Title] attribute
Refactor Result node into an abstract BaseResult class which Result and now FunctionResult can both inherit
You can now specify the preview type for certain Output variables on a Subgraph so changes can be reflected in the Preview window.
https://files.facepunch.com/CarsonKompon/2025/January/21_12-51-DifferentAmericanbulldog.mp4
Can change Preview Blend Mode/Shading Model/Domain in Subgraphs
Implemented all other preview types for FunctionResult
Fix GraphCompiler failing when using Unlit in Subgraphs
Subgraphs have Title, Description, Category, Icon and Add To Node Library properties. To be used for the created node
Added SubgraphNode which references a .shdrfunc. Results in graph errors if the references graph cannot be found or the references graph has errors
Dragging a .shdrfunc asset into a ShaderGraph will create a Subgraph Node referencing the dragged asset
Fix error when deserializing SubgraphNodes
SubgraphNode now uses the Title, Description, and Icon from the referenced Subgraph
SubgraphNode now generates inputs from any Parameter nodes in the subgraph, with default names for any without.
SubgraphNodes now generate output plugs from the FunctionResult node in the references Subgraph
https://files.facepunch.com/CarsonKompon/2025/January/21_16-23-CoordinatedEastsiberianlaika.png
Subgraph "Add To Node Library" adds the subgraph to the Create Node menu so they can be easily accessed.
https://files.facepunch.com/CarsonKompon/2025/January/21_16-51-HardVampirebat.mp4
Double Clicking a Subgraph Node instantly opens the Subgraph
Implemented the file history forward and back buttons when navigating through multiple ShaderGraphs in the same window
https://files.facepunch.com/CarsonKompon/2025/January/21_18-29-MidnightblueSandbarshark.mp4
Add [Hide] to TextureCoord.Title override
Minor MainWindow refactor so .shdrgrph files arent recognized as Sub-Graphs mistakenly
Prompt to save current graph (if dirty) when pressing the Forward/Back/Home buttons
Created ITextureParameterNode and started custom inpsector editor for when texture samplers are present
Custom Subgraph Nodes now detect sampled textures and allow you to change them as properties
Display Default Values on unconnected inputs of Subgraph Nodes
https://files.facepunch.com/CarsonKompon/2025/January/22_15-34-AnyAllensbigearedbat.png
Fix NodeResult shader compile error
Slight refactor to BaseNode.CreateEditor
Added IParameterNode.GetRangeMin and GetRangeMax. Parameter Nodes have "CanEditOnNode" instead of "IsAttribute" when in a subgraph. Determines whether or not an inline editor is created on the node
Use SubgraphNode.InputReferences when creating the DefaultEditor and drawing the default Plug Value
Ensure that inline DefaultEditors for subgraphs grab the UI.Step value for sliders
Make Color Editor works with SubgraphNodes
Remove debug log
Replace ParameterNode.CanEditOnNode with ParameterNode.IsRequiredInput since thats a bit more user-friendly
Don't include inline editor when UI.Type is set to Default
Default values of subgraphs are now editable via Properties if not a required input
Custom subgraph nodes now produce errors when required inputs are left without connections
https://files.facepunch.com/CarsonKompon/2025/January/23_11-38-RudeFattaileddunnart.png
Make sure errors are also displayed in Subgraphs
ShaderGraph GraphCompiler can now resolve the results of Subgraph nodes (only in a few cases at the moment)
GraphCompiler now resolves nodes referenced in NodeResult.Func outputs when in subgraphs appropriately
Fixed nesting issues with GraphCompiler and subgraphs
GraphCompiler will now resolve inputs for parameters within subgraphs
Make sure DefaultEditor draws the correct Default Value
GraphCompiler now pulls the Default Value set on a SubgraphNode if input has no connection
Fix infinite loop when saving some graph configurations
Cleanup GraphCompiler.Result() and remove debug logs
Fix DefaultEditor NRE
Label default properties as "Default {x}"
Fix Subgraph preview not compiling properly after new changes to GraphCompiler
Make sure Result node returns default values when evaluating material/pixel output
Ensure all variables/attributes are defined properly by changing some order. Fixes shader compile errors.
Fix issues with graph nesting evaluation
Fix attributes from parent graphs not being pulled in all cases.
Do not expose parameters/attributes from subgraphs in final shaders
Fix GraphCompiler pulling the cached input results from other graphs during preview compilation
Add IParameterNode.GetDefaultValue(), used to pre-populate inputs on created sub-nodes
Require input names on subgraphs, error when any are matching. Subgraphs within subgraphs now working as expected
EditorEvent fires whenever a subgraph is updated, reloading any open windows that reference the subgraph
Compile when initially loading a ShaderGraph file so you don't have to save to see the preview
Trying to open a ShaderGraph file that's already open will bring the window to the front instead of throwing a warning
Updating a DefaultValue on a Subgraph node will instantly reflect the changes
Constant nodes now have a "Preview" input in Subgraphs that is used to preview a default value for that input
https://files.facepunch.com/CarsonKompon/2025/January/27_16-57-SociableMilkweedbug.mp4
Hopefully fixed the last of the graph nesting issues. Should support all cases of subgraphs within subgraphs
https://files.facepunch.com/CarsonKompon/2025/January/27_18-37-PessimisticTuatara.mp4
Remove all the debug logs
ParameterNodes in a Subgraph without a name will be treated as constants and will not be exposed as inputs
TextureParameterNodes throw errors for name conflicts
Nested ITextureParameterNodes are resolves properly. Textures are now saves with DefaultValues in SubgraphNode.
Can now Right Click -> Create New Node from a selection of nodes to create a Subgraph (similar to ActionGraph)
https://files.facepunch.com/CarsonKompon/2025/January/28_12-16-PortlyKid.png
Right Click -> Create Custom Node now creates the newly created subgraph node in-place and re-assigns all the connections
https://files.facepunch.com/CarsonKompon/2025/January/28_15-03-HumiliatingPlatypus.mp4
Ensure all input fields are generated properly when doing Right Click -> Create Custom Node
Create Custom Node will no longer create duplicate inputs when multiple nodes within share the same one input
Remove some debug stuff
Don't show "Create Custom Node" when selection includes a function or material output node
Filter out certain nodes from GetRelevantNodes so they can't be created from Right Click Menu
Subgraph Nodes are green to establish a language that they are user-defined functions that can be clicked into.
Result Nodes (the final output nodes) are color-coded blue.
https://files.facepunch.com/CarsonKompon/2025/January/28_16-22-ThornyConch.png
Subgraph Nodes are green to establish a language that they are user-defined functions that can be clicked into.
Result Nodes (the final output nodes) are color-coded blue.
https://files.facepunch.com/CarsonKompon/2025/January/28_16-22-ThornyConch.png
Don't give everything a zero'd workshop id
Filter out certain nodes from GetRelevantNodes so they can't be created from Right Click Menu
Ensure all input fields are generated properly when doing Right Click -> Create Custom Node
Create Custom Node will no longer create duplicate inputs when multiple nodes within share the same one input
Remove some debug stuff
Don't show "Create Custom Node" when selection includes a function or material output node
Set Asset's WorkshopId correctly
Cleanup, removed separate upload stage, just upload to the workshop no matter what (if we're an eligible item)
Can now Right Click -> Create New Node from a selection of nodes to create a Subgraph (similar to ActionGraph)
https://files.facepunch.com/CarsonKompon/2025/January/28_12-16-PortlyKid.png
Right Click -> Create Custom Node now creates the newly created subgraph node in-place and re-assigns all the connections
https://files.facepunch.com/CarsonKompon/2025/January/28_15-03-HumiliatingPlatypus.mp4
Get rid of Facepunch.Steamworks ISteamUgc
Implement our own SteamUgc wrapper, with our interop
Implement ClothingUtils using new API -> Haven't cleaned this up yet
Add comment to reference rewiring
Handle cloned references to the prefab root when root is referenced from list or other nested properties.
Fixes: sbox-deathmatch/issues/100
Remove duplicate Forward() and remove DepthNormal fallback
Put mode fallbacks on materialsystem init instead of gameinfo
Add Mode fallback, used for both using Depth() as a fallback if shader doesn't have DepthNormal() and to move VrForward() to just Forward()
VrForward > Forward, reverse fallback so that old shaders with VrForward use that still
TextureParameterNodes throw errors for name conflicts
Nested ITextureParameterNodes are resolves properly. Textures are now saves with DefaultValues in SubgraphNode.
Add DebugOverlay.Model
Add DebugOverlay.GameObject
Throw if attempting to clone invalid gameobject
ParameterNodes in a Subgraph without a name will be treated as constants and will not be exposed as inputs
Interpolate value on query instead of every frame based on last update time
Hierarchy: Exiting search expands to new selection, resolves Facepunch/sbox-issues#7453
TreeView.RecursiveLayout compares TargetObject correctly, fixes TreeView.ScrollTo
Make sure all components captured by UndoScope are valid
Pass info back through CreateGameModal, can select map and maxplayers
Don't process implicitly created components in PostClone
sbox-issues/issues/7459
Add SteamUgc
Asset ProjectConfig can hold a WorkshopId, start working on adding this to the publish widget
Add utils to upload a clothing item to the workshop, create a transient directory to store item contents, delete once we're done with it, use item icon
Fixed SetItemContent not working properly, store WorkshopId in Metadata on upload
Open our workshop item in browser upon a successful upload
Added bespoke publish step for workshop eligible assets, much better flow, reverted my changes to AssetPublishWidget
Make Open in Workshop button actually clickable
Try to make the publisher step page a bit nicer (https://files.facepunch.com/tony/1b2711b1/sbox-dev_tO2pzRvJhu.png)
Rename and move ClothingUtils file
Bump navmesh agent ground trace distance even more
Push menu scope in Game.Overlay
Switch GameSettings to CreateGameModal
Fix NRE and undo for MaterialDropping
Refresh PrefabCacheScene when prefabfile is reloaded/changed
Fixes sbox-issues/issues/7458
Fix checking if open AG view matches given graph
Facepunch/sbox-issues#7443
Rename and move ClothingUtils file
Add ConVarFlags.GameSetting
Add internal TypeLibrary.GetMembersWithAttribute<T>
Add EditorUtility.CreateTypeLibrary( CompilerOutput[] )
Publisher: after compiling a game, create new TypeLibrary, load in the game's assemblies, and search for ConVars marked with ConVarFlags.GameSetting, include in metadata when publishing
Add GameSettingsEntry.Default since we'll want to give the controls default values
Implement GameSettingsModal
Add LaunchArguments.GameSettings, apply them when saving new game settings from menu, and run them when we've succesfully opened a game
Icon support for game settings dropdown options, use SwitchControl instead of Checkbox
Add Reset to Default button in GameSettingsModal
Better looking DropDown, reduced default max range, restore saved launch arguments when re-opening modal
Don't try to post stats on dedicated server
Switched store to support multiple item purchase
SyncFlags.Interpolate, support for float, Vector3, Angles, Rotation, Transform (with internal interface right now)
Only find this attribute if we need it
Remove these debug logs
Reconstruct Normals::Sample from depth if underlying texel doesn't use DepthNormal mode
https://files.facepunch.com/sampavlovic/1b2711b1/DdYOdR9WrI.png
Add DepthNormal() mode to lit shaders, this seem the most straightforward way to do this, shaders with just Depth() usually have a shared shader with no-color no-material output, legacy shaders rebuild normals from depth, not rendered in depthnormals mode
https://files.facepunch.com/sampavlovic/1b2711b1/hSVL6jr1Rx.png
Remove old no-normals depth prepass, keeps things simple, effects that we use will need to rely on depthnormals, doesn't add too much cost
Fix typo on gtao
Bind ClearFlags, this should probably be implicit
[Pick] Add Mode fallback, used for both using Depth() as a fallback if shader doesn't have DepthNormal() and to move VrForward() to just Forward()
Just use DepthNormalPrepassLayer, use depthnormal mode again
[Pick] VrForward > Forward, reverse fallback so that old shaders with VrForward use that still
Try to make the publisher step page a bit nicer (https://files.facepunch.com/tony/1b2711b1/sbox-dev_tO2pzRvJhu.png)
Hopefully fixed the last of the graph nesting issues. Should support all cases of subgraphs within subgraphs
https://files.facepunch.com/CarsonKompon/2025/January/27_18-37-PessimisticTuatara.mp4
Remove all the debug logs
Clone: Ignore initialization of objects that where implicitly created during cloning
Make Open in Workshop button actually clickable