BluePrints

Blueprints is a class that has been created to help provide and ease the creation of commonly used functionality in modmenus.

Confirm Dialogue

Add a new screen that shows up when back button or escape is pressed that acts as a confirm dialogue. Confirm Dialogue Example Example:

public MenuScreen GetMenuScreen(MenuScreen modListMenu, ModToggleDelegates? toggleDelegates)
{
    //create your menu screen
    MenuRef ??= new Menu("My MenuScreen", new Element[]
    {
        //add elements here
    });

    // we need to create a menuscreen before a confirm dialogue can be attached
    var menuScreen = MenuRef.GetMenuScreen(modlistmenu);

    //after creation we can call the function
    MenuRef.AddConfirmDialog(
        title: "Are you sure",
        subTitle: "Do you really wanna go back",
        Options: new string[] { "Yes", "No" }, //the list of buttons that will be shown
        OnButtonPress: (selection) => //what will happen on any of the button press. 
        //Note that selection is a string and we have to check which button is pressed
        //by equating the button names (as given above) :(
        {
            switch (selection)
            {
                case "Yes": //if yes, take user to previous menu (modlist menu in this case)
                    Satchel.BetterMenus.Utils.GoToMenuScreen(modlistmenu);
                    break;
                case "No": //if no, take user back to inital menu (the one that this is attached to)
                    Satchel.BetterMenus.Utils.GoToMenuScreen(MenuRef.menuScreen);
                    break;
            }
        });
    return menuScreen; //return our menuscreen to mapi
}

Notes:

  • Unfortunately the order given must be followed (MenuRef creation -> calling MenuRef.GetMenuScreen -> creating confirm dialogue -> returning menu screen)
  • if you want the confirm dialogue to contain more buttons, you can add those to the Options array just as the example. Those buttons will be placed 2 per row unless specified using the optionsPerRow optional parameter
  • if you want your confirm dialogue to have anything else or want more customization you can use MenuRef.AddConfirmDialog which takes in a MenuRef as parameter. In that you can add what you want
  • If user presses esc, they will be taken back to inital menu (the one that the confirm dialogue is attached to)

Key And Button Bind

A blueprint to create a row with keybind and a button bind where only the binding area of them are selectable

MenuRef = new Menu("Example Mod Menu", new Element[]
        {
            Blueprints.KeyAndButtonBind(
                name: "Action 1",
                keyBindAction: keyBinds.Key1, 
                buttonBindAction: keyBinds.Button1),
        });

Key and Button Bind Example

Mod Toggle

A blueprint that makes it easier to add a mod Toggle Option that takes in the ModToggleDelegates to Initialize/Unload an IToggleable Mods

MenuRef = new Menu("Example Mod Menu", new Element[]
        {
            Blueprints.CreateToggle(
                toggleDelegates: modToggleDelegates.Value, //the ModToggleDelegates provided by MAPI 
                name: "Mod Enabled",  
                description: "Should mod be enabled?"),
        });

Mod Toggle Example

A blueprint to make a button to take you to a new menuscreen. Helps create more pages in the mod menu

MenuRef = new Menu("Example Mod Menu", new Element[]
        {
            Blueprints.NavigateToMenu(
                name: "Extra Menu", 
                description: "Go to Extra Menu Page", 
                getScreen: () => ExtraMenuRef.GetMenuScreen(MenuRef.menuScreen)) //this is a Func<MenuScreen> you have to return the "Next Page" MenuScreen here
        });

Navigate To Menu Example

Notice How in GetMenuScreen, MenuRef.menuScreen was passed and not modlistmenu. This is so the back button in extra menu leads to previous menu and not the Mods menu

Update Visibility

A blueprint that allows you to set visibility of multiple elements together Makes it easier because you dont have to manually find each element and also you don't need to call MenuRef.Update (the blueprint will do it for you) Example:

new HorizontalOption(
        name: "Option Enabled",
        description: "Click here to enable/disable option",
        values: new string[] {"Yes", "No"},
        applySetting: (index) =>
        {
            GlobalSettings.OptionIsEnabled = index == 0; //if index is equal to 0, yes was selected
            MenuRef.UpdateVisibility(GlobalSettings.OptionIsEnabled, //the value isVisible should be set to
                new []{ "MenuButton1", "KeyBind1", "MenuRow1" }); //these are a string array of element ids whose visibility needs to be updated
        },
        loadSetting: () => GlobalSettings.OptionIsEnabled ? 0 : 1) //if OptionIsEnabled is true, return 0 (yes) else return 1 (no)

Get Cached MenuScreen

A blueprint that gives you back an old menuscreen if it is available. Best used in NavigateToMenu Blueprint Example:

Blueprints.NavigateToMenu(
        name: "Extra Menu", 
        description: "Go to Extra Menu Page", 
        getScreen: () => ExtraMenuRef.GetCachedMenuScreen(MenuRef.menuScreen)),