From a076919b529ff14f9dc98771a8037e0b08af732e Mon Sep 17 00:00:00 2001 From: Lexi Date: Fri, 22 Dec 2023 08:22:17 -0500 Subject: [PATCH 1/7] Should fix settings missing issue, does not fix UI scale issue, I honestly might grab the screen resolution at instantiation, and scale it that way aaaaaaaaaaa --- .../API/UI/Settings/ModsPropertyDrawers.cs | 16 ++++++++++ src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs | 1 + .../UI/Settings/SettingsMenuController.cs | 32 +++++++++++++------ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs b/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs index 75d3fb6f..8f45353d 100644 --- a/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs +++ b/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs @@ -117,6 +117,10 @@ private static Func GenerateEnumDrawerFor(Type t) else { var radioCopy = UnityObject.Instantiate(RadioPrefab); + foreach (Transform child in radioCopy.transform) + { + UnityObject.Destroy(child.gameObject); + } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(entry.Definition.Key); lab.GetComponent().text = entry.Definition.Key; @@ -224,6 +228,10 @@ private static Func GenerateAbstractEnumDrawer else { var radioCopy = UnityObject.Instantiate(RadioPrefab); + foreach (Transform child in radioCopy.transform) + { + UnityObject.Destroy(child.gameObject); + } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(name); lab.GetComponent().text = name; @@ -387,6 +395,10 @@ private static GameObject CreateBoolConfig(ConfigEntryBase baseEntry) { var entry = (ConfigEntry)baseEntry; var radioCopy = UnityObject.Instantiate(RadioPrefab); + foreach (Transform child in radioCopy.transform) + { + UnityObject.Destroy(child.gameObject); + } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(entry.Definition.Key); lab.GetComponent().text = entry.Definition.Key; @@ -445,6 +457,10 @@ private static GameObject CreateBoolConfig(ConfigEntryBase baseEntry) private static GameObject CreateBoolConfigAbstracted(string name, IConfigEntry entry) { var radioCopy = UnityObject.Instantiate(RadioPrefab); + foreach (Transform child in radioCopy.transform) + { + UnityObject.Destroy(child.gameObject); + } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(name); lab.GetComponent().text = name; diff --git a/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs b/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs index 3a95aea1..35b73a02 100644 --- a/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs +++ b/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs @@ -27,6 +27,7 @@ public void Awake() public void Start() { + SettingsMenuController.Instance.UpdatePrefabs(); // Lets make sure we clear out the list foreach (Transform child in transform) { diff --git a/src/SpaceWarp.UI/UI/Settings/SettingsMenuController.cs b/src/SpaceWarp.UI/UI/Settings/SettingsMenuController.cs index 5b2d200e..55380a06 100644 --- a/src/SpaceWarp.UI/UI/Settings/SettingsMenuController.cs +++ b/src/SpaceWarp.UI/UI/Settings/SettingsMenuController.cs @@ -42,20 +42,16 @@ internal class SettingsMenuController : KerbalMonoBehaviour private GameObject _headerPrefab; private GameObject _dividerPrefab; private GameObject _sectionPrefab; + internal static SettingsMenuController Instance; private bool _alreadySetup = false; private void Start() { MainMenuPatcher.MainMenuLoaded += Setup; + Instance = this; } - private void Setup() + public void UpdatePrefabs() { - if (_alreadySetup) return; - _alreadySetup = true; - var categories = GameObject.Find(CategoriesPath); - var graphics = GameObject.Find(GraphicsPath); - var modsButton =Instantiate(graphics, categories.transform); - var content = GameObject.Find(ContentPath); var graphicsSettings = GameObject.Find(ContentGraphicsPath); _headerPrefab = Instantiate(graphicsSettings.transform.Find("SettingsMenuHeader").gameObject); _headerPrefab.Persist(); @@ -66,7 +62,7 @@ private void Setup() _sectionPrefab = Instantiate(graphicsSettings.transform.Find("Video").gameObject); foreach (Transform child in _sectionPrefab.transform) { - if (child.gameObject.name != "Title") + if (!child.gameObject.GetComponent()) { Destroy(child.gameObject); } @@ -100,7 +96,6 @@ private void Setup() if (alpha != null) Destroy(alpha); var beta = radioSettingPrefab.GetComponent(); if (beta != null) Destroy(beta); - } radioPrefab.SetActive(false); radioSettingPrefab.SetActive(false); @@ -134,8 +129,20 @@ private void Setup() Destroy(amount.GetComponentInChildren()); sliderPrefab.SetActive(false); ModsPropertyDrawers.SliderPrefab = sliderPrefab; + } + + private void Setup() + { + if (_alreadySetup) return; + _alreadySetup = true; + var categories = GameObject.Find(CategoriesPath); + var graphics = GameObject.Find(GraphicsPath); + var content = GameObject.Find(ContentPath); + var graphicsSettings = GameObject.Find(ContentGraphicsPath); + + var modsButton = Instantiate(graphics, categories.transform); modsButton.GetComponentInChildren().Term = ""; var text = modsButton.GetComponentInChildren(); text.text = "Mods"; @@ -187,6 +194,13 @@ private GameObject GenerateDivider() private GameObject GenerateSection(string section) { var copy = Instantiate(_sectionPrefab); + foreach (Transform child in copy.transform) + { + if (!child.gameObject.GetComponent()) + { + Destroy(child.gameObject); + } + } var text = copy.GetComponentInChildren(); var localize = copy.GetComponentInChildren(); if (localize != null) From adc0e2d42871f37e410c050fce805d000d9e434b Mon Sep 17 00:00:00 2001 From: Lexi Date: Fri, 22 Dec 2023 08:40:18 -0500 Subject: [PATCH 2/7] fix broken radio buttons --- .../API/UI/Settings/ModsPropertyDrawers.cs | 36 ++++++++++--------- src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs | 1 - 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs b/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs index 8f45353d..e78c2796 100644 --- a/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs +++ b/src/SpaceWarp.UI/API/UI/Settings/ModsPropertyDrawers.cs @@ -117,14 +117,15 @@ private static Func GenerateEnumDrawerFor(Type t) else { var radioCopy = UnityObject.Instantiate(RadioPrefab); - foreach (Transform child in radioCopy.transform) - { - UnityObject.Destroy(child.gameObject); - } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(entry.Definition.Key); lab.GetComponent().text = entry.Definition.Key; var setting = radioCopy.GetChild("Setting"); + foreach (Transform child in setting.transform) + { + if (child.gameObject.GetComponent()) + UnityObject.Destroy(child.gameObject); + } var idx = optionValues.IndexOf((int)entry.BoxedValue); List allToggles = new(); for (var i = 0; i < optionNames.Count; i++) @@ -228,14 +229,15 @@ private static Func GenerateAbstractEnumDrawer else { var radioCopy = UnityObject.Instantiate(RadioPrefab); - foreach (Transform child in radioCopy.transform) - { - UnityObject.Destroy(child.gameObject); - } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(name); lab.GetComponent().text = name; var setting = radioCopy.GetChild("Setting"); + foreach (Transform child in setting.transform) + { + if (child.gameObject.GetComponent()) + UnityObject.Destroy(child.gameObject); + } var idx = optionValues.IndexOf((int)entry.Value); List allToggles = new(); for (var i = 0; i < optionNames.Count; i++) @@ -395,14 +397,15 @@ private static GameObject CreateBoolConfig(ConfigEntryBase baseEntry) { var entry = (ConfigEntry)baseEntry; var radioCopy = UnityObject.Instantiate(RadioPrefab); - foreach (Transform child in radioCopy.transform) - { - UnityObject.Destroy(child.gameObject); - } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(entry.Definition.Key); lab.GetComponent().text = entry.Definition.Key; var setting = radioCopy.GetChild("Setting"); + foreach (Transform child in setting.transform) + { + if (child.gameObject.GetComponent()) + UnityObject.Destroy(child.gameObject); + } var idx = entry.Value ? 0 : 1; List allToggles = new(); for (var i = 0; i < 2; i++) @@ -457,14 +460,15 @@ private static GameObject CreateBoolConfig(ConfigEntryBase baseEntry) private static GameObject CreateBoolConfigAbstracted(string name, IConfigEntry entry) { var radioCopy = UnityObject.Instantiate(RadioPrefab); - foreach (Transform child in radioCopy.transform) - { - UnityObject.Destroy(child.gameObject); - } var lab = radioCopy.GetChild("Label"); lab.GetComponent().SetTerm(name); lab.GetComponent().text = name; var setting = radioCopy.GetChild("Setting"); + foreach (Transform child in setting.transform) + { + if (child.gameObject.GetComponent()) + UnityObject.Destroy(child.gameObject); + } var idx = (bool)entry.Value ? 0 : 1; List allToggles = new(); for (var i = 0; i < 2; i++) diff --git a/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs b/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs index 35b73a02..392fcacb 100644 --- a/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs +++ b/src/SpaceWarp.UI/UI/Settings/ModsSubMenu.cs @@ -35,7 +35,6 @@ public void Start() Destroy(child.gameObject); } - // Now here is where we go through every single mod #pragma warning disable CS0618 foreach (var mod in BepInEx.Bootstrap.Chainloader.Plugins.Where(mod => From bf1d6a3ee0762bcb2cd6df5a8e7d0407e90d2b70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bure=C5=A1?= Date: Fri, 22 Dec 2023 15:23:17 +0100 Subject: [PATCH 3/7] Updated UXML for mod list and console to get rid of annoying error logs --- .../SpaceWarp/assets/bundles/modlist.bundle | Bin 5981 -> 5948 bytes .../SpaceWarp/assets/bundles/swconsole.bundle | Bin 9558 -> 9490 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/plugin_template/BepInEx/plugins/SpaceWarp/assets/bundles/modlist.bundle b/plugin_template/BepInEx/plugins/SpaceWarp/assets/bundles/modlist.bundle index 968241a150531d4a3baaa5dfb569ca99600d1b04..54924792359dd098ae4fabe2803c81b0becff9b0 100644 GIT binary patch delta 5854 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 VesbmrM4@YK8f?RC0(ky<6WuxdYU}_2 diff --git a/plugin_template/BepInEx/plugins/SpaceWarp/assets/bundles/swconsole.bundle b/plugin_template/BepInEx/plugins/SpaceWarp/assets/bundles/swconsole.bundle index 0473f019c787e8b2c5bd448b1726a0685b4a8552..cbce5b40c2b0feb941689a8fb75e7ef25b587bf8 100644 GIT binary patch delta 9422 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 delta 9490 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 kK?YAAFz5niGDlB54FK2Hn)cYuB|ay|4&D;q|M Date: Fri, 22 Dec 2023 06:38:58 -0800 Subject: [PATCH 4/7] Update release_nuget.yml Adds github release uploads on release --- .github/workflows/release_nuget.yml | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release_nuget.yml b/.github/workflows/release_nuget.yml index 11a70575..a88f85ab 100644 --- a/.github/workflows/release_nuget.yml +++ b/.github/workflows/release_nuget.yml @@ -28,12 +28,15 @@ jobs: run: | version=$(jq -r '.version' plugin_template/BepInEx/plugins/SpaceWarp/swinfo.json) echo "Version is $version" - echo "::set-output name=version::$version" + echo "version=$version" >> $GITHUB_ENV + echo "artifact_name=spacewarp-release-$version.zip" >> $GITHUB_ENV + echo "zip=$(ls -1 dist/SpaceWarp-*.zip | head -n 1)" >> $GITHUB_ENV + echo "upload_url=$(wget -qO- https://api.github.com/repos/$GITHUB_REPOSITORY/releases | jq '.[0].upload_url' | tr -d \")" >> $GITHUB_ENV - name: Check if version exists id: check-version run: | - version=${{ steps.get-version.outputs.version }} + version=${{ env.version }} response=$(curl -s "https://nuget.spacewarp.org/v3/search?q=SpaceWarp") exists=$(echo "$response" | jq -r --arg id "SpaceWarp" --arg version "$version" '.data[] | select(.id == $id) | .versions[] | select(.version == $version) | .version') if [ "$exists" == "$version" ]; then @@ -41,11 +44,22 @@ jobs: exit 1 else echo "Version $version does not exist in the NuGet repository" - echo "::set-output name=should_publish::true" + echo "should_publish=true" >> $GITHUB_ENV fi - name: Publish NuGet package - if: steps.check-version.outputs.should_publish == 'true' + if: env.should_publish == 'true' run: | nupkg_path=$(ls -1 nuget/SpaceWarp.*.nupkg | head -n 1) - dotnet nuget push "$nupkg_path" -s https://nuget.spacewarp.org/v3/index.json -k ${{ secrets.NUGET_SERVER_KEY }} \ No newline at end of file + dotnet nuget push "$nupkg_path" -s https://nuget.spacewarp.org/v3/index.json -k ${{ secrets.NUGET_SERVER_KEY }} + + - name: Upload Zip + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ env.upload_url }} + asset_path: ${{ env.zip }} + asset_name: ${{ env.artifact_name }} + asset_content_type: application/zip + From 4e5060cd23273e407bed3ad8e09f19ca9211b8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bure=C5=A1?= Date: Fri, 22 Dec 2023 15:58:57 +0100 Subject: [PATCH 5/7] Slightly simplify the post-build target --- src/SpaceWarp/Directory.Build.targets | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/SpaceWarp/Directory.Build.targets b/src/SpaceWarp/Directory.Build.targets index 6c8a1ef0..92e286de 100644 --- a/src/SpaceWarp/Directory.Build.targets +++ b/src/SpaceWarp/Directory.Build.targets @@ -3,6 +3,8 @@ nuget mono /usr/local/bin/nuget.exe + powershell + pwsh @@ -82,12 +84,8 @@ - - - + Command="$(PowerShellExecutable) -Command "& {Push-Location '$(SolutionDir)/dist/$(ConfigurationName)'; Compress-Archive -Path './*' -DestinationPath '$(SolutionDir)/dist/$(SolutionName)-$(Version).zip'; Pop-Location}""/> From 3466a6e17522de2ac00fcb204f2390129453959f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bure=C5=A1?= Date: Fri, 22 Dec 2023 16:02:28 +0100 Subject: [PATCH 6/7] Remove Windows condition from zip task --- src/SpaceWarp/Directory.Build.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SpaceWarp/Directory.Build.targets b/src/SpaceWarp/Directory.Build.targets index 92e286de..a971e012 100644 --- a/src/SpaceWarp/Directory.Build.targets +++ b/src/SpaceWarp/Directory.Build.targets @@ -84,7 +84,7 @@ - From 7056fb912479813a6fb214ce3bc68287aea2d88a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Bure=C5=A1?= Date: Fri, 22 Dec 2023 17:41:41 +0100 Subject: [PATCH 7/7] This is absolutely disgusting but it seems to work... --- .../Modules/VersionChecking.cs | 77 +++++++++++++++---- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/src/SpaceWarp.VersionChecking/Modules/VersionChecking.cs b/src/SpaceWarp.VersionChecking/Modules/VersionChecking.cs index 84677fed..59f2b8bd 100644 --- a/src/SpaceWarp.VersionChecking/Modules/VersionChecking.cs +++ b/src/SpaceWarp.VersionChecking/Modules/VersionChecking.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections; +using System.Collections; using System.Reflection; using System.Xml; using JetBrains.Annotations; @@ -20,6 +19,7 @@ public class VersionChecking : SpaceWarpModule public ConfigValue ConfigCheckVersions; public static VersionChecking Instance; private string _kspVersion; + public override void LoadModule() { Instance = this; @@ -37,11 +37,11 @@ public override void PreInitializeModule() public override void InitializeModule() { - if (ConfigCheckVersions.Value) { CheckVersions(); } + CheckKspVersions(); } @@ -57,14 +57,43 @@ public void ClearVersions() plugin.Outdated = false; } } + public void CheckVersions() { + var uiModule = (SpaceWarpModule)AppDomain.CurrentDomain.GetAssemblies() + .First(assembly => assembly.FullName.StartsWith("SpaceWarp.UI")) + .GetTypes() + .First(type => type.FullName == "SpaceWarp.Modules.UI") + .GetField("Instance", BindingFlags.Static | BindingFlags.NonPublic) + ?.GetValue(null); + + var modListControllerField = uiModule + ?.GetType() + .GetField("ModListController", BindingFlags.Instance | BindingFlags.NonPublic); + + var versionCheckCallback = (string guid, bool isOutdated) => + { + var modListController = modListControllerField?.GetValue(uiModule); + + if (modListController == null) + { + return false; + } + + modListControllerField + .FieldType + .GetMethod("UpdateOutdated", BindingFlags.Instance | BindingFlags.NonPublic) + ?.Invoke(modListController, new object[] { guid, isOutdated }); + + return true; + }; + ClearVersions(); foreach (var plugin in PluginList.AllEnabledAndActivePlugins) { if (plugin.SWInfo.VersionCheck != null) { - SpaceWarpPlugin.Instance.StartCoroutine(CheckVersion(plugin.Guid, plugin)); + SpaceWarpPlugin.Instance.StartCoroutine(CheckVersion(plugin.Guid, plugin, versionCheckCallback)); } } @@ -72,15 +101,18 @@ public void CheckVersions() { if (info.SWInfo.VersionCheck != null) { - SpaceWarpPlugin.Instance.StartCoroutine(info.Guid, info); + SpaceWarpPlugin.Instance.StartCoroutine(CheckVersion(info.Guid, info, versionCheckCallback)); } } + + return; } - private IEnumerator CheckVersion(string guid, SpaceWarpPluginDescriptor info) + + private IEnumerator CheckVersion(string guid, SpaceWarpPluginDescriptor info, Func callback) { var www = UnityWebRequest.Get(info.SWInfo.VersionCheck); yield return www.SendWebRequest(); - + if (www.result != UnityWebRequest.Result.Success) { ModuleLogger.LogInfo($"Unable to check version for {guid} due to error {www.error}"); @@ -95,14 +127,17 @@ private IEnumerator CheckVersion(string guid, SpaceWarpPluginDescriptor info) { if (info.SWInfo.Spec >= SpecVersion.V2_0) { - isOutdated = CheckSemanticVersion(guid, info.SWInfo.Version, results, out unsupported, out newKSP2Versions); + isOutdated = CheckSemanticVersion(guid, info.SWInfo.Version, results, out unsupported, + out newKSP2Versions); } else { isOutdated = info.SWInfo.VersionCheckType switch { - VersionCheckType.SwInfo => CheckJsonVersion(guid, info.SWInfo.Version, results, out unsupported, out newKSP2Versions), - VersionCheckType.Csproj => CheckCsprojVersion(guid, info.SWInfo.Version, results, out unsupported, out newKSP2Versions), + VersionCheckType.SwInfo => CheckJsonVersion(guid, info.SWInfo.Version, results, out unsupported, + out newKSP2Versions), + VersionCheckType.Csproj => CheckCsprojVersion(guid, info.SWInfo.Version, results, + out unsupported, out newKSP2Versions), _ => throw new ArgumentOutOfRangeException(nameof(info), "Invalid version_check_type") }; } @@ -111,22 +146,29 @@ private IEnumerator CheckVersion(string guid, SpaceWarpPluginDescriptor info) { ModuleLogger.LogError($"Unable to check version for {guid} due to error {e}"); } - + info.Outdated = isOutdated; info.Unsupported = unsupported; if (isOutdated) { ModuleLogger.LogWarning($"{guid} is outdated"); } + if (unsupported) { ModuleLogger.LogWarning($"{guid} is unsupported"); info.SWInfo.SupportedKsp2Versions = newKSP2Versions; } + + while (!callback(guid, isOutdated)) + { + yield return new WaitForUpdate(); + } } } - private bool CheckSemanticVersion(string guid, string version, string json, out bool unsupported, out SupportedVersionsInfo checkVersions) + private bool CheckSemanticVersion(string guid, string version, string json, out bool unsupported, + out SupportedVersionsInfo checkVersions) { var checkInfo = JsonConvert.DeserializeObject(json); var semverOne = new SemanticVersion(version); @@ -138,10 +180,10 @@ private bool CheckSemanticVersion(string guid, string version, string json, out unsupported = true; checkVersions = checkInfo.SupportedKsp2Versions; return false; - } - private bool CheckJsonVersion(string guid, string version, string json, out bool unsupported, out SupportedVersionsInfo checkVersions) + private bool CheckJsonVersion(string guid, string version, string json, out bool unsupported, + out SupportedVersionsInfo checkVersions) { var checkInfo = JsonConvert.DeserializeObject(json); unsupported = false; @@ -153,15 +195,16 @@ private bool CheckJsonVersion(string guid, string version, string json, out bool return false; } - private bool CheckCsprojVersion(string guid, string version, string csproj, out bool unsupported, out SupportedVersionsInfo checkVersions) + private bool CheckCsprojVersion(string guid, string version, string csproj, out bool unsupported, + out SupportedVersionsInfo checkVersions) { var document = new XmlDocument(); document.LoadXml(csproj); var ksp2VersionMin = document.GetElementsByTagName("Ksp2VersionMin")[0]?.InnerText - ?? SupportedVersionsInfo.DefaultMin; + ?? SupportedVersionsInfo.DefaultMin; var ksp2VersionMax = document.GetElementsByTagName("Ksp2VersionMax")[0]?.InnerText - ?? SupportedVersionsInfo.DefaultMax; + ?? SupportedVersionsInfo.DefaultMax; checkVersions = new SupportedVersionsInfo() { Max = ksp2VersionMax,