UI/SpawnMenu/Dupes/DupesPage.cs

Spawn menu page for Dupes. It builds UI sections for Workshop (popular/newest), categories from DupeCategory enum, and local dupes, and sets a custom footer. Also declares DupeCategory and DupeMovement enums with icon attributes on categories.

using Sandbox.UI;

/// <summary>
/// This component has a kill icon that can be used in the killfeed, or somewhere else.
/// </summary>
[Title( "Dupes" ), Order( 3000 ), Icon( "✌️" )]
public class DupesPage : BaseSpawnMenu
{
	protected override void Rebuild()
	{
		AddHeader( "Workshop" );
		AddOption( "🎖️", "Popular Dupes", () => new DupesWorkshop() { SortOrder = WorkshopSortMode.Popular } );
		AddOption( "🐣", "Newest Dupes", () => new DupesWorkshop() { SortOrder = WorkshopSortMode.Newest } );

		AddHeader( "Categories" );

		foreach ( var entry in TypeLibrary.GetEnumDescription( typeof( DupeCategory ) ) )
		{
			AddOption( entry.Icon, entry.Title, () => new DupesWorkshop()
			{
				SortOrder = WorkshopSortMode.Popular,
				Category = entry.Name.ToString()
			} );
		}


		AddGrow();
		AddHeader( "Local" );
		AddOption( "📂", "Local Dupes", () => new DupesLocal() );
	}

	protected override void OnMenuFooter( Panel footer )
	{
		footer.AddChild<DupesFooter>();
	}
}

public enum DupeCategory
{
	[Icon( "🚗" )]
	Vehicle,
	[Icon( "🤖" )]
	Robot,
	[Icon( "✈️" )]
	Plane,
	[Icon( "🕺🏼" )]
	Pose,
	[Icon( "🏹" )]
	Weapon,
	[Icon( "🖼️" )]
	Art,
	[Icon( "🏠" )]
	Scene,
	[Icon( "🎳" )]
	Game,
	[Icon( "🛸" )]
	Spaceship,
	[Icon( "🎰" )]
	Machine,
	[Icon( "🧸" )]
	Toys,
	[Icon( "🪤" )]
	Trap,
	[Icon( "⛵" )]
	Boat,
	[Icon( "📂" )]
	Other
}

public enum DupeMovement
{
	Static,
	Wheeled,
	Flying,
	Walking,
	Water,
	Tracked
}