Skip to content

nickj609/WASDMenuAPI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WASDMenuAPI

API to easily create WASD menus.

378240827-3bf9e64d-bd2c-4a9c-8075-7c288852fe83

Interfaces

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; }
}

Example Usage

// 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);
            }
        }
    }
}

About

No description or website provided.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages