From 7fae7cc66ec89cd4dbdb0a17c931559ae5ff2a48 Mon Sep 17 00:00:00 2001 From: Soar Qin Date: Sat, 14 Oct 2023 22:35:47 +0800 Subject: [PATCH] work in progress --- CheatEnabler/CheatEnabler.cs | 22 -- CheatEnabler/README.md | 10 +- CheatEnabler/ResourcePatch.cs | 2 +- CheatEnabler/UIConfigWindow.cs | 24 -- UXAssist/README.md | 1 + UXAssist/UI/MySlider.cs | 7 +- .../BirthPlanetPatch.cs | 2 +- UniverseGenTweaks/EpicDifficulty.cs | 226 +++++++++--------- UniverseGenTweaks/I18N.cs | 83 ------- UniverseGenTweaks/MoreSettings.cs | 46 +++- UniverseGenTweaks/README.md | 16 ++ UniverseGenTweaks/UIConfigWindow.cs | 98 ++++++++ UniverseGenTweaks/UniverseGenTweaks.cs | 60 +++-- UniverseGenTweaks/UniverseGenTweaks.csproj | 4 + 14 files changed, 308 insertions(+), 293 deletions(-) rename {CheatEnabler => UniverseGenTweaks}/BirthPlanetPatch.cs (99%) delete mode 100644 UniverseGenTweaks/I18N.cs create mode 100644 UniverseGenTweaks/UIConfigWindow.cs diff --git a/CheatEnabler/CheatEnabler.cs b/CheatEnabler/CheatEnabler.cs index f797212..7d1ec33 100644 --- a/CheatEnabler/CheatEnabler.cs +++ b/CheatEnabler/CheatEnabler.cs @@ -60,26 +60,6 @@ public class CheatEnabler : BaseUnityPlugin "Overclock ejector"); DysonSpherePatch.OverclockSiloEnabled = Config.Bind("DysonSphere", "OverclockSilo", false, "Overclock silo"); - 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"); UIConfigWindow.Init(); @@ -90,12 +70,10 @@ public class CheatEnabler : BaseUnityPlugin ResourcePatch.Init(); PlanetPatch.Init(); DysonSpherePatch.Init(); - BirthPlanetPatch.Init(); } private void OnDestroy() { - BirthPlanetPatch.Uninit(); DysonSpherePatch.Uninit(); PlanetPatch.Uninit(); ResourcePatch.Uninit(); diff --git a/CheatEnabler/README.md b/CheatEnabler/README.md index adb93cb..70d35aa 100644 --- a/CheatEnabler/README.md +++ b/CheatEnabler/README.md @@ -6,6 +6,7 @@ ## Changlog * 2.3.2 + Birth star options moved to [UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/) + + `Fast Mining` ensures full output of oil extractors now. + Crash fix for some options * 2.3.1 + Add UXAssist to dependencies in manifest. @@ -84,10 +85,6 @@ + Skip absorption period + Quick absorb + Eject anyway - + Birth star: - + Rare resources on birth planet - + Solid flat on birth planet - + High luminosity for birth star ## Notes * Please upgrade `BepInEx` 5.4.21 or later if using with [BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/) to avoid possible conflicts. @@ -102,6 +99,7 @@ ## 更新日志 * 2.3.2 + 母星系的选项移动到了[UniverseGenTweaks](https://dsp.thunderstore.io/package/soarqin/UniverseGenTweaks/) + + `高速采集`现在可以保证油井的最大产出 + 修复了一些选项可能导致崩溃的问题 * 2.3.1 + 在manifest中添加UXAssist到依赖 @@ -180,10 +178,6 @@ + 跳过吸收阶段 + 快速吸收 + 全球弹射 - + 母星系: - + 母星有稀有资源 - + 母星是纯平的 - + 母星系恒星高亮 ## 注意事项 * 如果和[BlueprintTweaks](https://dsp.thunderstore.io/package/kremnev8/BlueprintTweaks/)一起使用,请升级`BepInEx`到5.4.21或更高版本,以避免可能的冲突。 diff --git a/CheatEnabler/ResourcePatch.cs b/CheatEnabler/ResourcePatch.cs index 0b1aa4e..464ed94 100644 --- a/CheatEnabler/ResourcePatch.cs +++ b/CheatEnabler/ResourcePatch.cs @@ -107,7 +107,7 @@ public static class ResourcePatch ).Repeat(codeMatcher => codeMatcher.RemoveInstruction().InsertAndAdvance( new CodeInstruction(OpCodes.Pop), - new CodeInstruction(OpCodes.Ldc_R4, 720f) + new CodeInstruction(OpCodes.Ldc_R4, 2400f) ) ); return matcher.InstructionEnumeration(); diff --git a/CheatEnabler/UIConfigWindow.cs b/CheatEnabler/UIConfigWindow.cs index 9a14b76..b674ad1 100644 --- a/CheatEnabler/UIConfigWindow.cs +++ b/CheatEnabler/UIConfigWindow.cs @@ -183,30 +183,6 @@ public static class UIConfigWindow MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.OverclockEjectorEnabled, "Overclock Ejectors"); y += 36f; MyCheckBox.CreateCheckBox(x, y, tab4, DysonSpherePatch.OverclockSiloEnabled, "Overclock Silos"); - - var tab5 = wnd.AddTab(_windowTrans, "Birth"); - x = 0f; - y = 10f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet"); - x = 300f; - y = 10f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)"); - y += 36f; - MyCheckBox.CreateCheckBox(x, y, tab5, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity"); return; void OnBeltSignalChanged() diff --git a/UXAssist/README.md b/UXAssist/README.md index 070594a..0a28f13 100644 --- a/UXAssist/README.md +++ b/UXAssist/README.md @@ -47,6 +47,7 @@ ## 更新日志 * 1.0.1 + 修复了返回标题界面后设置按钮文本和提示信息不正确的问题 + + 添加了一个补丁,修复了`矿物利用`升级到8000级以上时弹出警告的bug * 1.0.0 + 初始版本 + 从[MechaDronesTweaks](https://dsp.thunderstore.io/package/soarqin/MechaDronesTweaks/)和[CheatEnabler](https://dsp.thunderstore.io/package/soarqin/CheatEnabler/)移动了部分功能过来 diff --git a/UXAssist/UI/MySlider.cs b/UXAssist/UI/MySlider.cs index 0434506..4d32994 100644 --- a/UXAssist/UI/MySlider.cs +++ b/UXAssist/UI/MySlider.cs @@ -1,4 +1,5 @@ using System; +using BepInEx.Configuration; using UnityEngine; using UnityEngine.UI; @@ -24,7 +25,7 @@ public class MySlider : MonoBehaviour } } - public static RectTransform CreateSlider(float x, float y, RectTransform parent, float value, float minValue, float maxValue, string format = "{0}", float width = 0f) + public static MySlider CreateSlider(float x, float y, RectTransform parent, float value, float minValue, float maxValue, string format = "G", float width = 0f) { var optionWindow = UIRoot.instance.optionWindow; var src = optionWindow.audioVolumeComp; @@ -71,14 +72,14 @@ public class MySlider : MonoBehaviour sl.OnValueSet(); sl.UpdateLabel(); - return sl.rectTrans; + return sl; } public void OnValueSet() { lock (this) { var sliderVal = _value; - if (_value.Equals(slider.value)) return; + if (sliderVal.Equals(slider.value)) return; if (sliderVal > slider.maxValue) { _value = sliderVal = slider.maxValue; diff --git a/CheatEnabler/BirthPlanetPatch.cs b/UniverseGenTweaks/BirthPlanetPatch.cs similarity index 99% rename from CheatEnabler/BirthPlanetPatch.cs rename to UniverseGenTweaks/BirthPlanetPatch.cs index 59604d1..a9dc261 100644 --- a/CheatEnabler/BirthPlanetPatch.cs +++ b/UniverseGenTweaks/BirthPlanetPatch.cs @@ -2,7 +2,7 @@ using BepInEx.Configuration; using HarmonyLib; -namespace CheatEnabler; +namespace UniverseGenTweaks; public static class BirthPlanetPatch { public static ConfigEntry SitiVeinsOnBirthPlanet; diff --git a/UniverseGenTweaks/EpicDifficulty.cs b/UniverseGenTweaks/EpicDifficulty.cs index 56e84b5..8e4f953 100644 --- a/UniverseGenTweaks/EpicDifficulty.cs +++ b/UniverseGenTweaks/EpicDifficulty.cs @@ -1,19 +1,84 @@ using System; using System.Collections.Generic; using System.Reflection.Emit; +using BepInEx.Configuration; using HarmonyLib; using UnityEngine.UI; +using UXAssist.Common; namespace UniverseGenTweaks; -public class EpicDifficulty +public static class EpicDifficulty { + public static ConfigEntry Enabled; + public static ConfigEntry ResourceMultiplier; + public static ConfigEntry OilMultiplier; + private static Harmony _harmony; + + private static readonly float[] ResourceMultipliers = new[] { 0.0001f, 0.0005f, 0.001f, 0.005f, 0.01f, 0.02f, 0.03f, 0.04f, 0.05f }; + private static readonly float[] OilMultipliers = new[] { 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1f }; + public static void Init() { I18N.Add("究极少", "Micro", "究极少"); I18N.Add("史诗难度", "Epic Difficulty !!", "史诗难度 !!"); I18N.Apply(); - Harmony.CreateAndPatchAll(typeof(EpicDifficulty)); + Enabled.SettingChanged += (_, _) => Enable(Enabled.Value); + Enable(Enabled.Value); + } + + public static void Uninit() + { + Enable(false); + } + + private static void Enable(bool on) + { + if (on) + { + _harmony ??= Harmony.CreateAndPatchAll(typeof(EpicDifficulty)); + return; + } + _harmony?.UnpatchSelf(); + _harmony = null; + } + + public static float IndexToResourceMultiplier(int index) + { + return ResourceMultipliers[index < 0 ? 0 : index >= ResourceMultipliers.Length ? ResourceMultipliers.Length - 1 : index]; + } + + public static int ResourceMultiplierToIndex(float mult) + { + for (var i = ResourceMultipliers.Length - 1; i > 0; i--) + { + if (ResourceMultipliers[i] <= mult) return i; + } + return 0; + } + + public static int ResourceMultipliersCount() + { + return ResourceMultipliers.Length; + } + + public static float IndexToOilMultiplier(int index) + { + return OilMultipliers[index < 0 ? 0 : index >= OilMultipliers.Length ? OilMultipliers.Length - 1 : index]; + } + + public static int OilMultiplierToIndex(float mult) + { + for (var i = OilMultipliers.Length - 1; i > 0; i--) + { + if (OilMultipliers[i] <= mult) return i; + } + return 0; + } + + public static int OilMultipliersCount() + { + return OilMultipliers.Length; } [HarmonyPostfix] @@ -27,51 +92,21 @@ public class EpicDifficulty [HarmonyPatch(typeof(UIGalaxySelect), nameof(UIGalaxySelect.OnResourceMultiplierValueChange))] private static bool UIGalaxySelect_OnResourceMultiplierValueChange_Prefix(UIGalaxySelect __instance, float val) { - float value = __instance.resourceMultiplierSlider.value; - if (value < 0.5f) + var value = __instance.resourceMultiplierSlider.value; + __instance.gameDesc.resourceMultiplier = value switch { - __instance.gameDesc.resourceMultiplier = 0.01f; - } - else if (value < 1.5f) - { - __instance.gameDesc.resourceMultiplier = 0.1f; - } - else if (value < 2.5f) - { - __instance.gameDesc.resourceMultiplier = 0.5f; - } - else if (value < 3.5f) - { - __instance.gameDesc.resourceMultiplier = 0.8f; - } - else if (value < 4.5f) - { - __instance.gameDesc.resourceMultiplier = 1f; - } - else if (value < 5.5f) - { - __instance.gameDesc.resourceMultiplier = 1.5f; - } - else if (value < 6.5f) - { - __instance.gameDesc.resourceMultiplier = 2f; - } - else if (value < 7.5f) - { - __instance.gameDesc.resourceMultiplier = 3f; - } - else if (value < 8.5f) - { - __instance.gameDesc.resourceMultiplier = 5f; - } - else if (value < 9.5f) - { - __instance.gameDesc.resourceMultiplier = 8f; - } - else - { - __instance.gameDesc.resourceMultiplier = 100f; - } + < 0.5f => ResourceMultiplier.Value, + < 1.5f => 0.1f, + < 2.5f => 0.5f, + < 3.5f => 0.8f, + < 4.5f => 1f, + < 5.5f => 1.5f, + < 6.5f => 2f, + < 7.5f => 3f, + < 8.5f => 5f, + < 9.5f => 8f, + _ => 100f + }; __instance.UpdateParametersUIDisplay(); return false; } @@ -80,84 +115,37 @@ public class EpicDifficulty [HarmonyPatch(typeof(UIGalaxySelect), nameof(UIGalaxySelect.UpdateParametersUIDisplay))] private static bool UIGalaxySelect_UpdateParametersUIDisplay_Prefix(UIGalaxySelect __instance) { - float resourceMultiplier = __instance.gameDesc.resourceMultiplier; - string text = ""; - if (resourceMultiplier < 0.04f) + var resourceMultiplier = __instance.gameDesc.resourceMultiplier; + var text = ""; + __instance.resourceMultiplierSlider.value = resourceMultiplier switch { - __instance.resourceMultiplierSlider.value = 0f; - } - else if (resourceMultiplier < 0.11f) + < 0.09f => 0f, + < 0.11f => 1f, + < 0.51f => 2f, + < 0.81f => 3f, + < 1.01f => 4f, + < 1.51f => 5f, + < 2.01f => 6f, + < 3.01f => 7f, + < 5.01f => 8f, + < 8.01f => 9f, + _ => 10f + }; + text = resourceMultiplier switch { - __instance.resourceMultiplierSlider.value = 1f; - } - else if (resourceMultiplier < 0.51f) - { - __instance.resourceMultiplierSlider.value = 2f; - } - else if (resourceMultiplier < 0.81f) - { - __instance.resourceMultiplierSlider.value = 3f; - } - else if (resourceMultiplier < 1.01f) - { - __instance.resourceMultiplierSlider.value = 4f; - } - else if (resourceMultiplier < 1.51f) - { - __instance.resourceMultiplierSlider.value = 5f; - } - else if (resourceMultiplier < 2.01f) - { - __instance.resourceMultiplierSlider.value = 6f; - } - else if (resourceMultiplier < 3.01f) - { - __instance.resourceMultiplierSlider.value = 7f; - } - else if (resourceMultiplier < 5.01f) - { - __instance.resourceMultiplierSlider.value = 8f; - } - else if (resourceMultiplier < 8.01f) - { - __instance.resourceMultiplierSlider.value = 9f; - } - else - { - __instance.resourceMultiplierSlider.value = 10f; - } - if (resourceMultiplier < 100f && resourceMultiplier > 0.1f) - { - text = resourceMultiplier.ToString() + "x"; - } - else if (resourceMultiplier >= 100f) - { - text = "无限".Translate(); - } - else if (resourceMultiplier < 0.04f) - { - text = "究极少".Translate(); - } - else if (resourceMultiplier < 0.11f) - { - text = "极少".Translate(); - } + < 100f and > 0.1f => resourceMultiplier + "x", + >= 100f => "无限".Translate(), + < 0.09f => "究极少".Translate(), + < 0.11f => "极少".Translate(), + _ => text + }; __instance.resourceMultiplierText.text = text; __instance.propertyMultiplierText.text = "元数据生成倍率".Translate() + " " + __instance.gameDesc.propertyMultiplier.ToString("P0"); __instance.addrText.text = __instance.gameDesc.clusterString; var showDifficultTip = resourceMultiplier < 0.11f && !__instance.gameDesc.isSandboxMode; __instance.difficultTipGroup.SetActive(showDifficultTip); - if (showDifficultTip) - { - if (resourceMultiplier < 0.04f) - { - __instance.difficultTipGroup.transform.Find("difficult-tip-text").GetComponent().text = "史诗难度".Translate(); - } - else - { - __instance.difficultTipGroup.transform.Find("difficult-tip-text").GetComponent().text = "非常困难".Translate(); - } - } + if (!showDifficultTip) return false; + __instance.difficultTipGroup.transform.Find("difficult-tip-text").GetComponent().text = (resourceMultiplier < 0.09f ? "史诗难度" : "非常困难").Translate(); return false; } @@ -167,7 +155,7 @@ public class EpicDifficulty private static IEnumerable GameDesc_get_oilAmountMultiplier_Transpiler(IEnumerable instructions, ILGenerator generator) { var matcher = new CodeMatcher(instructions, generator); - if (Math.Abs(UniverseGenTweaks.OilMultiplier - 1f) > 0.00001f) + if (Math.Abs(OilMultiplier.Value - 1f) > 0.00001f) { var label1 = generator.DefineLabel(); matcher.Start().InsertAndAdvance( @@ -176,7 +164,7 @@ public class EpicDifficulty new CodeInstruction(OpCodes.Ldc_R4, 0.05f), new CodeInstruction(OpCodes.Ble_S, label1) ).End().Advance(1).Insert( - new CodeInstruction(OpCodes.Ldc_R4, 0.5f * UniverseGenTweaks.OilMultiplier).WithLabels(label1), + new CodeInstruction(OpCodes.Ldc_R4, 0.5f * OilMultiplier.Value).WithLabels(label1), new CodeInstruction(OpCodes.Ret) ); } diff --git a/UniverseGenTweaks/I18N.cs b/UniverseGenTweaks/I18N.cs deleted file mode 100644 index 6c306c6..0000000 --- a/UniverseGenTweaks/I18N.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using HarmonyLib; - -namespace UniverseGenTweaks; - -public class I18N -{ - private static bool _initialized; - - public static Action OnInitialized; - - public static void Init() - { - Harmony.CreateAndPatchAll(typeof(I18N)); - } - private static int _nextID = 1; - private static readonly List StringsToAdd = new(); - public static void Add(string key, string enus, string zhcn = null, string frfr = null) - { - var strings = LDB._strings; - var strProto = new StringProto - { - Name = key, - SID = "", - ENUS = enus, - ZHCN = string.IsNullOrEmpty(zhcn) ? enus : zhcn, - FRFR = string.IsNullOrEmpty(frfr) ? enus : frfr - }; - StringsToAdd.Add(strProto); - } - - public static void Apply() - { - if (!_initialized) return; - var strings = LDB._strings; - var index = strings.dataArray.Length; - strings.dataArray = strings.dataArray.Concat(StringsToAdd).ToArray(); - StringsToAdd.Clear(); - var newIndex = strings.dataArray.Length; - for (; index < newIndex; index++) - { - var strProto = strings.dataArray[index]; - strProto.ID = GetNextID(); - strings.dataIndices[strProto.ID] = index; - strings.nameIndices[strings.dataArray[index].Name] = index; - } - } - - [HarmonyPostfix, HarmonyPriority(Priority.Last), HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")] - private static void VFPreload_InvokeOnLoadWorkEnded_Postfix() - { - if (_initialized) return; - _initialized = true; - if (StringsToAdd.Count == 0) - { - OnInitialized?.Invoke(); - return; - } - - Apply(); - OnInitialized?.Invoke(); - } - - private static int GetNextID() - { - var strings = LDB._strings; - while (_nextID <= 12000) - { - if (!strings.dataIndices.ContainsKey(_nextID)) - { - break; - } - - _nextID++; - } - - var result = _nextID; - _nextID++; - return result; - } -} \ No newline at end of file diff --git a/UniverseGenTweaks/MoreSettings.cs b/UniverseGenTweaks/MoreSettings.cs index 7e1cec7..7af7beb 100644 --- a/UniverseGenTweaks/MoreSettings.cs +++ b/UniverseGenTweaks/MoreSettings.cs @@ -4,11 +4,13 @@ using BepInEx.Configuration; using HarmonyLib; using UnityEngine; using UnityEngine.UI; +using UXAssist.Common; namespace UniverseGenTweaks; public class MoreSettings { + public static ConfigEntry Enabled; public static ConfigEntry MaxStarCount; private static double _minDist = 2; private static double _minStep = 2; @@ -27,6 +29,7 @@ public class MoreSettings private static Text _minStepText; private static Text _maxStepText; private static Text _flattenText; + private static Harmony _harmony; public static void Init() { @@ -35,7 +38,24 @@ public class MoreSettings I18N.Add("步进最大距离", "Step Distance Max", "步进最大距离"); I18N.Add("扁平度", "Flatness", "扁平度"); I18N.Apply(); - Harmony.CreateAndPatchAll(typeof(MoreSettings)); + Enabled.SettingChanged += (_, _) => Enable(Enabled.Value); + Enable(Enabled.Value); + } + + public static void Uninit() + { + Enable(false); + } + + private static void Enable(bool on) + { + if (on) + { + _harmony ??= Harmony.CreateAndPatchAll(typeof(MoreSettings)); + return; + } + _harmony?.UnpatchSelf(); + _harmony = null; } private static void CreateSliderWithText(Slider orig, out Text title, out Slider slider, out Text text) @@ -48,9 +68,9 @@ public class MoreSettings private static void TransformDeltaY(Transform trans, float delta) { - var pos = trans.position; + var pos = ((RectTransform)trans).anchoredPosition3D; pos.y += delta; - trans.position = pos; + ((RectTransform)trans).anchoredPosition3D = pos; } [HarmonyPostfix] @@ -84,14 +104,14 @@ public class MoreSettings _flattenSlider.maxValue = 50f; _flattenSlider.value = (float)(_flatten * 50.0); - TransformDeltaY(_minDistTitle.transform, -0.3573f); - TransformDeltaY(_minStepTitle.transform, -0.3573f * 2); - TransformDeltaY(_maxStepTitle.transform, -0.3573f * 3); - TransformDeltaY(_flattenTitle.transform, -0.3573f * 4); - TransformDeltaY(__instance.resourceMultiplierSlider.transform.parent, -0.3573f * 4); - TransformDeltaY(__instance.sandboxToggle.transform.parent, -0.3573f * 4); - TransformDeltaY(__instance.propertyMultiplierText.transform, -0.3573f * 4); - TransformDeltaY(__instance.addrText.transform.parent, -0.3573f * 4); + TransformDeltaY(_minDistTitle.transform, -36f); + TransformDeltaY(_minStepTitle.transform, -36f * 2); + TransformDeltaY(_maxStepTitle.transform, -36f * 3); + TransformDeltaY(_flattenTitle.transform, -36f * 4); + TransformDeltaY(__instance.resourceMultiplierSlider.transform.parent, -36f * 4); + TransformDeltaY(__instance.sandboxToggle.transform.parent, -36f * 4); + TransformDeltaY(__instance.propertyMultiplierText.transform, -36f * 4); + TransformDeltaY(__instance.addrText.transform.parent, -36f * 4); } [HarmonyPrefix] @@ -182,7 +202,7 @@ public class MoreSettings var matcher = new CodeMatcher(instructions, generator); matcher.MatchForward(false, new CodeMatch(ci => ci.opcode == OpCodes.Ldc_I4_S && ci.OperandIs(80)) - ).Set(OpCodes.Ldsfld, AccessTools.Field(typeof(MoreSettings), nameof(MoreSettings.MaxStarCount))).Insert( + ).SetAndAdvance(OpCodes.Ldsfld, AccessTools.Field(typeof(MoreSettings), nameof(MoreSettings.MaxStarCount))).Insert( new CodeInstruction(OpCodes.Call, AccessTools.PropertyGetter(typeof(ConfigEntry), nameof(ConfigEntry.Value))) ); return matcher.InstructionEnumeration(); @@ -196,7 +216,7 @@ public class MoreSettings var matcher = new CodeMatcher(instructions, generator); matcher.MatchForward(false, new CodeMatch(ci => ci.opcode == OpCodes.Ldc_I4 && ci.OperandIs(25600)) - ).Set(OpCodes.Ldfld, AccessTools.Field(typeof(MoreSettings), nameof(MoreSettings.MaxStarCount))).Insert( + ).SetAndAdvance(OpCodes.Ldsfld, AccessTools.Field(typeof(MoreSettings), nameof(MoreSettings.MaxStarCount))).Insert( new CodeInstruction(OpCodes.Call, AccessTools.PropertyGetter(typeof(ConfigEntry), nameof(ConfigEntry.Value))), new CodeInstruction(OpCodes.Ldc_I4_1), new CodeInstruction(OpCodes.Add), diff --git a/UniverseGenTweaks/README.md b/UniverseGenTweaks/README.md index 486368a..b5fe141 100644 --- a/UniverseGenTweaks/README.md +++ b/UniverseGenTweaks/README.md @@ -4,6 +4,10 @@ #### 宇宙生成参数调节 ## Changelog +* 1.2.0 + + Depends on [UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/) now. + + Add `Birth star` options + + Config tab added to UXAssist config panel. * 1.1.0 + Add epic difficulty + `More options` and `Epic difficulty` can be enabled individually now. @@ -18,8 +22,16 @@ 2. Epic difficulty * 0.01x resources and 0.25x oils (very hard difficulty has 0.5x oils). * Same oil mining speed as very hard difficuly +3. Birth star + * Rare resources on birth planet + * Solid flat on birth planet + * High luminosity for birth star ## 更新日志 +* 1.2.0 + + 现在依赖于[UXAssist](https://dsp.thunderstore.io/package/soarqin/UXAssist/) + + 增加`母星系`选项 + + 在UXAssist的配置面板中增加了一个选项卡 * 1.1.0 + 增加史诗难度 + `更多选项`和`史诗难度`现在可以单独启用 @@ -34,3 +46,7 @@ 2. 史诗难度 * 资源0.01倍,油井储量0.25倍(极难是0.5倍) * 采油速度和极难相同 +3. 母星系 + * 母星有稀有资源 + * 母星是纯平的 + * 母星系恒星高亮 diff --git a/UniverseGenTweaks/UIConfigWindow.cs b/UniverseGenTweaks/UIConfigWindow.cs new file mode 100644 index 0000000..80e0457 --- /dev/null +++ b/UniverseGenTweaks/UIConfigWindow.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using UXAssist.UI; +using UXAssist.Common; + +namespace UniverseGenTweaks; + +public static class UIConfigWindow +{ + private static RectTransform _windowTrans; + + public static void Init() + { + I18N.Add("GalaxyGen", "+UniverseGen+", "+宇宙生成+"); + I18N.Add("Enable more settings on UniverseGen", "Enable more settings on UniverseGen", "启用更多宇宙生成设置"); + I18N.Add("* Requires game restart to take effect", "* Requires game restart to take effect", "* 需要重启游戏才能生效"); + I18N.Add("Enable Epic difficulty", "Enable Epic difficulty", "启用史诗难度"); + I18N.Add("Resource multiplier", "Resource multiplier", "资源倍率"); + I18N.Add("Oil multiplier (relative to Very Hard)", "Oil multiplier (relative to Very Hard)", "石油倍率(相对于非常困难)"); + 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(); + MyConfigWindow.OnUICreated += CreateUI; + } + + private static void CreateUI(MyConfigWindow wnd, RectTransform trans) + { + _windowTrans = trans; + // General tab + var x = 0f; + var y = 10f; + var tab = wnd.AddTab(_windowTrans, "GalaxyGen"); + MyCheckBox.CreateCheckBox(x, y, tab, MoreSettings.Enabled, "Enable more settings on UniverseGen"); + x += 20f; + y += 26f; + MyWindow.AddText(x, y, tab, "* Requires game restart to take effect", 13); + x -= 20f; + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, EpicDifficulty.Enabled, "Enable Epic difficulty"); + y += 36f; + x += 10f; + MyWindow.AddText(x, y, tab, "Resource multiplier", 16); + x += 20f; + y += 26f; + var index = EpicDifficulty.ResourceMultiplierToIndex(EpicDifficulty.ResourceMultiplier.Value); + var sl = MySlider.CreateSlider(x, y, tab, index, 0f, (float)EpicDifficulty.ResourceMultipliersCount() - 1, "G", 240f); + sl.SetLabelText(EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl.Value)).ToString(sl.labelFormat)); + sl.OnValueChanged += () => + { + var val = EpicDifficulty.IndexToResourceMultiplier(Mathf.RoundToInt(sl.Value)); + EpicDifficulty.ResourceMultiplier.Value = val; + sl.SetLabelText(val.ToString(sl.labelFormat)); + }; + x -= 30f; + y += 31f; + x += 10f; + MyWindow.AddText(x, y, tab, "Oil multiplier (relative to Very Hard)", 16); + x += 20f; + y += 26f; + index = EpicDifficulty.OilMultiplierToIndex(EpicDifficulty.OilMultiplier.Value); + var sl2 = MySlider.CreateSlider(x, y, tab, index, 0f, (float)EpicDifficulty.OilMultipliersCount() - 1, "G", 240f); + sl2.SetLabelText(EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value)).ToString(sl2.labelFormat)); + sl2.OnValueChanged += () => + { + var val = EpicDifficulty.IndexToOilMultiplier(Mathf.RoundToInt(sl2.Value)); + EpicDifficulty.OilMultiplier.Value = val; + sl2.SetLabelText(val.ToString(sl2.labelFormat)); + }; + x = 300f; + y = 10f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.SitiVeinsOnBirthPlanet, "Silicon/Titanium on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FireIceOnBirthPlanet, "Fire ice on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.KimberliteOnBirthPlanet, "Kimberlite on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FractalOnBirthPlanet, "Fractal silicon on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.OrganicOnBirthPlanet, "Organic crystal on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.OpticalOnBirthPlanet, "Optical grating crystal on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.SpiniformOnBirthPlanet, "Spiniform stalagmite crystal on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.UnipolarOnBirthPlanet, "Unipolar magnet on birth planet"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.FlatBirthPlanet, "Birth planet is solid flat (no water at all)"); + y += 36f; + MyCheckBox.CreateCheckBox(x, y, tab, BirthPlanetPatch.HighLuminosityBirthStar, "Birth star has high luminosity"); + } +} \ No newline at end of file diff --git a/UniverseGenTweaks/UniverseGenTweaks.cs b/UniverseGenTweaks/UniverseGenTweaks.cs index 486511e..2876d9a 100644 --- a/UniverseGenTweaks/UniverseGenTweaks.cs +++ b/UniverseGenTweaks/UniverseGenTweaks.cs @@ -9,31 +9,53 @@ public class UniverseGenTweaks : BaseUnityPlugin public new static readonly BepInEx.Logging.ManualLogSource Logger = BepInEx.Logging.Logger.CreateLogSource(PluginInfo.PLUGIN_NAME); - private bool _moreSettings = true; - private bool _epicDifficulty = true; - public static float OilMultiplier = 0.5f; - private void Awake() { - _moreSettings = Config.Bind("MoreSettings", "Enabled", _moreSettings, "Enable more settings on Universe Generation").Value; + MoreSettings.Enabled = Config.Bind("MoreSettings", "Enabled", true, "Enable more settings on Universe Generation"); MoreSettings.MaxStarCount = Config.Bind("MoreSettings", "MaxStarCount", 128, new ConfigDescription("(32 ~ 1024)\nMaximum star count for Universe Generation, enable MoreSettings.Enabled to take effect", new AcceptableValueRange(32, 1024), new {})); - _epicDifficulty = Config.Bind("EpicDifficulty", "Enabled", _epicDifficulty, "Enable Epic difficulty").Value; - OilMultiplier = Config.Bind("EpicDifficulty", "OilMultiplier", OilMultiplier, - new ConfigDescription("Multiplier relative to the Very-Hard difficulty multiplier", - new AcceptableValueRange(0.1f, 1f), new {})) - .Value; - I18N.Init(); - if (_moreSettings) - { - MoreSettings.Init(); - } + EpicDifficulty.Enabled = Config.Bind("EpicDifficulty", "Enabled", true, "Enable Epic difficulty"); + EpicDifficulty.ResourceMultiplier = Config.Bind("EpicDifficulty", "ResourceMultiplier", 0.01f, + new ConfigDescription("Resource multiplier for Epic difficulty", + new AcceptableValueRange(0.0001f, 0.05f), new {})); + EpicDifficulty.OilMultiplier = Config.Bind("EpicDifficulty", "OilMultiplier", 0.5f, + new ConfigDescription("Oil multiplier for Epic difficulty relative to the Very-Hard difficulty", + new AcceptableValueRange(0.1f, 1f), new {})); - if (_epicDifficulty) - { - EpicDifficulty.Init(); - } + 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"); + + UIConfigWindow.Init(); + + MoreSettings.Init(); + EpicDifficulty.Init(); + BirthPlanetPatch.Init(); + } + + private void OnDestroy() + { + BirthPlanetPatch.Uninit(); + EpicDifficulty.Uninit(); + MoreSettings.Uninit(); } } \ No newline at end of file diff --git a/UniverseGenTweaks/UniverseGenTweaks.csproj b/UniverseGenTweaks/UniverseGenTweaks.csproj index a602546..f3f7490 100644 --- a/UniverseGenTweaks/UniverseGenTweaks.csproj +++ b/UniverseGenTweaks/UniverseGenTweaks.csproj @@ -22,6 +22,10 @@ + + + +