mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 13:59:22 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
121 lines
2.6 KiB
C#
121 lines
2.6 KiB
C#
using Sandbox.Physics;
|
|
namespace Editor.ProjectSettingPages;
|
|
|
|
public partial class CollisionMatrixWidget
|
|
{
|
|
public class MatrixButton : Widget
|
|
{
|
|
CollisionMatrixWidget Matrix;
|
|
public string Left { get; set; }
|
|
public string Right { get; set; }
|
|
|
|
public MatrixButton( CollisionMatrixWidget parent, string left, string right ) : base( parent )
|
|
{
|
|
Matrix = parent;
|
|
Left = left;
|
|
Right = right;
|
|
Cursor = CursorShape.Finger;
|
|
}
|
|
|
|
protected override void OnPaint()
|
|
{
|
|
base.OnPaint();
|
|
|
|
var rule = CurrentValue;
|
|
|
|
Paint.ClearPen();
|
|
Paint.Antialiasing = false;
|
|
var r = LocalRect.Shrink( 0, 0, 2, 2 );
|
|
|
|
if ( rule == CollisionRules.Result.Unset )
|
|
{
|
|
Paint.SetBrush( Color.White.WithAlpha( Paint.HasMouseOver ? 0.2f : 0.05f ) );
|
|
Paint.ClearPen();
|
|
Paint.DrawRect( r, 2 );
|
|
}
|
|
|
|
if ( rule == CollisionRules.Result.Ignore )
|
|
{
|
|
Paint.SetBrush( Theme.Red.WithAlpha( Paint.HasMouseOver ? 0.4f : 0.3f ) );
|
|
Paint.ClearPen();
|
|
Paint.DrawRect( r, 2 );
|
|
|
|
Paint.SetPen( Theme.Red );
|
|
Paint.DrawIcon( r, "clear", 14 );
|
|
}
|
|
|
|
if ( rule == CollisionRules.Result.Trigger )
|
|
{
|
|
Paint.SetBrush( Theme.Yellow.Desaturate( 0.4f ).Darken( Paint.HasMouseOver ? 0.4f : 0.6f ) );
|
|
Paint.ClearPen();
|
|
Paint.DrawRect( r, 2 );
|
|
|
|
Paint.SetPen( Theme.Yellow );
|
|
Paint.DrawIcon( r, "remove", 14 );
|
|
}
|
|
|
|
if ( rule == CollisionRules.Result.Collide )
|
|
{
|
|
Paint.SetBrush( Theme.Green.Darken( Paint.HasMouseOver ? 0.4f : 0.5f ) );
|
|
Paint.ClearPen();
|
|
Paint.DrawRect( r, 2 );
|
|
|
|
Paint.SetPen( Theme.Green );
|
|
Paint.DrawIcon( r, "check", 14 );
|
|
}
|
|
}
|
|
|
|
CollisionRules.Result CurrentValue
|
|
{
|
|
get
|
|
{
|
|
if ( Right != null )
|
|
return Matrix.FindPair( Left, Right );
|
|
|
|
if ( Matrix.current.Defaults.TryGetValue( Left, out var rule ) )
|
|
return rule;
|
|
|
|
return CollisionRules.Result.Unset;
|
|
}
|
|
}
|
|
|
|
protected override void OnMousePress( MouseEvent e )
|
|
{
|
|
e.Accepted = true;
|
|
|
|
var rule = CurrentValue;
|
|
if ( e.RightMouseButton )
|
|
{
|
|
rule = 0;
|
|
}
|
|
else
|
|
{
|
|
if ( rule >= CollisionRules.Result.Ignore ) rule = 0;
|
|
else rule++;
|
|
}
|
|
|
|
// power users
|
|
if ( e.HasShift ) rule = CollisionRules.Result.Collide;
|
|
if ( e.HasCtrl ) rule = CollisionRules.Result.Ignore;
|
|
if ( e.HasAlt ) rule = CollisionRules.Result.Trigger;
|
|
if ( e.HasAlt && e.HasShift ) rule = CollisionRules.Result.Unset;
|
|
|
|
Matrix.SetPair( Left, Right, rule );
|
|
}
|
|
|
|
protected override void OnMouseEnter()
|
|
{
|
|
base.OnMouseEnter();
|
|
|
|
Matrix.OnHovered( this );
|
|
}
|
|
|
|
protected override void OnMouseLeave()
|
|
{
|
|
base.OnMouseLeave();
|
|
|
|
Matrix.OnHovered( null );
|
|
}
|
|
}
|
|
}
|