public void ctor(ProcessManager manager) { //Delegate to call the base constructor Type[] constructorSignature = new Type[2]; constructorSignature[0] = typeof(ProcessManager); constructorSignature[1] = typeof(ProcessManager.ProcessID); RuntimeMethodHandle handle = typeof(Menu.Menu).GetConstructor(constructorSignature).MethodHandle; RuntimeHelpers.PrepareMethod(handle); IntPtr ptr = handle.GetFunctionPointer(); Action <ProcessManager, ProcessManager.ProcessID> funct = (Action <ProcessManager, ProcessManager.ProcessID>)Activator.CreateInstance(typeof(Action <ProcessManager, ProcessManager.ProcessID>), this, ptr); funct(manager, ProcessManager.ProcessID.SlugcatSelect);//Menu.Menu Constructor pages.Add(new Menu.Page(this, null, "main", 0)); if (!manager.rainWorld.flatIllustrations) { rainEffect = new Menu.RainEffect(this, pages[0]); pages[0].subObjects.Add(rainEffect); } if (CheckUnlockRed()) { manager.rainWorld.progression.miscProgressionData.redUnlocked = true; } slugcatColorOrder = new int[] { 1, 0, 2 }; for (int i = 0; i < slugcatColorOrder.Length; i++) { if (slugcatColorOrder[i] == manager.rainWorld.progression.miscProgressionData.currentlySelectedSinglePlayerSlugcat) { slugcatPageIndex = i; } } slugcatPageIndex = 1; saveGameData = new Menu.SlugcatSelectMenu.SaveGameData[3]; for (int j = 0; j < 3; j++) { saveGameData[j] = MineForSaveData(manager, slugcatColorOrder[j]); } if (saveGameData[2] != null && ((saveGameData[2].redsDeath && saveGameData[2].cycle >= RedsIllness.RedsCycles(saveGameData[2].redsExtraCycles)) || saveGameData[2].ascended)) { redIsDead = true; } int num = 0; for (int k = 0; k < 3; k++) { if (saveGameData[k] != null) { num++; } } if (num == 1) { for (int l = 0; l < 3; l++) { if (saveGameData[l] != null) { slugcatPageIndex = l; break; } } } slugcatPages = new Menu.SlugcatSelectMenu.SlugcatPage[3]; for (int m = 0; m < slugcatPages.Length; m++) { if (saveGameData[m] != null) { slugcatPages[m] = new Menu.SlugcatSelectMenu.SlugcatPageContinue(this, null, 1 + m, slugcatColorOrder[m]); } else { slugcatPages[m] = new Menu.SlugcatSelectMenu.SlugcatPageNewGame(this, null, 1 + m, slugcatColorOrder[m]); } pages.Add(slugcatPages[m]); } startButton = new Menu.HoldButton(this, pages[0], string.Empty, "START", new Vector2(683f, 85f), 40f); pages[0].subObjects.Add(startButton); pages[0].subObjects.Add(new Menu.SimpleButton(this, pages[0], "BACK", "BACK", new Vector2(200f, 668f), new Vector2(110f, 30f))); //this.pages[0].subObjects.Add(new Menu.BigArrowButton(this, this.pages[0], "PREV", new Vector2(200f, 50f), -1)); //this.pages[0].subObjects.Add(new Menu.BigArrowButton(this, this.pages[0], "NEXT", new Vector2(1116f, 50f), 1)); //Removed access to other characters float textWidth = 85f; restartCheckbox = new Menu.CheckBox(this, pages[0], this, new Vector2(startButton.pos.x + 200f, 30f), textWidth, "Restart game", "RESTART"); pages[0].subObjects.Add(restartCheckbox); UpdateStartButtonText(); UpdateSelectedSlugcatInMiscProg(); mySoundLoopID = SoundID.MENU_Main_Menu_LOOP; }
/// <summary> /// Retrieves the region name to show it in the slugcat select menu /// </summary> private static void SlugcatPageContinue_ctor(On.Menu.SlugcatSelectMenu.SlugcatPageContinue.orig_ctor orig, Menu.SlugcatSelectMenu.SlugcatPageContinue self, Menu.Menu menu, Menu.MenuObject owner, int pageIndex, int slugcatNumber) { orig(self, menu, owner, pageIndex, slugcatNumber); if (self.saveGameData.shelterName != null && self.saveGameData.shelterName.Length > 2) { string regID = self.saveGameData.shelterName.Substring(0, 2); bool customRegion = true; List <string> vanillaRegions = CustomWorldMod.VanillaRegions().ToList(); for (int i = 0; i < vanillaRegions.Count; i++) { if (regID == vanillaRegions[i]) { customRegion = false; } } if (customRegion) { foreach (MenuObject label in self.subObjects) { if (label is MenuLabel && label == self.regionLabel && (label as MenuLabel).text.Length < 3) { string fullRegionName = "N / A"; //CustomWorldMod.activatedPacks.TryGetValue(text2, out fullRegionName); if (CustomWorldMod.activeModdedRegions.Contains(regID)) { foreach (KeyValuePair <string, string> entry in CustomWorldMod.activatedPacks) { if (CustomWorldMod.installedPacks[entry.Key].regions.Contains(regID)) { string regionName = CWorld.RegionHook.GetSubRegionName(entry.Value, regID); if (CustomWorldMod.installedPacks[entry.Key].useRegionName && regionName != null) { fullRegionName = regionName; CustomWorldMod.Log($"Displaying region name: [{fullRegionName}]. If your pack" + $"contains multiple regions, add \"useRegionName\" to the packInfo.json to use" + $"the Subregion field from the Properties.txt file"); } else { fullRegionName = entry.Key; CustomWorldMod.Log($"Displaying pack name: [{fullRegionName}]."); //[OUTDATED] If you pack contains multiple regions, contact @Garrakx."); } break; } } } if (fullRegionName != null) { if (fullRegionName.Length > 0) { regID = fullRegionName; fullRegionName = string.Concat(new object[] { regID, " - ", menu.Translate("Cycle"), " ", (slugcatNumber != 2) ? self.saveGameData.cycle : (RedsIllness.RedsCycles(self.saveGameData.redsExtraCycles) - self.saveGameData.cycle) }); } (label as MenuLabel).text = fullRegionName; break; } } } } } }