UI/Inventory/HotbarPresetsButton.razor
@using Sandbox;
@using Sandbox.UI;
@namespace Sandbox
@inherits Panel
<root>
<div class="presets-toggle" @onclick=@OnToggleClick>
<i>expand_less</i>
</div>
</root>
@code
{
public PlayerInventory Inventory { get; set; }
void OnToggleClick()
{
var menu = new Sandbox.UI.Menu();
var presets = PlayerLoadout.GetLoadoutPresets();
foreach ( var preset in presets )
{
var name = preset.Name;
var json = preset.LoadoutJson;
var sub = menu.AddMenu( name, "bookmark" );
sub.AddOption( "Load", "play_arrow", () => OnLoadPreset( json ) );
sub.AddOption( "Overwrite with current", "save", () => OnOverwritePreset( name ) );
sub.AddOption( "Delete", "close", () => OnDeletePreset( name ) );
}
if ( presets.Any() )
{
menu.AddSeparator();
}
menu.AddOption( "Reset to Default", "refresh", ResetToDefault );
menu.AddOption( "New Preset", "add", OnSaveNew );
menu.Open( this, Popup.PositionMode.AboveLeft, 4 );
}
void OnLoadPreset( string json )
{
var loadout = GetLoadout();
if ( !loadout.IsValid() ) return;
loadout.SwitchToPreset( json );
}
void OnOverwritePreset( string name )
{
var json = LocalData.Get<string>( "hotbar" );
if ( string.IsNullOrEmpty( json ) ) return;
PlayerLoadout.SaveLoadoutPreset( name, json );
}
void OnDeletePreset( string name )
{
PlayerLoadout.DeleteLoadoutPreset( name );
}
void ResetToDefault()
{
var loadout = GetLoadout();
if ( !loadout.IsValid() ) return;
loadout.ResetToDefault();
}
void OnSaveNew()
{
var popup = new StringQueryPopup
{
Title = "New Inventoy Preset",
Placeholder = "Enter a name...",
ConfirmLabel = "Save",
OnConfirm = OnSaveConfirmed,
Parent = FindRootPanel()
};
}
void OnSaveConfirmed( string name )
{
var json = LocalData.Get<string>( "hotbar" );
if ( string.IsNullOrEmpty( json ) ) return;
PlayerLoadout.SaveLoadoutPreset( name, json );
}
PlayerLoadout GetLoadout()
{
return Inventory?.GetComponent<PlayerLoadout>();
}
}