SceneMenu/SceneMenuPanel.razor
@using Sandbox;
@using Sandbox.UI;
@using Sandbox.Network;
@using Sandbox.Diagnostics;
@inherits PanelComponent
<root>
<div class="header">
<div class="title">Scene Tests</div>
<div class="explanation">The scenes below are used as tests and examples of the scene system. Press escape to leave the scene. Hold escape to leave the game.</div>
</div>
<div class="body">
<div class="sidebar">
@foreach (var group in ResourceLibrary.GetAll<SceneFile>().Where(x => x.ResourcePath.Contains("/tests/")).GroupBy(x => x.GetMetadata("Group", "None")).OrderBy(x => x.Key))
{
var c = SceneCategory == group.Key ? "active" : "";
<div class="option @c" @onclick="@(() => SceneCategory = group.Key)">
<label class="name">@group.Key</label>
<label class="count">@group.Count()</label>
</div>
}
</div>
<div class="scene-list">
@foreach (var scene in ResourceLibrary.GetAll<SceneFile>().Where(x => x.ResourcePath.Contains("/tests/") && x.GetMetadata("Group", "None") == SceneCategory).OrderBy(x => x.GetMetadata("Title")))
{
<SceneButton Scene="@scene" OnSelected=@OpenScene></SceneButton>
}
</div>
</div>
</root>
@code
{
[ConVar( "testbed_category", ConVarFlags.Saved )]
public static string SceneCategory { get; set; } = "Fog";
[Parameter, EditorRequired] public RenderFragment Body { get; set; }
void OpenScene( SceneFile file )
{
Game.ActiveScene.Load(file);
var go = new GameObject(true, "Return To Menu");
go.Components.Create<ReturnToMenu>();
}
}