diff --git a/CheatEnabler/BirthPlanetPatch.cs b/CheatEnabler/BirthPlanetPatch.cs new file mode 100644 index 0000000..18ef0a3 --- /dev/null +++ b/CheatEnabler/BirthPlanetPatch.cs @@ -0,0 +1,172 @@ +using System.Collections.Generic; +using BepInEx.Configuration; +using HarmonyLib; + +namespace CheatEnabler; +public static class BirthPlanetPatch +{ + public static ConfigEntry SitiVeinsOnBirthPlanet; + public static ConfigEntry FireIceOnBirthPlanet; + public static ConfigEntry KimberliteOnBirthPlanet; + public static ConfigEntry FractalOnBirthPlanet; + public static ConfigEntry OrganicOnBirthPlanet; + public static ConfigEntry OpticalOnBirthPlanet; + public static ConfigEntry SpiniformOnBirthPlanet; + public static ConfigEntry UnipolarOnBirthPlanet; + public static ConfigEntry FlatBirthPlanet; + public static ConfigEntry HighLuminosityBirthStar; + + private static BackupData _backupData; + private static bool _initialized; + private static Harmony _patch; + + private struct BackupData + { + public void FromTheme(ThemeProto theme) + { + _algos = theme.Algos.Clone() as int[]; + _veinSpot = theme.VeinSpot.Clone() as int[]; + _veinCount = theme.VeinCount.Clone() as float[]; + _veinOpacity = theme.VeinOpacity.Clone() as float[]; + _rareVeins = theme.RareVeins.Clone() as int[]; + _rareSettings = theme.RareSettings.Clone() as float[]; + _specifyBirthStarMass = StarGen.specifyBirthStarMass; + _inited = true; + } + + public void ToTheme(ThemeProto theme) + { + if (!_inited) return; + theme.Algos = _algos.Clone() as int[]; + theme.VeinSpot = _veinSpot.Clone() as int[]; + theme.VeinCount = _veinCount.Clone() as float[]; + theme.VeinOpacity = _veinOpacity.Clone() as float[]; + theme.RareVeins = _rareVeins.Clone() as int[]; + theme.RareSettings = _rareSettings.Clone() as float[]; + StarGen.specifyBirthStarMass = _specifyBirthStarMass; + } + + private bool _inited; + private int[] _algos; + private int[] _veinSpot; + private float[] _veinCount; + private float[] _veinOpacity; + private int[] _rareVeins; + private float[] _rareSettings; + private float _specifyBirthStarMass; + } + + public static void Init() + { + SitiVeinsOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + FireIceOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + KimberliteOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + FractalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + OrganicOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + OpticalOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + SpiniformOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + UnipolarOnBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + FlatBirthPlanet.SettingChanged += (_, _) => PatchBirthThemeData(); + HighLuminosityBirthStar.SettingChanged += (_, _) => PatchBirthThemeData(); + PatchBirthThemeData(); + _patch = Harmony.CreateAndPatchAll(typeof(DevShortcuts)); + } + + public static void Uninit() + { + if (_patch == null) return; + _patch.UnpatchSelf(); + _patch = null; + } + + [HarmonyPostfix, HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")] + private static void VFPreload_InvokeOnLoadWorkEnded_Postfix() + { + PatchBirthThemeData(); + } + + private static void PatchBirthThemeData() + { + var theme = LDB.themes.Select(1); + if (!_initialized) + { + _backupData.FromTheme(theme); + } + else + { + _backupData.ToTheme(theme); + } + + if (FlatBirthPlanet.Value) + { + theme.Algos[0] = 2; + } + + if (SitiVeinsOnBirthPlanet.Value) + { + theme.VeinSpot[2] = 2; + theme.VeinSpot[3] = 2; + theme.VeinCount[2] = 0.7f; + theme.VeinCount[3] = 0.7f; + theme.VeinOpacity[2] = 1f; + theme.VeinOpacity[3] = 1f; + } + + List veins = new(); + List settings = new(); + if (FireIceOnBirthPlanet.Value) + { + veins.Add(8); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (KimberliteOnBirthPlanet.Value) + { + veins.Add(9); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (FractalOnBirthPlanet.Value) + { + veins.Add(10); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (OrganicOnBirthPlanet.Value) + { + veins.Add(11); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (OpticalOnBirthPlanet.Value) + { + veins.Add(12); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (SpiniformOnBirthPlanet.Value) + { + veins.Add(13); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (UnipolarOnBirthPlanet.Value) + { + veins.Add(14); + settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); + } + + if (veins.Count > 0) + { + theme.RareVeins = veins.ToArray(); + theme.RareSettings = settings.ToArray(); + } + + if (HighLuminosityBirthStar.Value) + { + StarGen.specifyBirthStarMass = 100f; + } + + _initialized = true; + } +} diff --git a/CheatEnabler/CheatEnabler.cs b/CheatEnabler/CheatEnabler.cs index befa8f6..900f0d3 100644 --- a/CheatEnabler/CheatEnabler.cs +++ b/CheatEnabler/CheatEnabler.cs @@ -19,17 +19,6 @@ public class CheatEnabler : BaseUnityPlugin private static bool _configWinInitialized = false; private static KeyboardShortcut _shortcut = KeyboardShortcut.Deserialize("H + LeftControl"); private static UIConfigWindow _configWin; - private static bool _sitiVeinsOnBirthPlanet = true; - private static bool _fireIceOnBirthPlanet = false; - private static bool _kimberliteOnBirthPlanet = false; - private static bool _fractalOnBirthPlanet = false; - private static bool _organicOnBirthPlanet = true; - private static bool _opticalOnBirthPlanet = false; - private static bool _spiniformOnBirthPlanet = false; - private static bool _unipolarOnBirthPlanet = false; - private static bool _flatBirthPlanet = true; - private static bool _highLuminosityBirthStar = true; - private static bool _terraformAnyway = false; private static string _unlockTechToMaximumLevel = ""; private static readonly List TechToUnlock = new(); @@ -47,32 +36,32 @@ public class CheatEnabler : BaseUnityPlugin "always infinite natural resource"); ResourcePatch.FastEnabled = Config.Bind("Planet", "FastMining", false, "super-fast mining speed"); - _unlockTechToMaximumLevel = Config.Bind("General", "UnlockTechToMaxLevel", _unlockTechToMaximumLevel, - "Unlock listed tech to MaxLevel").Value; WaterPumperPatch.Enabled = Config.Bind("Planet", "WaterPumpAnywhere", false, "Can pump water anywhere (while water type is not None)"); - _sitiVeinsOnBirthPlanet = Config.Bind("Birth", "SiTiVeinsOnBirthPlanet", _sitiVeinsOnBirthPlanet, - "Has Silicon/Titanium veins on birth planet").Value; - _fireIceOnBirthPlanet = Config.Bind("Birth", "FireIceOnBirthPlanet", _fireIceOnBirthPlanet, - "Fire ice on birth planet (You should enable Rare Veins first)").Value; - _kimberliteOnBirthPlanet = Config.Bind("Birth", "KimberliteOnBirthPlanet", _kimberliteOnBirthPlanet, - "Kimberlite on birth planet (You should enable Rare Veins first)").Value; - _fractalOnBirthPlanet = Config.Bind("Birth", "FractalOnBirthPlanet", _fractalOnBirthPlanet, - "Fractal silicon on birth planet (You should enable Rare Veins first)").Value; - _organicOnBirthPlanet = Config.Bind("Birth", "OrganicOnBirthPlanet", _organicOnBirthPlanet, - "Organic crystal on birth planet (You should enable Rare Veins first)").Value; - _opticalOnBirthPlanet = Config.Bind("Birth", "OpticalOnBirthPlanet", _opticalOnBirthPlanet, - "Optical grating crystal on birth planet (You should enable Rare Veins first)").Value; - _spiniformOnBirthPlanet = Config.Bind("Birth", "SpiniformOnBirthPlanet", _spiniformOnBirthPlanet, - "Spiniform stalagmite crystal on birth planet (You should enable Rare Veins first)").Value; - _unipolarOnBirthPlanet = Config.Bind("Birth", "UnipolarOnBirthPlanet", _unipolarOnBirthPlanet, - "Unipolar magnet on birth planet (You should enable Rare Veins first)").Value; - _flatBirthPlanet = Config.Bind("Birth", "FlatBirthPlanet", _flatBirthPlanet, - "Birth planet is solid flat (no water)").Value; - _highLuminosityBirthStar = Config.Bind("Birth", "HighLuminosityBirthStar", _highLuminosityBirthStar, - "Birth star has high luminosity").Value; - TerraformPatch.Enabled = Config.Bind("General", "TerraformAnyway", false, + TerraformPatch.Enabled = Config.Bind("Planet", "TerraformAnyway", false, "Can do terraform without enough sands"); + BirthPlanetPatch.SitiVeinsOnBirthPlanet = Config.Bind("Birth", "SiTiVeinsOnBirthPlanet", false, + "Silicon/Titanium on birth planet"); + BirthPlanetPatch.FireIceOnBirthPlanet = Config.Bind("Birth", "FireIceOnBirthPlanet", false, + "Fire ice on birth planet"); + BirthPlanetPatch.KimberliteOnBirthPlanet = Config.Bind("Birth", "KimberliteOnBirthPlanet", false, + "Kimberlite on birth planet"); + BirthPlanetPatch.FractalOnBirthPlanet = Config.Bind("Birth", "FractalOnBirthPlanet", false, + "Fractal silicon on birth planet"); + BirthPlanetPatch.OrganicOnBirthPlanet = Config.Bind("Birth", "OrganicOnBirthPlanet", false, + "Organic crystal on birth planet"); + BirthPlanetPatch.OpticalOnBirthPlanet = Config.Bind("Birth", "OpticalOnBirthPlanet", false, + "Optical grating crystal on birth planet"); + BirthPlanetPatch.SpiniformOnBirthPlanet = Config.Bind("Birth", "SpiniformOnBirthPlanet", false, + "Spiniform stalagmite crystal on birth planet"); + BirthPlanetPatch.UnipolarOnBirthPlanet = Config.Bind("Birth", "UnipolarOnBirthPlanet", false, + "Unipolar magnet on birth planet"); + BirthPlanetPatch.FlatBirthPlanet = Config.Bind("Birth", "FlatBirthPlanet", false, + "Birth planet is solid flat (no water at all)"); + BirthPlanetPatch.HighLuminosityBirthStar = Config.Bind("Birth", "HighLuminosityBirthStar", false, + "Birth star has high luminosity"); + _unlockTechToMaximumLevel = Config.Bind("General", "UnlockTechToMaxLevel", _unlockTechToMaximumLevel, + "Unlock listed tech to MaxLevel").Value; I18N.Init(); I18N.Add("CheatEnabler Config", "CheatEnabler Config", "CheatEnabler设置"); @@ -85,7 +74,9 @@ public class CheatEnabler : BaseUnityPlugin DevShortcuts.Init(); AbnormalDisabler.Init(); ResourcePatch.Init(); - + WaterPumperPatch.Init(); + TerraformPatch.Init(); + BirthPlanetPatch.Init(); foreach (var idstr in _unlockTechToMaximumLevel.Split(',')) { if (int.TryParse(idstr, out var id)) @@ -93,26 +84,15 @@ public class CheatEnabler : BaseUnityPlugin TechToUnlock.Add(id); } } - if (TechToUnlock.Count > 0) { Harmony.CreateAndPatchAll(typeof(UnlockTechOnGameStart)); } - - WaterPumperPatch.Init(); - - if (_sitiVeinsOnBirthPlanet || _fireIceOnBirthPlanet || _kimberliteOnBirthPlanet || _fractalOnBirthPlanet || - _organicOnBirthPlanet || _opticalOnBirthPlanet || _spiniformOnBirthPlanet || _unipolarOnBirthPlanet || - _flatBirthPlanet || _highLuminosityBirthStar) - { - Harmony.CreateAndPatchAll(typeof(BirthPlanetCheat)); - } - - TerraformPatch.Init(); } public void OnDestroy() { + BirthPlanetPatch.Uninit(); TerraformPatch.Uninit(); WaterPumperPatch.Uninit(); ResourcePatch.Uninit(); @@ -293,78 +273,4 @@ public class CheatEnabler : BaseUnityPlugin } } - private class BirthPlanetCheat - { - [HarmonyPostfix, HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")] - private static void VFPreload_InvokeOnLoadWorkEnded_Postfix() - { - var theme = LDB.themes.Select(1); - if (_flatBirthPlanet) - { - theme.Algos[0] = 2; - } - - if (_sitiVeinsOnBirthPlanet) - { - theme.VeinSpot[2] = 2; - theme.VeinSpot[3] = 2; - theme.VeinCount[2] = 0.7f; - theme.VeinCount[3] = 0.7f; - theme.VeinOpacity[2] = 1f; - theme.VeinOpacity[3] = 1f; - } - - List veins = new(); - List settings = new(); - if (_fireIceOnBirthPlanet) - { - veins.Add(8); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_kimberliteOnBirthPlanet) - { - veins.Add(9); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_fractalOnBirthPlanet) - { - veins.Add(10); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_organicOnBirthPlanet) - { - veins.Add(11); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_opticalOnBirthPlanet) - { - veins.Add(12); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_spiniformOnBirthPlanet) - { - veins.Add(13); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - if (_unipolarOnBirthPlanet) - { - veins.Add(14); - settings.AddRange(new[] { 1f, 1f, 0.5f, 1f }); - } - - theme.RareVeins = veins.ToArray(); - theme.RareSettings = settings.ToArray(); - if (_highLuminosityBirthStar) - { - StarGen.specifyBirthStarMass = 100f; - } - } - } - } \ No newline at end of file diff --git a/CheatEnabler/TerraformPatch.cs b/CheatEnabler/TerraformPatch.cs index 275c889..726b17e 100644 --- a/CheatEnabler/TerraformPatch.cs +++ b/CheatEnabler/TerraformPatch.cs @@ -12,7 +12,8 @@ public static class TerraformPatch public static void Init() { - _patch = Harmony.CreateAndPatchAll(typeof(TerraformPatch)); + Enabled.SettingChanged += (_, _) => ValueChanged(); + ValueChanged(); } public static void Uninit() @@ -22,6 +23,25 @@ public static class TerraformPatch _patch = null; } + private static void ValueChanged() + { + if (Enabled.Value) + { + if (_patch != null) + { + _patch.UnpatchSelf(); + _patch = null; + } + + _patch = Harmony.CreateAndPatchAll(typeof(TerraformPatch)); + } + else if (_patch != null) + { + _patch.UnpatchSelf(); + _patch = null; + } + } + [HarmonyTranspiler] [HarmonyPatch(typeof(BuildTool_Reform), nameof(BuildTool_Reform.ReformAction))] private static IEnumerable BuildTool_Reform_ReformAction_Patch(IEnumerable instructions, ILGenerator generator) diff --git a/CheatEnabler/UIConfigWindow.cs b/CheatEnabler/UIConfigWindow.cs index 315dda3..a6ca662 100644 --- a/CheatEnabler/UIConfigWindow.cs +++ b/CheatEnabler/UIConfigWindow.cs @@ -15,7 +15,18 @@ public class UIConfigWindow : UI.MyWindowWithTabs I18N.Add("Infinite Natural Resources", "Infinite Natural Resources", "自然资源采集不消耗"); I18N.Add("Fast Mining", "Fast Mining", "高速采集"); I18N.Add("Pump Anywhere", "Pump Anywhere", "平地抽水"); + I18N.Add("Birth", "Birth Sys", "母星系"); I18N.Add("Terraform without enought sands", "Terraform without enough sands", "沙土不够时依然可以整改地形"); + I18N.Add("Silicon/Titanium on birth planet", "Silicon/Titanium on birth planet", "母星有硅和钛"); + I18N.Add("Fire ice on birth planet", "Fire ice on birth planet", "母星有可燃冰"); + I18N.Add("Kimberlite on birth planet", "Kimberlite on birth planet", "母星有金伯利矿"); + I18N.Add("Fractal silicon on birth planet", "Fractal silicon on birth planet", "母星有分形硅"); + I18N.Add("Organic crystal on birth planet", "Organic crystal on birth planet", "母星有有机晶体"); + I18N.Add("Optical grating crystal on birth planet", "Optical grating crystal on birth planet", "母星有光栅石"); + I18N.Add("Spiniform stalagmite crystal on birth planet", "Spiniform stalagmite crystal on birth planet", "母星有刺笋结晶"); + I18N.Add("Unipolar magnet on birth planet", "Unipolar magnet on birth planet", "母星有单极磁石"); + I18N.Add("Birth planet is solid flat (no water at all)", "Birth planet is solid flat (no water at all)", "母星是纯平的(没有水)"); + I18N.Add("Birth star has high luminosity", "Birth star has high luminosity", "母星系恒星高亮"); I18N.Apply(); } @@ -27,7 +38,7 @@ public class UIConfigWindow : UI.MyWindowWithTabs public override void _OnCreate() { _windowTrans = GetComponent(); - _windowTrans.sizeDelta = new Vector2(640f, 428f); + _windowTrans.sizeDelta = new Vector2(480f, 295f); CreateUI(); } @@ -52,7 +63,31 @@ public class UIConfigWindow : UI.MyWindowWithTabs y += 36f; UI.MyCheckBox.CreateCheckBox(x, y, tab2, WaterPumperPatch.Enabled, "Pump Anywhere".Translate()); y += 36f; - UI.MyCheckBox.CreateCheckBox(x, y, tab2, WaterPumperPatch.Enabled, "Terraform without enought sands".Translate()); + UI.MyCheckBox.CreateCheckBox(x, y, tab2, TerraformPatch.Enabled, "Terraform without enought sands".Translate()); + + var tab3 = AddTab(236f, 2, _windowTrans, "Birth".Translate()); + x = 0f; + y = 10f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet".Translate()); + x = 200f; + y = 10f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)".Translate()); + y += 36f; + UI.MyCheckBox.CreateCheckBox(x, y, tab3, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity".Translate()); SetCurrentTab(0); } @@ -84,4 +119,4 @@ public class UIConfigWindow : UI.MyWindowWithTabs VFInput.UseEscape(); _Close(); } -} +} \ No newline at end of file