internal static void Prefix(MonkeySelectMenu __instance, Il2CppSystem.Object data)
            {
                if (!reOpening)
                {
                    var towerSets = new List <string>(__instance.TowerSets);
                    foreach (var modTowerSet in ModContent.GetContent <ModTowerSet>())
                    {
                        var towerSetIndex = modTowerSet.GetTowerSetIndex(towerSets);
                        towerSets.Insert(towerSetIndex, modTowerSet.Id);
                    }
                    __instance.TowerSets = towerSets.ToArray();
                }

                if (data == null)
                {
                    menu = null;

                    var model = Game.instance.model;
                    foreach (var set in __instance.TowerSets)
                    {
                        Offsets[set]      = 0;
                        TowersInSets[set] = model.towerSet.Where(details =>
                                                                 model.GetTowerFromId(details.towerId).towerSet == set).ToList();
                        TotalSpotses[set] = ((TowersInSets[set].Count - 1) / 8 + 1) * 8;
                    }
                }

                if (!reOpening)
                {
                    CreatePips(__instance);
                    CreateCustomButtons(__instance);
                }
            }
            internal static bool Prefix(MonkeySelectMenu __instance, ref string towerSet, bool swipeGesture,
                                        ref int __state) // State is the offset that the page should be at after this switch
            {
                __state = Offset;

                if (towerSet != currentTowerSet)
                {
                    // By default, switches will take the
                    __state = 0;

                    // Swipe gestures also include the left and right arrow buttons alongside swiping.
                    // This is how actual navigation between the different pages of the same tower sets happens
                    if (swipeGesture)
                    {
                        if (ItComesAfter(towerSet, currentTowerSet) && Offset != TotalSpots - 8)
                        {
                            // Move to next page of tower set
                            Cycle(Offset + 8);
                            return(false); // Don't switch to next tower set
                        }

                        if (ItComesBefore(towerSet, currentTowerSet))
                        {
                            if (Offset != 0)
                            {
                                // Move to previous page of tower set
                                Cycle(Offset - 8);
                                return(false); // Don't switch to previous tower set
                            }

                            // Move to previous tower set, with it's offset at the last place it can be at
                            __state = TotalSpotses[towerSet] - 8;
                        }
                    }
                }
                else if (!reOpening)
                {
                    // Like on the maps screen, clicking your current MonkeyGroupButton should cycle the set
                    Cycle(Offset + 8);
                }

                return(true);
            }
 internal static void Postfix(MonkeySelectMenu __instance)
 {
     //DestroyPips();
     //DestroyCustomButtons();
 }
 internal static void Postfix(MonkeySelectMenu __instance, string towerSet, bool swipeGesture, int __state)
 {
     UpdateTowerSet(__instance, __state);
     UpdatePips();
 }
 internal static void Postfix(MonkeySelectMenu __instance, Il2CppSystem.Object data)
 {
     menu = __instance;
     UpdateTowerSet(__instance);
     UpdatePips();
 }