Files
sbox-public/game/addons/tools/Code/Scene/SceneView/ViewportOptions.cs
s&box team 71f266059a Open source release
This commit imports the C# engine code and game files, excluding C++ source code.

[Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
2025-11-24 09:05:18 +00:00

94 lines
2.7 KiB
C#

namespace Editor;
public partial class ViewportOptions : Widget
{
SceneViewportWidget SceneViewportWidget;
public ViewportOptions( SceneViewportWidget sceneViewportWidget )
{
SceneViewportWidget = sceneViewportWidget;
Layout = Layout.Row();
Layout.Spacing = 4;
Rebuild();
}
[EditorEvent.Hotload]
public void Rebuild()
{
Layout.Clear( true );
if ( SceneViewportWidget.State.RenderMode == SceneCameraDebugMode.Albedo )
Layout.Add( new IconButton( "palette", ToggleAlbedoChart ) { ToolTip = "Toggle Albedo Chart", IsToggle = true, Background = Theme.ControlBackground } );
Layout.Add( new IconButton( "tune", OpenViewSettings ) { ToolTip = "View Settings", Background = Theme.ControlBackground } );
}
protected override void OnPaint()
{
}
void OpenViewSettings()
{
var viewport = GetAncestor<SceneViewportWidget>();
var so = viewport.State.GetSerialized();
var menu = new ContextMenu( this );
{
// this whole menu should probably just be a popup
var widget = new Widget( menu );
widget.OnPaintOverride = () =>
{
Paint.SetBrushAndPen( Theme.WidgetBackground.WithAlpha( 0.5f ) );
Paint.DrawRect( widget.LocalRect.Shrink( 2 ), 2 );
return true;
};
var cs = new ControlSheet();
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.View ) ) );
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.WireframeMode ) ) );
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.EnablePostProcessing ) ) );
if ( viewport.SceneView.Session.Scene is PrefabScene )
{
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.EnablePrefabLighting ) ) );
}
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.ShowSkyIn2D ) ) );
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.ShowGrid ) ) );
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.GridOpacity ) ) );
if ( viewport.State.View == SceneViewportWidget.ViewMode.Perspective )
{
cs.AddRow( so.GetProperty( nameof( SceneViewportWidget.ViewportState.GridAxis ) ) );
}
widget.Layout = cs;
widget.MaximumWidth = 400;
menu.AddWidget( widget );
}
menu.AddSeparator();
foreach ( var entry in EditorTypeLibrary.GetEnumDescription( typeof( SceneCameraDebugMode ) ) )
{
var val = (SceneCameraDebugMode)entry.ObjectValue;
var o = menu.AddOption( entry.Title, entry.Icon, () => { viewport.State.RenderMode = val; Rebuild(); } );
o.Checkable = true;
o.Checked = viewport.State.RenderMode == val;
}
menu.OpenAtCursor();
}
void ToggleAlbedoChart()
{
bool current = ConsoleSystem.GetValueInt( "r_albedo_chart", 0 ) == 0 ? false : true;
ConsoleSystem.SetValue( "r_albedo_chart", !current );
}
}