Amaroq7 / SPMod

SourcePawn Scripting Engine for Half-Life 1 based games
GNU General Public License v3.0
27 stars 12 forks source link

Menu Manager #36

Closed Mistrick closed 5 years ago

Mistrick commented 5 years ago

Description

Implementation of menu manager

Motivation and Context

Fixes #28

How has this been tested?

#include <spmod>

public PluginInfo pluginInfo =
{
    name = "test",
    version = "0.0.0",
    author = "author",
    url = "https://github.com/Amaroq7/SPMod"
};

Menu m, m2, m3, m4, m5;
bool hide = false;

public void OnPluginInit()
{
    Command("^say /m", MenuTest);
    Command("^say /m2", MenuTest2);
    Command("^say /m3", MenuTest5);
    Command("^say /m4", MenuTest6);
    Command("^say /m5", MenuTest7);
    Command("^say /cm", MenuTest3);
    Command("^say /h", MenuTest4);

    m = Menu(TestHandler, MenuItemStyle, true);
    m.SetTitle("Title");
    m.AddItem("one");
    m.AddItem("two");
    m.AddItem("three");
    m.AddItem("four", 0, ItemHandler);
    m.AddItem("5");
    m.AddItem("6");
    m.AddItem("7");
    m.AddItem("8");
    m.AddItem("9", 0, ItemHandler);
    m.AddItem("10");
    m.AddItem("11");

    m2 = Menu(TestHandler, MenuItemStyle, true);

    m2.SetTitle("Test 2");
    m2.AddItem("one", 1);
    m2.AddItem("two", 2);
    m2.AddItem("three", 3);
    m2.AddItem("four", 4);
    m2.AddItem("5", 5, ItemHandler3);
    m2.AddItem("6", 6, ItemHandler3);
    m2.AddItem("7", 7, ItemHandler3);
    m2.AddItem("8", 9, ItemHandler3);
    m2.AddItem("9", 10);
    m2.AddItem("10", 10);
    m2.AddItem("11", 10);
    m2.AddItem("12", 10);

    m2.SetProp(MProp_NumberFormat, "\\r[#num]");
    m2.ItemsPerPage = 4;

    m3 = Menu(TestHandler, MenuItemStyle, true);

    m3.SetTitle("Test 3");
    m3.AddItem("one");
    m3.AddItem("two");
    m3.AddItem("three");
    m3.AddItem("four");
    m3.AddItem("5", 0, ItemHandler3);
    m3.AddItem("6", 3, ItemHandler3);
    m3.AddItem("7");

    m3.AddStaticItem(0, "static1", 23, ItemHandler2);
    m3.AddStaticItem(5, "static2", 23, ItemHandler2);

    m3.ItemsPerPage = 5;

    m4 = Menu(TestHandler2, MenuTextStyle);

    char text[] = "Title\n\n1. One\n2. Two\n\n3. Exit";
    m4.SetText(text);
    m4.SetKeys((1<<0)|(1<<1)|(1<<2));

    m5 = Menu(TestHandler, MenuItemStyle, true);

    m5.SetTitle("Test 5");
    m5.AddItem("one");
    m5.AddItem("two");
    m5.AddItem("three");
    m5.AddItem("four", 0, ItemHandler);
    m5.AddItem("5");
    m5.AddItem("6");
    m5.InsertItem(0, "7");
    m5.InsertItem(0, "8");
    m5.InsertItem(0, "9", 0, ItemHandler);
    m5.InsertItem(0, "10");
    m5.InsertItem(0, "11");

    m5.RemoveItem(1);
} 

public ItemStatus ItemHandler(Menu menu, MenuItem item, int player)
{
    PrintToServer("Item callback: menu %d, item %d, player %d", menu, item, player);
    item.SetName("changed");
    return ItemDisabled;
}

public ItemStatus ItemHandler2(Menu menu, MenuItem item, int player)
{
    char name[64];
    item.GetName(name, sizeof name);
    PrintToServer("Item callback2: menu %d, item %s[%d], player %d", menu, name, item, player);

    return ItemEnabled;
}
public ItemStatus ItemHandler3(Menu menu, MenuItem item, int player)
{
    PrintToServer("Item callback3: menu %d, item %d, player %d", menu, item, player);
    return hide ? ItemHide : ItemEnabled;
}

public PluginReturn MenuTest(int client, Command cid)
{
    m.Display(client, 0, 10);
}
public PluginReturn MenuTest2(int client, Command cid)
{
    m2.Display(client);
}
public PluginReturn MenuTest5(int client, Command cid)
{
    m3.Display(client);
}
public PluginReturn MenuTest6(int client, Command cid)
{
    m4.Display(client);
}
public PluginReturn MenuTest7(int client, Command cid)
{
    m5.Display(client);
}

public PluginReturn MenuTest3(int client, Command cid)
{
    CloseMenu(client);
}

public PluginReturn MenuTest4(int client, Command cid)
{
    hide = !hide;
}

public int TestHandler(Menu menu, MenuItem item, int player)
{
    PrintToServer("menu %d, item %d, item data %d, player %d", menu, item, item.GetData(), player);
    return 0;
}
public int TestHandler2(Menu menu, int key, int player)
{
    PrintToServer("menu %d, key %d, player %d", menu, key, player);
    return 0;
}

Screenshots (if appropriate):

Types of changes

Checklist: