API to easily create WASD menus.
IWasdMenu
public interface IWasdMenu
{
public string Title { get; set; }
public LinkedList<IWasdMenuOption>? Options { get; set; }
public LinkedListNode<IWasdMenuOption>? Prev { get; set; }
public LinkedListNode<IWasdMenuOption> Add(string display, Action<CCSPlayerController, IWasdMenuOption> onChoice);
}
IWasdMenuOption
public interface IWasdMenuManager
{
public IWasdMenu CreateMenu(string title = "");
public void CloseMenu(CCSPlayerController? player);
public void CloseSubMenu(CCSPlayerController? player);
public void CloseAllSubMenus(CCSPlayerController? player);
public void OpenSubMenu(CCSPlayerController? player, IWasdMenu? menu);
public void OpenMainMenu(CCSPlayerController? player, IWasdMenu? menu);
}
IWasdMenuManager
public interface IWasdMenuOption
{
public int Index { get; set; }
public IWasdMenu? Parent { get; set; }
public string? OptionDisplay { get; set; }
public Action<CCSPlayerController, IWasdMenuOption>? OnChoose { get; set; }
}
// Included libraries
using WASDSharedAPI;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;
// Declare namespace
namespace ExamplePlugin
{
// Define plugin class
public class Plugin : BasePlugin
{
// Define plugin parameters
public static Plugin? Instance;
public override string ModuleName => "ExamplePlugin";
public override string ModuleVersion => "1.0.0";
public override string ModuleAuthor => "Striker-Nick";
public override string ModuleDescription => "An example plugin";
// Define on load behavior
public override void Load(bool hotReload)
{
Instance = this;
Instance.AddCommand("css_maps", "Displays a list of maps.", OnMapsCommand);
}
// Define class properties
private IWasdMenu? mapWasdMenu;
public PluginCapability<IWasdMenuManager> WasdMenuManager { get; } = new("wasdmenu:manager");
// Define on all plugins loaded behavior
public override void OnAllPluginsLoaded(bool hotReload)
{
base.OnAllPluginsLoaded(hotReload);
try
{
if (WasdMenuManager.Get() is null)
return;
}
catch (Exception)
{
Logger.LogWarning("WASDSharedAPI plugin not found. WASD menus will not be work.");
return;
}
// Load WASD menus
LoadWASDMenu();
}
// Define method to unload plugin
public override void Unload(bool hotReload)
{
base.Unload(hotReload);
}
// Define method to load WASDMenu
public void LoadWASDMenu()
{
private List<string> maps = new()
{
"Dust2",
"Ancient",
"Anubis",
"Inferno",
"Vertigo",
"Overpass",
"Train",
"Nuke",
"Mirage"
};
foreach (string map in maps)
{
mapWasdMenu?.Add(map, (player, option) =>
{
// Close main menu example
WasdMenuManager.Get()?.CloseMenu(player);
player.PrintToChat($"You selected {map}");
// Open Submenu example
// mapWasdSubMenu.Prev = option.Parent?.Options?.Find(option);
// WasdMenuManager.Get()?.OpenSubMenu(player, mapWasdSubMenu);
// Close submenu example
// WasdMenuManager.Get()?.CloseSubMenu(player)
});
}
}
// Define maps command handler
[CommandHelper(whoCanExecute: CommandUsage.CLIENT_ONLY)]
public void OnMapsCommand(CCSPlayerController? player, CommandInfo command)
{
if(player != null && mapWasdMenu != null)
{
WasdMenuManager.Get()?.OpenMainMenu(player, mapWasdMenu);
}
}
}
}