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]
125 lines
2.7 KiB
C#
125 lines
2.7 KiB
C#
using Sandbox.Audio;
|
|
|
|
namespace Editor.Audio;
|
|
|
|
|
|
public class MixerTreeNode : TreeNode<Mixer>
|
|
{
|
|
bool isSelected = false;
|
|
MixerDock ParentDock;
|
|
|
|
public MixerTreeNode( MixerDock parent, Mixer mixer ) : base( mixer )
|
|
{
|
|
ParentDock = parent;
|
|
Height = 22;
|
|
}
|
|
|
|
public override bool HasChildren => Value.ChildCount > 0;
|
|
|
|
protected override void BuildChildren() => SetChildren( Value.GetChildren(), x => new MixerTreeNode( ParentDock, x ) );
|
|
|
|
public override int ValueHash => HashCode.Combine( Value, Value.ChildCount );
|
|
|
|
public override void OnPaint( VirtualWidget item )
|
|
{
|
|
Paint.Pen = Theme.Yellow;
|
|
|
|
var active = Value.Meter.Current.VoiceCount > 0;
|
|
|
|
if ( !active )
|
|
Paint.Pen = Theme.Text;
|
|
|
|
isSelected = item.Selected;
|
|
if ( isSelected )
|
|
{
|
|
Paint.ClearPen();
|
|
Paint.SetBrush( Theme.Primary );
|
|
Paint.DrawRect( new Rect( 0, item.Rect.Top, 1024, item.Rect.Height ) );
|
|
Paint.Pen = Theme.Text;
|
|
}
|
|
|
|
var r = item.Rect;
|
|
|
|
r.Left += 4;
|
|
|
|
|
|
Paint.DrawIcon( r, "settings_input_component", 11, TextFlag.LeftCenter );
|
|
|
|
r.Left += 18;
|
|
|
|
PaintVolume( r );
|
|
|
|
r.Height -= 2;
|
|
|
|
Paint.Pen = item.GetForegroundColor().WithAlpha( (item.Selected || active) ? 1.0f : 0.7f );
|
|
Paint.SetDefaultFont( weight: Mixer.Default == Value ? 600 : 400 );
|
|
var textRect = Paint.DrawText( r, Value.Name, TextFlag.LeftCenter );
|
|
|
|
if ( Value.Meter.Current.VoiceCount > 0 )
|
|
{
|
|
r.Left += textRect.Width + 8;
|
|
Paint.SetDefaultFont( 7 );
|
|
Paint.Pen = Theme.Green.WithAlpha( 0.5f );
|
|
Paint.DrawText( r, $"{Value.Meter.Current.VoiceCount:n0}", TextFlag.LeftCenter );
|
|
}
|
|
}
|
|
|
|
private void PaintVolume( Rect rect )
|
|
{
|
|
var v = Value.Meter.Current.MaxLevel.Clamp( 0, 1 );
|
|
if ( v <= 0 )
|
|
return;
|
|
|
|
var vr = rect;
|
|
vr.Width *= v;
|
|
vr.Top += vr.Height - 5;
|
|
vr.Height = 2;
|
|
|
|
Paint.SetBrushAndPen( Theme.Green.WithAlpha( 0.5f ) );
|
|
Paint.DrawRect( vr );
|
|
|
|
}
|
|
|
|
public override bool OnContextMenu()
|
|
{
|
|
var menu = new ContextMenu( null );
|
|
|
|
menu.AddOption( "Add Child", "add", AddChild );
|
|
|
|
var delete = menu.AddOption( "Delete", "close", () => Value.Destroy() );
|
|
delete.Enabled = !Value.IsMaster;
|
|
|
|
{
|
|
var o = menu.AddOption( "Set as Default Mixer", "grade", () => Mixer.Default = Value );
|
|
o.Enabled = Mixer.Default != Value;
|
|
}
|
|
|
|
menu.OpenAtCursor();
|
|
|
|
return true;
|
|
}
|
|
|
|
void AddChild()
|
|
{
|
|
var c = Value.AddChild();
|
|
TreeView.Open( this );
|
|
TreeView.SelectItem( c );
|
|
TreeView.BeginRename();
|
|
ParentDock.SetDirty();
|
|
}
|
|
|
|
public override bool CanEdit => true;
|
|
|
|
public override string Name
|
|
{
|
|
get => Value.Name;
|
|
set => Value.Name = value;
|
|
}
|
|
|
|
public override void OnRename( VirtualWidget item, string text, List<TreeNode> selection = null )
|
|
{
|
|
Name = text;
|
|
ParentDock.SetDirty();
|
|
}
|
|
}
|