mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-01-23 21:59:40 -05:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
59 lines
1.5 KiB
C#
59 lines
1.5 KiB
C#
using System.Text.Json.Serialization;
|
|
using System.Threading;
|
|
|
|
namespace Sandbox.Resources;
|
|
|
|
|
|
[Title( "Gradient - Linear" )]
|
|
[Icon( "gradient" )]
|
|
[ClassName( "gradientlinear" )]
|
|
public class LinearGradient : TextureGenerator
|
|
{
|
|
public Vector2Int Size { get; set; } = 128;
|
|
|
|
[Range( 0, 2 )]
|
|
public bool IsHdr { get; set; } = false;
|
|
|
|
[Range( 0, 360 )]
|
|
public float Angle { get; set; } = 0;
|
|
|
|
[Range( 0, 2 )]
|
|
public float Scale { get; set; } = 1;
|
|
|
|
[Range( 0, 1 )]
|
|
public Vector2 Center { get; set; } = 0.5f;
|
|
|
|
[KeyProperty]
|
|
public Gradient Gradient { get; set; } = new Gradient( new Gradient.ColorFrame( 0.0f, Color.White ), new Gradient.ColorFrame( 1, Color.Black ) );
|
|
|
|
[Header( "Normal Map" ), Title( "Height to Normal" )]
|
|
public bool ConvertHeightToNormals { get; set; }
|
|
|
|
[ShowIf( "ConvertHeightToNormals", true )]
|
|
public float NormalScale { get; set; } = 1;
|
|
|
|
[Hide, JsonIgnore]
|
|
public override bool CacheToDisk => true;
|
|
|
|
protected override ValueTask<Texture> CreateTexture( Options options, CancellationToken ct )
|
|
{
|
|
var bitmap = new Bitmap( Size.x, Size.y, IsHdr && !ConvertHeightToNormals );
|
|
bitmap.Clear( Color.Transparent );
|
|
|
|
var hw = bitmap.Rect.Size.Length * 0.5f * Scale.Clamp( 0.0001f, 1000f );
|
|
var dir = Vector2.FromDegrees( Angle ) * hw;
|
|
var center = Center * bitmap.Rect.Size;
|
|
|
|
bitmap.SetLinearGradient( center - dir, center + dir, Gradient );
|
|
bitmap.DrawRect( bitmap.Rect );
|
|
|
|
if ( ConvertHeightToNormals )
|
|
{
|
|
bitmap = bitmap.HeightmapToNormalMap( NormalScale );
|
|
}
|
|
|
|
return ValueTask.FromResult( bitmap.ToTexture() );
|
|
}
|
|
}
|
|
|