using System.Collections.Generic; using BepInEx.Configuration; using CruiseAssist.Commons; using CruiseAssist.Enums; using CruiseAssist.UI; namespace CruiseAssist; internal class CruiseAssistConfigManager(ConfigFile config) : ConfigManager(config) { protected override void CheckConfigImplements(Step step) { var saveFlag = false; switch (step) { case Step.Awake: saveFlag = OnAwake(); OnAwakeOrGameMainBegin(); OnAwakeOrGameMainBeginOrStateOrChangeSeed(); break; case Step.GameMainBegin: OnAwakeOrGameMainBegin(); OnAwakeOrGameMainBeginOrStateOrChangeSeed(); break; case Step.ChangeSeed: OnAwakeOrGameMainBeginOrStateOrChangeSeed(); break; case Step.State: OnAwakeOrGameMainBeginOrStateOrChangeSeed(); saveFlag = OnState(); break; case Step.UniverseGenCreateGalaxy: default: break; } if (saveFlag) { Save(); } } private static bool OnState() { var saveFlag = false; LogManager.LogInfo("check state."); saveFlag |= UpdateEntry("Setting", "Enable", CruiseAssistPlugin.Enable); saveFlag |= UpdateEntry("Setting", "MarkVisited", CruiseAssistPlugin.Conf.MarkVisitedFlag); saveFlag |= UpdateEntry("Setting", "SelectFocus", CruiseAssistPlugin.Conf.SelectFocusFlag); saveFlag |= UpdateEntry("Setting", "HideDuplicateHistory", CruiseAssistPlugin.Conf.HideDuplicateHistoryFlag); saveFlag |= UpdateEntry("Setting", "AutoDisableLockCursor", CruiseAssistPlugin.Conf.AutoDisableLockCursorFlag); saveFlag |= UpdateEntry("Setting", "ShowMainWindowWhenTargetSelectedEvenNotSailMode", CruiseAssistPlugin.Conf.ShowMainWindowWhenTargetSelectedEvenNotSailModeFlag); saveFlag |= UpdateEntry("Setting", "CloseStarListWhenSetTargetPlanet", CruiseAssistPlugin.Conf.CloseStarListWhenSetTargetPlanetFlag); saveFlag |= UpdateEntry("Setting", "HideBottomCloseButton", CruiseAssistPlugin.Conf.HideBottomCloseButtonFlag); saveFlag |= UpdateEntry("Setting", "UIScale", (int)CruiseAssistMainUI.Scale); saveFlag |= UpdateEntry("Setting", "MainWindowViewMode", CruiseAssistMainUI.ViewMode.ToString()); for (var j = 0; j < 2; j++) { saveFlag |= UpdateEntry("State", $"MainWindow{j}Left", (int)CruiseAssistMainUI.Rect[j].x); saveFlag |= UpdateEntry("State", $"MainWindow{j}Top", (int)CruiseAssistMainUI.Rect[j].y); saveFlag |= UpdateEntry("State", $"StarListWindow{j}Left", (int)CruiseAssistStarListUI.Rect[j].x); saveFlag |= UpdateEntry("State", $"StarListWindow{j}Top", (int)CruiseAssistStarListUI.Rect[j].y); saveFlag |= UpdateEntry("State", $"ConfigWindow{j}Left", (int)CruiseAssistConfigUI.Rect[j].x); saveFlag |= UpdateEntry("State", $"ConfigWindow{j}Top", (int)CruiseAssistConfigUI.Rect[j].y); } saveFlag |= UpdateEntry("State", "StarListWindowListSelected", CruiseAssistStarListUI.ListSelected); saveFlag |= UpdateEntry("State", "DebugWindowLeft", (int)CruiseAssistDebugUI.Rect.x); saveFlag |= UpdateEntry("State", "DebugWindowTop", (int)CruiseAssistDebugUI.Rect.y); if (CruiseAssistPlugin.Seed != -1) { saveFlag |= UpdateEntry("Save", $"History_{CruiseAssistPlugin.Seed}", ListUtils.ToString(CruiseAssistPlugin.History)); saveFlag |= UpdateEntry("Save", $"Bookmark_{CruiseAssistPlugin.Seed}", ListUtils.ToString(CruiseAssistPlugin.Bookmark)); } CruiseAssistMainUI.NextCheckGameTick = long.MaxValue; return saveFlag; } private static void OnAwakeOrGameMainBeginOrStateOrChangeSeed() { if (DSPGame.IsMenuDemo || GameMain.galaxy == null) { var reset = CruiseAssistPlugin.Seed != -1; if (!reset) return; CruiseAssistPlugin.Seed = -1; CruiseAssistPlugin.History = new List(); CruiseAssistPlugin.Bookmark = new List(); LogManager.LogInfo("clear seed."); } else { if (CruiseAssistPlugin.Seed == GameMain.galaxy.seed) return; CruiseAssistPlugin.Seed = GameMain.galaxy.seed; CruiseAssistPlugin.History = ListUtils.ParseToIntList(Bind("Save", $"History_{CruiseAssistPlugin.Seed}", "").Value); CruiseAssistPlugin.Bookmark = ListUtils.ParseToIntList(Bind("Save", $"Bookmark_{CruiseAssistPlugin.Seed}", "").Value); LogManager.LogInfo($"change seed {CruiseAssistPlugin.Seed}."); } } private static void OnAwakeOrGameMainBegin() { CruiseAssistDebugUI.Show = Bind("Debug", "DebugWindowShow", false).Value; CruiseAssistPlugin.Enable = Bind("Setting", "Enable", true).Value; CruiseAssistPlugin.Conf.MarkVisitedFlag = Bind("Setting", "MarkVisited", true).Value; CruiseAssistPlugin.Conf.SelectFocusFlag = Bind("Setting", "SelectFocus", true).Value; CruiseAssistPlugin.Conf.HideDuplicateHistoryFlag = Bind("Setting", "HideDuplicateHistory", true).Value; CruiseAssistPlugin.Conf.AutoDisableLockCursorFlag = Bind("Setting", "AutoDisableLockCursor", false).Value; CruiseAssistPlugin.Conf.ShowMainWindowWhenTargetSelectedEvenNotSailModeFlag = Bind("Setting", "ShowMainWindowWhenTargetSelectedEvenNotSailMode", true).Value; CruiseAssistPlugin.Conf.CloseStarListWhenSetTargetPlanetFlag = Bind("Setting", "CloseStarListWhenSetTargetPlanet", false).Value; CruiseAssistPlugin.Conf.HideBottomCloseButtonFlag = Bind("Setting", "HideBottomCloseButton", true).Value; CruiseAssistMainUI.Scale = Bind("Setting", "UIScale", 150).Value; var viewModeStr = Bind("Setting", "MainWindowViewMode", CruiseAssistMainUIViewMode.Full.ToString()).Value; EnumUtils.TryParse(viewModeStr, out CruiseAssistMainUI.ViewMode); for (var i = 0; i < 2; i++) { CruiseAssistMainUI.Rect[i].x = Bind("State", $"MainWindow{i}Left", 100).Value; CruiseAssistMainUI.Rect[i].y = Bind("State", $"MainWindow{i}Top", 100).Value; CruiseAssistStarListUI.Rect[i].x = Bind("State", $"StarListWindow{i}Left", 100).Value; CruiseAssistStarListUI.Rect[i].y = Bind("State", $"StarListWindow{i}Top", 100).Value; CruiseAssistConfigUI.Rect[i].x = Bind("State", $"ConfigWindow{i}Left", 100).Value; CruiseAssistConfigUI.Rect[i].y = Bind("State", $"ConfigWindow{i}Top", 100).Value; } CruiseAssistStarListUI.ListSelected = Bind("State", "StarListWindowListSelected", 0).Value; CruiseAssistDebugUI.Rect.x = Bind("State", "DebugWindowLeft", 100).Value; CruiseAssistDebugUI.Rect.y = Bind("State", "DebugWindowTop", 100).Value; } private static bool OnAwake() { var configEntry = Bind("Base", "ModVersion", "0.0.37", "Don't change."); configEntry.Value = "0.0.37"; Migration("State", "MainWindow0Left", 100, "State", "InfoWindowLeft"); Migration("State", "MainWindow0Top", 100, "State", "InfoWindowTop"); Migration("State", "MainWindow0Left", 100, "State", "MainWindowLeft"); Migration("State", "MainWindow0Top", 100, "State", "MainWindowTop"); Migration("State", "StarListWindow0Left", 100, "State", "StarListWindowLeft"); Migration("State", "StarListWindow0Top", 100, "State", "StarListWindowTop"); Migration("Setting", "CloseStarListWhenSetTargetPlanet", false, "Setting", "HideStarListWhenSetTargetPlanet"); return true; } }