public static void Reload(bool recrawl) { SaveData saveData = SaveData.Instance; // ChapterSelect only updates the ID. string lastAreaSID = saveData == null ? null : (AreaData.Get(saveData.LastArea.ID)?.ToKey().GetSID() ?? AreaKey.Default.GetSID()); // Note: SaveData.Instance.LastArea is reset by AreaData.Interlude_Safe -> SaveData.LevelSetStats realizing that AreaOffset == -1 // Store the "resolved" last selected area in a local variable, then re-set it after reloading. // Reload all maps. if (recrawl) { Everest.Content.Recrawl(); } lock (AreaReloadLock) { // prevent anything from calling AreaData.Get during this. AreaData.Unload(); AreaData.Load(); AreaData.ReloadMountainViews(); // Fake a save data reload to resync the save data to the new area list. if (saveData != null) { AreaData lastArea = AreaDataExt.Get(lastAreaSID); saveData.LastArea = lastArea?.ToKey() ?? AreaKey.Default; saveData.BeforeSave(); saveData.AfterInitialize(); } } if (Engine.Scene is Overworld overworld) { if (overworld.Mountain.Area >= AreaData.Areas.Count) { overworld.Mountain.EaseCamera(0, AreaData.Areas[0].MountainIdle, null, true); } OuiChapterSelect chapterSelect = overworld.GetUI <OuiChapterSelect>(); overworld.UIs.Remove(chapterSelect); overworld.Remove(chapterSelect); chapterSelect = new OuiChapterSelect(); chapterSelect.Visible = false; overworld.Add(chapterSelect); overworld.UIs.Add(chapterSelect); chapterSelect.IsStart(overworld, (Overworld.StartMode)(-1)); } }
private void HideAltSides(On.Celeste.OuiChapterSelect.orig_Added orig, OuiChapterSelect self, Scene scene) { orig(self, scene); var icons = new DynData <OuiChapterSelect>(self).Get <List <OuiChapterSelectIcon> >("icons"); for (int i = icons.Count - 1; i >= 0; i--) { var meta = GetMetaForAreaData(AreaData.Get(icons[i].Area)); if (meta?.AltSideData.IsAltSide ?? false) { icons[i].Area = -1; icons[i].Hide(); } } }
private bool ReturnToAltSide(On.Celeste.OuiChapterSelect.orig_IsStart orig, OuiChapterSelect self, Overworld overworld, Overworld.StartMode start) { if (start == Overworld.StartMode.AreaComplete || start == Overworld.StartMode.AreaQuit) { AreaData area = AreaData.Get(SaveData.Instance.LastArea.ID); var meta = GetMetaForAreaData(area); if (meta?.AltSideData.IsAltSide ?? false) { area = AreaData.Get(meta.AltSideData.For) ?? area; if (area != null) { SaveData.Instance.LastArea.ID = area.ID; } } } return(orig(self, overworld, start)); }
private static int OnChapterSelectGetArea(orig_OuiChapterSelect_get_area orig, OuiChapterSelect self) { int prevArea = orig(self); var meta = GetMetaForAreaData(AreaData.Areas[prevArea]); if (meta?.AltSideData.IsAltSide ?? false) { prevArea = AreaData.Areas.IndexOf(AreaData.Get(meta.AltSideData.For)); } return(prevArea); }