Editor/IconRendering.cs
using System;
using System.Numerics;
using Editor;
using IconRenderer;
using Sandbox;

internal class IconRendering : SceneRenderingWidget
{
	public readonly CameraComponent camera;
	public readonly SkinnedModelRenderer model;
	public readonly DirectionalLight light;
	public readonly SpriteRenderer mockBackground;

	private float hoverTime;

	public IconRendering( string modelName, string background ) : base( null )
	{
		Size = 512;

		Scene = Scene.CreateEditorScene();

		using ( Scene.Push() )
		{
			{
				camera = new GameObject( true, "camera" ).GetOrAddComponent<CameraComponent>( false );
				camera.BackgroundColor = Color.Black;
				camera.Enabled = true;
			}
			{
				light = new GameObject( true, "light" ).GetOrAddComponent<DirectionalLight>( false );
				light.LightColor = Color.White;
				light.Enabled = true;
			}
			{
				model = new GameObject( true, "model" ).GetOrAddComponent<SkinnedModelRenderer>( false );
				model.Model = Model.Load( modelName ?? "models/error.vmdl" );
				model.Enabled = true;
			}
			{
				mockBackground = new GameObject( true, "mockBackground" ).GetOrAddComponent<SpriteRenderer>( false );
				mockBackground.Texture = Texture.Load( background );
				mockBackground.Size = new Vector2( 512, 512 );
				mockBackground.LocalPosition = new Vector3( -256, 0, 0 );
				mockBackground.Enabled = true;
			}
		}
	}

	public override void OnDestroyed()
	{
		base.OnDestroyed();

		Scene?.Destroy();
		Scene = null;
	}

	public override void PreFrame()
	{
		Scene.EditorTick( RealTime.Now, RealTime.Delta );
	}
}