🔍 s&box Package Code Search
Search C# source code, UI razor templates, shaders, and configs across s&box packages.
🔗 Raw Facepunch API Link: https://public.facepunch.com/sbox/code/search/1/?ident=fwotsoft.rotsoftlighting&take=20
Showing code results for query:
*
(4 total matches found)
Game
library
global using static Sandbox.Internal.GlobalGameNamespace;
global using Microsoft.AspNetCore.Components;
global using Microsoft.AspNetCore.Components.Rendering;
[assembly: global::System.Reflection.AssemblyMetadata( "AddonTitle", "Rotsoft Lighting" )]
[assembly: global::System.Reflection.AssemblyMetadata( "AddonIdent", "rotsoftlighting" )]
[assembly: global::System.Reflection.AssemblyMetadata( "OrgIdent", "fwotsoft" )]
[assembly: global::System.Reflection.AssemblyMetadata( "Ident", "fwotsoft.rotsoftlighting" )]
[assembly: global::System.Reflection.AssemblyMetadata( "EngineVersion", "28" )]
[assembly: global::System.Reflection.AssemblyMetadata( "EngineMinorVersion", "1" )]
[assembly: System.Runtime.Versioning.TargetFramework( ".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0" )]
[assembly: global::System.Reflection.AssemblyMetadata( "CompileTime", "2026-07-28T04:33:43.7494102Z" )]
[assembly: global::System.Reflection.AssemblyVersion("0.0.125.0")]
[assembly: global::System.Reflection.AssemblyFileVersion("0.0.125.0")]
Editor
library
using Editor;
using Sandbox;
using Sandbox.UI;
using System;
namespace RotSoft;
[CustomEditor(typeof(float), WithAllAttributes = new[] { typeof(KelvinTemperatureAttribute) })]
public class KelvinTemperatureWidget : ControlWidget
{
public override bool SupportsMultiEdit => false;
public override bool IncludeLabel => false;
public KelvinTemperatureWidget(SerializedProperty property) : base(property)
{
Layout = Layout.Column();
Layout.Spacing = 2;
Layout.Margin = new Margin(0, 0, 0, 20);
var bar = Layout.Add(new ClickableKelvinBar(this, property));
bar.FixedHeight = 44;
}
protected override void OnPaint() { }
internal class ClickableKelvinBar : Widget
{
SerializedProperty _prop;
bool _grabbed;
public ClickableKelvinBar(Widget parent, SerializedProperty prop) : base(parent)
{
_prop = prop;
Cursor = CursorShape.Finger;
HorizontalSizeMode = SizeMode.CanGrow;
FocusMode = FocusMode.Click;
}
protected override void OnPaint()
{
var rect = LocalRect.Shrink(0);
var gradientRect = new Rect(rect.Left, rect.Top, rect.Width, rect.Height - 16);
int steps = Math.Max((int)gradientRect.Width, 1);
Paint.ClearPen();
for (int i = 0; i < steps; i++)
{
float frac = (float)i / steps;
float kelvin = 1000f + frac * 19000f;
Paint.SetBrush(KelvinSpot.KelvinToColor(kelvin));
Paint.DrawRect(new Rect(gradientRect.Left + i, gradientRect.Top, 1f, gradientRect.Height));
}
if (_prop is null) return;
float t = _prop.GetValue<float>();
float handleFrac = (t - 1000f) / 19000f;
float hx = gradientRect.Left + handleFrac * gradientRect.Width;
Paint.ClearPen();
Paint.SetBrush(Color.Black.WithAlpha(0.35f));
Paint.DrawRect(new Rect(hx - 4, gradientRect.Top, 8, gradientRect.Height), 2f);
Paint.SetBrush(Color.White);
Paint.DrawRect(new Rect(hx - 3, gradientRect.Top + 1, 6, gradientRect.Height - 2), 2f);
Paint.SetPen(Theme.Text);
Paint.SetDefaultFont();
Paint.DrawText(new Rect(rect.Left, gradientRect.Bottom, rect.Width, 16), $"{t:0}K", TextFlag.Center | TextFlag.SingleLine);
}
protected override void OnMousePress(MouseEvent e)
{
base.OnMousePress(e);
_grabbed = true;
SetFromPosition(e.LocalPosition.x);
e.Accepted = true;
}
protected override void OnMouseReleased(MouseEvent e)
{
base.OnMouseReleased(e);
_grabbed = false;
}
protected override void OnMouseMove(MouseEvent e)
{
base.OnMouseMove(e);
if (!_grabbed) return;
SetFromPosition(e.LocalPosition.x);
}
void SetFromPosition(float localX)
{
if (_prop is null) return;
float frac = Math.Clamp(localX / Width, 0f, 1f);
_prop.SetValue(1000f + frac * 19000f);
}
}
}
Game
library
using Sandbox;
using System;
namespace RotSoft;
/// <summary>
/// A Spotlight with a kelvin temperature gradient bar.
/// </summary>
public class KelvinTemperatureAttribute : System.Attribute { }
public sealed class KelvinSpot : SpotLight
{
public new Color LightColor
{
get => base.LightColor;
set => base.LightColor = value;
}
float _temperature = 5500f;
[Property, Range(1000f, 20000f), Step(10f), KelvinTemperature]
public float Temperature
{
get => _temperature;
set
{
if (_temperature == value) return;
_temperature = value;
ApplyColor();
}
}
float _brightness = 1f;
[Property, Range(0.1f, 100f), Step(0.1f), Title("Brightness")]
public float Range
{
get => _brightness;
set
{
if (_brightness == value) return;
_brightness = value;
ApplyColor();
}
}
void ApplyColor()
{
LightColor = KelvinToColor(_temperature) * _brightness;
}
/// <summary>
/// Approximate kelvin → sRGB. Based on Tanner Helland's algorithm.
/// </summary>
public static Color KelvinToColor(float kelvin)
{
float temp = kelvin / 100f;
float r, g, b;
if (temp <= 66f)
r = 1f;
else
r = Math.Clamp(1.29293618606f * MathF.Pow(temp - 60f, -0.1332047592f), 0f, 1f);
if (temp <= 66f)
g = Math.Clamp(0.390081578769f * MathF.Log(temp) - 0.63184144378f, 0f, 1f);
else
g = Math.Clamp(1.12989086369f * MathF.Pow(temp - 60f, -0.0755148492f), 0f, 1f);
if (temp >= 66f)
b = 1f;
else if (temp <= 19f)
b = 0f;
else
b = Math.Clamp(0.54320678911f * MathF.Log(temp - 10f) - 1.19625408914f, 0f, 1f);
return new Color(r, g, b);
}
}
Game
library
using Sandbox;
using System;
namespace RotSoft;
/// <summary>
/// A Spotlight with a kelvin temperature gradient bar.
/// </summary>
public class KelvinTemperatureAttribute : System.Attribute { }
public sealed class KelvinSpot : SpotLight
{
public new Color LightColor
{
get => base.LightColor;
set => base.LightColor = value;
}
float _temperature = 5500f;
[Property, Range(1000f, 20000f), Step(10f), KelvinTemperature]
public float Temperature
{
get => _temperature;
set
{
if (_temperature == value) return;
_temperature = value;
ApplyColor();
}
}
float _brightness = 1f;
[Property, Range(0.1f, 100f), Step(0.1f), Title("Brightness")]
public float Range
{
get => _brightness;
set
{
if (_brightness == value) return;
_brightness = value;
ApplyColor();
}
}
void ApplyColor()
{
LightColor = KelvinToColor(_temperature) * _brightness;
}
/// <summary>
/// Approximate kelvin → sRGB. Based on Tanner Helland's algorithm.
/// </summary>
public static Color KelvinToColor(float kelvin)
{
float temp = kelvin / 100f;
float r, g, b;
if (temp <= 66f)
r = 1f;
else
r = Math.Clamp(1.29293618606f * MathF.Pow(temp - 60f, -0.1332047592f), 0f, 1f);
if (temp <= 66f)
g = Math.Clamp(0.390081578769f * MathF.Log(temp) - 0.63184144378f, 0f, 1f);
else
g = Math.Clamp(1.12989086369f * MathF.Pow(temp - 60f, -0.0755148492f), 0f, 1f);
if (temp >= 66f)
b = 1f;
else if (temp <= 19f)
b = 0f;
else
b = Math.Clamp(0.54320678911f * MathF.Log(temp - 10f) - 1.19625408914f, 0f, 1f);
return new Color(r, g, b);
}
}
Debug: View Raw JSON Response
{
"TotalCount": 4,
"Files": [
{
"Ident": "fwotsoft.rotsoftlighting",
"Path": ".obj/__compiler_extra.cs",
"FileName": "__compiler_extra.cs",
"PackageType": "library",
"CodeKind": "Game",
"AssetVersionId": 336536,
"Code": "global using static Sandbox.Internal.GlobalGameNamespace;\r\nglobal using Microsoft.AspNetCore.Components;\r\nglobal using Microsoft.AspNetCore.Components.Rendering;\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"AddonTitle\", \"Rotsoft Lighting\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"AddonIdent\", \"rotsoftlighting\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"OrgIdent\", \"fwotsoft\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"Ident\", \"fwotsoft.rotsoftlighting\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"EngineVersion\", \"28\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"EngineMinorVersion\", \"1\" )]\r\n\r\n[assembly: System.Runtime.Versioning.TargetFramework( \".NETCoreApp,Version=v9.0\", FrameworkDisplayName = \".NET 9.0\" )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \"CompileTime\", \"2026-07-28T04:33:43.7494102Z\" )]\r\n[assembly: global::System.Reflection.AssemblyVersion(\"0.0.125.0\")]\r\n[assembly: global::System.Reflection.AssemblyFileVersion(\"0.0.125.0\")]"
},
{
"Ident": "fwotsoft.rotsoftlighting",
"Path": "Editor/KelvinSpotWidget.cs",
"FileName": "KelvinSpotWidget.cs",
"PackageType": "library",
"CodeKind": "Editor",
"AssetVersionId": 336536,
"Code": "using Editor;\r\nusing Sandbox;\r\nusing Sandbox.UI;\r\nusing System;\r\nnamespace RotSoft;\r\n\r\n[CustomEditor(typeof(float), WithAllAttributes = new[] { typeof(KelvinTemperatureAttribute) })]\r\npublic class KelvinTemperatureWidget : ControlWidget\r\n{\r\n public override bool SupportsMultiEdit => false;\r\n public override bool IncludeLabel => false;\r\n\r\n public KelvinTemperatureWidget(SerializedProperty property) : base(property)\r\n {\r\n Layout = Layout.Column();\r\n Layout.Spacing = 2;\r\n Layout.Margin = new Margin(0, 0, 0, 20);\r\n\r\n var bar = Layout.Add(new ClickableKelvinBar(this, property));\r\n bar.FixedHeight = 44;\r\n }\r\n\r\n protected override void OnPaint() { }\r\n\r\n internal class ClickableKelvinBar : Widget\r\n {\r\n SerializedProperty _prop;\r\n bool _grabbed;\r\n\r\n public ClickableKelvinBar(Widget parent, SerializedProperty prop) : base(parent)\r\n {\r\n _prop = prop;\r\n Cursor = CursorShape.Finger;\r\n HorizontalSizeMode = SizeMode.CanGrow;\r\n FocusMode = FocusMode.Click;\r\n }\r\n\r\n protected override void OnPaint()\r\n {\r\n var rect = LocalRect.Shrink(0);\r\n var gradientRect = new Rect(rect.Left, rect.Top, rect.Width, rect.Height - 16);\r\n int steps = Math.Max((int)gradientRect.Width, 1);\r\n\r\n Paint.ClearPen();\r\n\r\n for (int i = 0; i < steps; i++)\r\n {\r\n float frac = (float)i / steps;\r\n float kelvin = 1000f + frac * 19000f;\r\n Paint.SetBrush(KelvinSpot.KelvinToColor(kelvin));\r\n Paint.DrawRect(new Rect(gradientRect.Left + i, gradientRect.Top, 1f, gradientRect.Height));\r\n }\r\n\r\n if (_prop is null) return;\r\n\r\n float t = _prop.GetValue<float>();\r\n float handleFrac = (t - 1000f) / 19000f;\r\n float hx = gradientRect.Left + handleFrac * gradientRect.Width;\r\n\r\n Paint.ClearPen();\r\n Paint.SetBrush(Color.Black.WithAlpha(0.35f));\r\n Paint.DrawRect(new Rect(hx - 4, gradientRect.Top, 8, gradientRect.Height), 2f);\r\n Paint.SetBrush(Color.White);\r\n Paint.DrawRect(new Rect(hx - 3, gradientRect.Top + 1, 6, gradientRect.Height - 2), 2f);\r\n\r\n Paint.SetPen(Theme.Text);\r\n Paint.SetDefaultFont();\r\n Paint.DrawText(new Rect(rect.Left, gradientRect.Bottom, rect.Width, 16), $\"{t:0}K\", TextFlag.Center | TextFlag.SingleLine);\r\n }\r\n\r\n protected override void OnMousePress(MouseEvent e)\r\n {\r\n base.OnMousePress(e);\r\n _grabbed = true;\r\n SetFromPosition(e.LocalPosition.x);\r\n e.Accepted = true;\r\n }\r\n\r\n protected override void OnMouseReleased(MouseEvent e)\r\n {\r\n base.OnMouseReleased(e);\r\n _grabbed = false;\r\n }\r\n\r\n protected override void OnMouseMove(MouseEvent e)\r\n {\r\n base.OnMouseMove(e);\r\n if (!_grabbed) return;\r\n SetFromPosition(e.LocalPosition.x);\r\n }\r\n\r\n void SetFromPosition(float localX)\r\n {\r\n if (_prop is null) return;\r\n float frac = Math.Clamp(localX / Width, 0f, 1f);\r\n _prop.SetValue(1000f + frac * 19000f);\r\n }\r\n }\r\n}"
},
{
"Ident": "fwotsoft.rotsoftlighting",
"Path": "KelvinSpot.cs",
"FileName": "KelvinSpot.cs",
"PackageType": "library",
"CodeKind": "Game",
"AssetVersionId": 336536,
"Code": "using Sandbox;\r\nusing System;\r\n\r\nnamespace RotSoft;\r\n\r\n/// <summary>\r\n/// A Spotlight with a kelvin temperature gradient bar.\r\n/// </summary>\r\npublic class KelvinTemperatureAttribute : System.Attribute { }\r\n\r\npublic sealed class KelvinSpot : SpotLight\r\n{\r\n public new Color LightColor\r\n {\r\n get => base.LightColor;\r\n set => base.LightColor = value;\r\n }\r\n\r\n float _temperature = 5500f;\r\n\r\n [Property, Range(1000f, 20000f), Step(10f), KelvinTemperature]\r\n public float Temperature\r\n {\r\n get => _temperature;\r\n set\r\n {\r\n if (_temperature == value) return;\r\n _temperature = value;\r\n ApplyColor();\r\n }\r\n }\r\n\r\n float _brightness = 1f;\r\n\r\n [Property, Range(0.1f, 100f), Step(0.1f), Title(\"Brightness\")]\r\n public float Range\r\n {\r\n get => _brightness;\r\n set\r\n {\r\n if (_brightness == value) return;\r\n _brightness = value;\r\n ApplyColor();\r\n }\r\n }\r\n\r\n void ApplyColor()\r\n {\r\n LightColor = KelvinToColor(_temperature) * _brightness;\r\n }\r\n\r\n /// <summary>\r\n /// Approximate kelvin \u2192 sRGB. Based on Tanner Helland's algorithm.\r\n /// </summary>\r\n public static Color KelvinToColor(float kelvin)\r\n {\r\n float temp = kelvin / 100f;\r\n float r, g, b;\r\n\r\n if (temp <= 66f)\r\n r = 1f;\r\n else\r\n r = Math.Clamp(1.29293618606f * MathF.Pow(temp - 60f, -0.1332047592f), 0f, 1f);\r\n\r\n if (temp <= 66f)\r\n g = Math.Clamp(0.390081578769f * MathF.Log(temp) - 0.63184144378f, 0f, 1f);\r\n else\r\n g = Math.Clamp(1.12989086369f * MathF.Pow(temp - 60f, -0.0755148492f), 0f, 1f);\r\n\r\n if (temp >= 66f)\r\n b = 1f;\r\n else if (temp <= 19f)\r\n b = 0f;\r\n else\r\n b = Math.Clamp(0.54320678911f * MathF.Log(temp - 10f) - 1.19625408914f, 0f, 1f);\r\n\r\n return new Color(r, g, b);\r\n }\r\n}\r\n"
},
{
"Ident": "fwotsoft.rotsoftlighting",
"Path": "Code/KelvinSpot.cs",
"FileName": "KelvinSpot.cs",
"PackageType": "library",
"CodeKind": "Game",
"AssetVersionId": 336536,
"Code": "using Sandbox;\r\nusing System;\r\n\r\nnamespace RotSoft;\r\n\r\n/// <summary>\r\n/// A Spotlight with a kelvin temperature gradient bar.\r\n/// </summary>\r\npublic class KelvinTemperatureAttribute : System.Attribute { }\r\n\r\npublic sealed class KelvinSpot : SpotLight\r\n{\r\n public new Color LightColor\r\n {\r\n get => base.LightColor;\r\n set => base.LightColor = value;\r\n }\r\n\r\n float _temperature = 5500f;\r\n\r\n [Property, Range(1000f, 20000f), Step(10f), KelvinTemperature]\r\n public float Temperature\r\n {\r\n get => _temperature;\r\n set\r\n {\r\n if (_temperature == value) return;\r\n _temperature = value;\r\n ApplyColor();\r\n }\r\n }\r\n\r\n float _brightness = 1f;\r\n\r\n [Property, Range(0.1f, 100f), Step(0.1f), Title(\"Brightness\")]\r\n public float Range\r\n {\r\n get => _brightness;\r\n set\r\n {\r\n if (_brightness == value) return;\r\n _brightness = value;\r\n ApplyColor();\r\n }\r\n }\r\n\r\n void ApplyColor()\r\n {\r\n LightColor = KelvinToColor(_temperature) * _brightness;\r\n }\r\n\r\n /// <summary>\r\n /// Approximate kelvin \u2192 sRGB. Based on Tanner Helland's algorithm.\r\n /// </summary>\r\n public static Color KelvinToColor(float kelvin)\r\n {\r\n float temp = kelvin / 100f;\r\n float r, g, b;\r\n\r\n if (temp <= 66f)\r\n r = 1f;\r\n else\r\n r = Math.Clamp(1.29293618606f * MathF.Pow(temp - 60f, -0.1332047592f), 0f, 1f);\r\n\r\n if (temp <= 66f)\r\n g = Math.Clamp(0.390081578769f * MathF.Log(temp) - 0.63184144378f, 0f, 1f);\r\n else\r\n g = Math.Clamp(1.12989086369f * MathF.Pow(temp - 60f, -0.0755148492f), 0f, 1f);\r\n\r\n if (temp >= 66f)\r\n b = 1f;\r\n else if (temp <= 19f)\r\n b = 0f;\r\n else\r\n b = Math.Clamp(0.54320678911f * MathF.Log(temp - 10f) - 1.19625408914f, 0f, 1f);\r\n\r\n return new Color(r, g, b);\r\n }\r\n}\r\n"
}
]
}