mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 05:48:07 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
149 lines
3.0 KiB
C#
149 lines
3.0 KiB
C#
using Editor.NodeEditor;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace Editor.ShaderGraph;
|
|
|
|
public enum BlendMode
|
|
{
|
|
[Icon( "circle" )]
|
|
Opaque,
|
|
[Icon( "radio_button_unchecked" )]
|
|
Masked,
|
|
[Icon( "blur_on" )]
|
|
Translucent,
|
|
}
|
|
|
|
public enum ShadingModel
|
|
{
|
|
[Icon( "tungsten" )]
|
|
Lit,
|
|
[Icon( "brightness_3" )]
|
|
Unlit,
|
|
}
|
|
|
|
public enum ShaderDomain
|
|
{
|
|
[Icon( "view_in_ar" )]
|
|
Surface,
|
|
[Icon( "desktop_windows" )]
|
|
PostProcess,
|
|
}
|
|
|
|
public class PreviewSettings
|
|
{
|
|
public bool RenderBackfaces { get; set; } = false;
|
|
public bool EnableShadows { get; set; } = true;
|
|
public bool ShowGround { get; set; } = false;
|
|
public bool ShowSkybox { get; set; } = true;
|
|
public Color BackgroundColor { get; set; } = Color.Black;
|
|
public Color Tint { get; set; } = Color.White;
|
|
}
|
|
|
|
public sealed partial class ShaderGraph : IGraph
|
|
{
|
|
[Hide, JsonIgnore]
|
|
public IEnumerable<BaseNode> Nodes => _nodes.Values;
|
|
|
|
[Hide, JsonIgnore]
|
|
private readonly Dictionary<string, BaseNode> _nodes = new();
|
|
|
|
[Hide, JsonIgnore]
|
|
IEnumerable<INode> IGraph.Nodes => Nodes;
|
|
|
|
[Hide]
|
|
public bool IsSubgraph { get; set; }
|
|
|
|
[Hide]
|
|
public string Path { get; set; }
|
|
|
|
[Hide]
|
|
public string Model { get; set; }
|
|
|
|
/// <summary>
|
|
/// The name of the Node when used in ShaderGraph
|
|
/// </summary>
|
|
[ShowIf( nameof( IsSubgraph ), true )]
|
|
public string Title { get; set; }
|
|
|
|
public string Description { get; set; }
|
|
|
|
/// <summary>
|
|
/// The category of the Node when browsing the Node Library (optional)
|
|
/// </summary>
|
|
[ShowIf( nameof( AddToNodeLibrary ), true )]
|
|
public string Category { get; set; }
|
|
|
|
[IconName, ShowIf( nameof( IsSubgraph ), true )]
|
|
public string Icon { get; set; }
|
|
|
|
/// <summary>
|
|
/// Whether or not this Node should appear when browsing the Node Library.
|
|
/// Otherwise can only be referenced by dragging the Subgraph asset into the graph.
|
|
/// </summary>
|
|
[ShowIf( nameof( IsSubgraph ), true )]
|
|
public bool AddToNodeLibrary { get; set; }
|
|
|
|
public BlendMode BlendMode { get; set; }
|
|
|
|
[ShowIf( nameof( ShowShadingModel ), true )]
|
|
public ShadingModel ShadingModel { get; set; }
|
|
[Hide] private bool ShowShadingModel => Domain != ShaderDomain.PostProcess;
|
|
|
|
public ShaderDomain Domain { get; set; }
|
|
|
|
[Hide]
|
|
public PreviewSettings PreviewSettings { get; set; } = new();
|
|
|
|
[Hide]
|
|
public int Version { get; set; } = 1;
|
|
|
|
public ShaderGraph()
|
|
{
|
|
}
|
|
|
|
public void AddNode( BaseNode node )
|
|
{
|
|
node.Graph = this;
|
|
_nodes.Add( node.Identifier, node );
|
|
}
|
|
|
|
public void RemoveNode( BaseNode node )
|
|
{
|
|
if ( node.Graph != this )
|
|
return;
|
|
|
|
_nodes.Remove( node.Identifier );
|
|
}
|
|
|
|
public BaseNode FindNode( string name )
|
|
{
|
|
_nodes.TryGetValue( name, out var node );
|
|
return node;
|
|
}
|
|
|
|
public void ClearNodes()
|
|
{
|
|
_nodes.Clear();
|
|
}
|
|
|
|
string IGraph.SerializeNodes( IEnumerable<INode> nodes )
|
|
{
|
|
return SerializeNodes( nodes.Cast<BaseNode>() );
|
|
}
|
|
|
|
IEnumerable<INode> IGraph.DeserializeNodes( string serialized )
|
|
{
|
|
return DeserializeNodes( serialized );
|
|
}
|
|
|
|
void IGraph.AddNode( INode node )
|
|
{
|
|
AddNode( (BaseNode)node );
|
|
}
|
|
|
|
void IGraph.RemoveNode( INode node )
|
|
{
|
|
RemoveNode( (BaseNode)node );
|
|
}
|
|
}
|