diff --git a/UXAssist/FactoryPatch.cs b/UXAssist/FactoryPatch.cs index ff372c8..17aec6a 100644 --- a/UXAssist/FactoryPatch.cs +++ b/UXAssist/FactoryPatch.cs @@ -45,6 +45,8 @@ public static class FactoryPatch } ); I18N.Add("KEYToggleDoNotRenderEntities", "Toggle Do Not Render Factory Entities", "切换不渲染工厂建筑实体"); + + BeltSignalsForBuyOut.InitPersist(); UnlimitInteractiveEnabled.SettingChanged += (_, _) => UnlimitInteractive.Enable(UnlimitInteractiveEnabled.Value); RemoveSomeConditionEnabled.SettingChanged += (_, _) => RemoveSomeConditionBuild.Enable(RemoveSomeConditionEnabled.Value); NightLightEnabled.SettingChanged += (_, _) => NightLight.Enable(NightLightEnabled.Value); @@ -99,6 +101,7 @@ public static class FactoryPatch AllowOverflowInLogistics.Enable(false); LogisticsCapacityTweaks.Enable(false); BeltSignalsForBuyOut.Enable(false); + BeltSignalsForBuyOut.UninitPersist(); _factoryPatch?.UnpatchSelf(); _factoryPatch = null; @@ -171,15 +174,6 @@ public static class FactoryPatch return matcher.InstructionEnumeration(); } - [HarmonyPostfix, HarmonyPriority(Priority.Last)] - [HarmonyPatch(typeof(VFPreload), nameof(VFPreload.InvokeOnLoadWorkEnded))] - private static void VFPreload_InvokeOnLoadWorkEnded_Postfix() - { - if (BeltSignalsForBuyOut.Initialized) return; - BeltSignalsForBuyOut.Initialized = true; - if (BeltSignalsForBuyOutEnabled.Value) BeltSignalsForBuyOut.EnableBeltSignals(); - } - public static class NightLight { private static Harmony _patch; @@ -1872,7 +1866,8 @@ public static class FactoryPatch private static class BeltSignalsForBuyOut { private static Harmony _patch; - public static bool Initialized; + private static Harmony _persistPatch; + private static bool _initialized; private static bool _loaded; private static AssetBundle _bundle; private static long _clusterSeedKey; @@ -1882,23 +1877,33 @@ public static class FactoryPatch private static Dictionary[] _signalBelts = new Dictionary[64]; private static readonly HashSet SignalBeltFactoryIndices = []; + public static void InitPersist() + { + AddBeltSignalProtos(); + _persistPatch = Harmony.CreateAndPatchAll(typeof(Persist)); + } + + public static void UninitPersist() + { + _persistPatch?.UnpatchSelf(); + _persistPatch = null; + } + public static void Enable(bool enable) { if (enable) { _patch ??= Harmony.CreateAndPatchAll(typeof(BeltSignalsForBuyOut)); - EnableBeltSignals(); return; } _patch?.UnpatchSelf(); _patch = null; - DisableBeltSignals(); } - public static void EnableBeltSignals() + private static void AddBeltSignalProtos() { - if (!Initialized || _loaded) return; + if (!_initialized || _loaded) return; var pluginfolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); _bundle = AssetBundle.LoadFromFile($"{pluginfolder}/uxassist.assetbundle"); var signals = LDB._signals; @@ -1975,9 +1980,9 @@ public static class FactoryPatch _loaded = true; } - private static void DisableBeltSignals() + private static void RemoveBeltSignalProtos() { - if (!Initialized || !_loaded) return; + if (!_initialized || !_loaded) return; var signals = LDB._signals; if (signals.dataIndices.TryGetValue(301, out var index)) { @@ -2022,7 +2027,7 @@ public static class FactoryPatch var signalBelts = GetOrCreateSignalBelts(factory); if (signalBelts.Count == 0) SignalBeltFactoryIndices.Add(factory); - signalBelts.Add(beltId, signal); + signalBelts[beltId] = signal; } private static Dictionary GetOrCreateSignalBelts(int index) @@ -2065,51 +2070,63 @@ public static class FactoryPatch signalBelts.Clear(); SignalBeltFactoryIndices.Remove(factory); } - - [HarmonyPostfix] - [HarmonyPatch(typeof(DigitalSystem), MethodType.Constructor, typeof(PlanetData))] - private static void DigitalSystem_Constructor_Postfix(PlanetData _planet) - { - var player = GameMain.mainPlayer; - if (player == null) return; - var factory = _planet?.factory; - if (factory == null) return; - RemovePlanetSignalBelts(factory.index); - } - - [HarmonyPostfix] - [HarmonyPatch(typeof(GameMain), nameof(GameMain.Begin))] - private static void GameMain_Begin_Postfix() - { - _clusterSeedKey = GameMain.data.GetClusterSeedKey(); - InitSignalBelts(); - } - [HarmonyPrefix] - [HarmonyPatch(typeof(CargoTraffic), nameof(CargoTraffic.RemoveBeltComponent))] - public static void CargoTraffic_RemoveBeltComponent_Prefix(int id) + private static class Persist { - var planet = GameMain.localPlanet; - if (planet == null) return; - RemoveSignalBelt(planet.factoryIndex, id); - } - - [HarmonyPostfix] - [HarmonyPatch(typeof(CargoTraffic), nameof(CargoTraffic.SetBeltSignalIcon))] - public static void CargoTraffic_SetBeltSignalIcon_Postfix(CargoTraffic __instance, int entityId, int signalId) - { - var planet = GameMain.localPlanet; - if (planet == null) return; - var factory = __instance.factory; - var factoryIndex = planet.factoryIndex; - var beltId = factory.entityPool[entityId].beltId; - if (signalId is < 301 or > 306) + [HarmonyPostfix, HarmonyPriority(Priority.Last)] + [HarmonyPatch(typeof(VFPreload), nameof(VFPreload.InvokeOnLoadWorkEnded))] + private static void VFPreload_InvokeOnLoadWorkEnded_Postfix() { - RemoveSignalBelt(factoryIndex, beltId); + if (BeltSignalsForBuyOut._initialized) return; + BeltSignalsForBuyOut._initialized = true; + BeltSignalsForBuyOut.AddBeltSignalProtos(); } - else + + [HarmonyPostfix] + [HarmonyPatch(typeof(DigitalSystem), MethodType.Constructor, typeof(PlanetData))] + private static void DigitalSystem_Constructor_Postfix(PlanetData _planet) { - SetSignalBelt(factoryIndex, beltId, (uint)signalId - 301U); + var player = GameMain.mainPlayer; + if (player == null) return; + var factory = _planet?.factory; + if (factory == null) return; + RemovePlanetSignalBelts(factory.index); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(GameMain), nameof(GameMain.Begin))] + private static void GameMain_Begin_Postfix() + { + _clusterSeedKey = GameMain.data.GetClusterSeedKey(); + InitSignalBelts(); + } + + [HarmonyPrefix] + [HarmonyPatch(typeof(CargoTraffic), nameof(CargoTraffic.RemoveBeltComponent))] + public static void CargoTraffic_RemoveBeltComponent_Prefix(int id) + { + var planet = GameMain.localPlanet; + if (planet == null) return; + RemoveSignalBelt(planet.factoryIndex, id); + } + + [HarmonyPostfix] + [HarmonyPatch(typeof(CargoTraffic), nameof(CargoTraffic.SetBeltSignalIcon))] + public static void CargoTraffic_SetBeltSignalIcon_Postfix(CargoTraffic __instance, int entityId, int signalId) + { + var planet = GameMain.localPlanet; + if (planet == null) return; + var factory = __instance.factory; + var factoryIndex = planet.factoryIndex; + var beltId = factory.entityPool[entityId].beltId; + if (signalId is < 301 or > 306) + { + RemoveSignalBelt(factoryIndex, beltId); + } + else + { + SetSignalBelt(factoryIndex, beltId, (uint)signalId - 301U); + } } } diff --git a/UXAssist/README.md b/UXAssist/README.md index 4001c2d..14e5cfd 100644 --- a/UXAssist/README.md +++ b/UXAssist/README.md @@ -4,6 +4,8 @@ #### 一些提升用户体验的功能和补丁 ## Changlog +* 1.1.2 + + `Belt signals for buy out dark fog items automatically`: Always add belt signals to the panel to fix missing belt icons when disabled. * 1.1.1 + Fix assetbundle loading issue * 1.1.0 @@ -225,6 +227,8 @@ * [CruiseAssist](https://dsp.thunderstore.io/package/tanu/CruiseAssist/) and its extension [AutoPilot](https://dsp.thunderstore.io/package/tanu/AutoPilot/): `Auto navigation on sailings` and `Auto-cruise` implementations ## 更新日志 +* 1.1.2 + + `用于自动购买黑雾物品的传送带信号`: 总是将传送带信号添加到面板,以修复禁用时传送带图标丢失的问题。 * 1.1.1 + 修复了资源包加载问题 * 1.1.0 diff --git a/UXAssist/UIConfigWindow.cs b/UXAssist/UIConfigWindow.cs index 3808319..2078c8d 100644 --- a/UXAssist/UIConfigWindow.cs +++ b/UXAssist/UIConfigWindow.cs @@ -208,7 +208,7 @@ public static class UIConfigWindow y = 10f; MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.StopEjectOnNodeCompleteEnabled, "Stop ejectors when available nodes are all filled up"); y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.OnlyConstructNodesEnabled, "Construct only nodes but frames"); + MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.OnlyConstructNodesEnabled, "Construct only structure points but frames"); x = 400f; y = 10f; wnd.AddButton(x, y, tab4, "Initialize Dyson Sphere", 16, "init-dyson-sphere", () => diff --git a/UXAssist/UXAssist.csproj b/UXAssist/UXAssist.csproj index 8943103..be8a8ad 100644 --- a/UXAssist/UXAssist.csproj +++ b/UXAssist/UXAssist.csproj @@ -4,7 +4,7 @@ net472 org.soardev.uxassist DSP MOD - UXAssist - 1.1.1 + 1.1.2 true latest UXAssist diff --git a/UXAssist/package/manifest.json b/UXAssist/package/manifest.json index ad575fb..c83c90c 100644 --- a/UXAssist/package/manifest.json +++ b/UXAssist/package/manifest.json @@ -1,6 +1,6 @@ { "name": "UXAssist", - "version_number": "1.1.1", + "version_number": "1.1.2", "website_url": "https://github.com/soarqin/DSP_Mods/tree/master/UXAssist", "description": "Some functions and patches for better user experience / 一些提升用户体验的功能和补丁", "dependencies": [