Editor/XGUIView.cs
using Editor;
using Sandbox;
using Sandbox.UI;
namespace XGUI;
public class XGUIView : NativeRenderingWidget
{
RootPanel rootpanel;
XGUIRootPanel panel;
SceneModel model;
SceneWorld world;
public Window Window;
public XGUIView()
{
MinimumSize = 300;
world = new SceneWorld();
model = new SceneModel( world, "models/dev/gordon_at_desk.vmdl", Transform.Zero );
Camera = new SceneCamera( "XGUIRenderView" );
Camera.World = world;
Camera.BackgroundColor = Color.Black;
rootpanel = new RootPanel();
rootpanel.Scene = Scene;
panel = new XGUIRootPanel();
rootpanel.AddChild( panel );
Window = new Window();
Window.StyleSheet.Load( "/XGUI/DefaultStyles/OliveGreen.scss" );
panel.AddChild( Window );
new SceneLight( world, new Vector3( 100, 100, 100 ), 500, Color.Orange * 3 );
new SceneLight( world, new Vector3( -100, -100, 100 ), 500, Color.Cyan * 3 );
Window.Size = new Vector2( 800, 600 );
}
Vector2 lastPos;
float spinVelocity;
float hoverTime;
public override void PreFrame()
{
var dir = new Vector3( 0.5f, 0.5f, 0.5f ).Normal;
var distance = MathX.SphereCameraDistance( model.Bounds.Size.Length * 0.5f, Camera.FieldOfView );
var aspect = Size.x / Size.y;
if ( aspect > 1 ) distance *= aspect;
Camera.World.AmbientLightColor = Color.Gray;
Camera.Position = model.Bounds.Center + dir * distance * 0.9f;
Camera.Rotation = Rotation.LookAt( dir * -1.0f, Vector3.Up );
Camera.ZFar = 10000;
Camera.FieldOfView = 50;
Camera.AntiAliasing = false;
}
public void CleanUp()
{
base.OnDestroyed();
rootpanel.Delete();
}
}