From 2ad605138e9e5c6c8ef2c71b70fa90bb4c290308 Mon Sep 17 00:00:00 2001 From: b3ni15 Date: Mon, 15 Dec 2025 09:36:27 +0100 Subject: [PATCH] fix: Implement lazy initialization for Constants to prevent null reference errors --- Constants.cs | 15 ++++++++------- Main.cs | 23 ++++++++++++++++++++--- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/Constants.cs b/Constants.cs index 17b54d4..bf70d79 100644 --- a/Constants.cs +++ b/Constants.cs @@ -15,19 +15,20 @@ namespace KCM /// public static class Constants { - public static readonly MainMenuMode MainMenuMode = GameState.inst.mainMenuMode; - public static readonly PlayingMode PlayingMode = GameState.inst.playingMode; - public static readonly World World = GameState.inst.world; + // Use lazy initialization to avoid null reference when GameState isn't ready yet + public static MainMenuMode MainMenuMode => GameState.inst?.mainMenuMode; + public static PlayingMode PlayingMode => GameState.inst?.playingMode; + public static World World => GameState.inst?.world; #region "UI" - public static readonly Transform MainMenuUI_T = MainMenuMode.mainMenuUI.transform; - public static readonly GameObject MainMenuUI_O = MainMenuMode.mainMenuUI; + public static Transform MainMenuUI_T => MainMenuMode?.mainMenuUI?.transform; + public static GameObject MainMenuUI_O => MainMenuMode?.mainMenuUI; /* public static readonly Transform TopLevelUI_T = MainMenuUI_T.parent; public static readonly GameObject TopLevelUI_O = MainMenuUI_T.parent.gameObject;*/ - public static readonly Transform ChooseModeUI_T = MainMenuMode.chooseModeUI.transform; - public static readonly GameObject ChooseModeUI_O = MainMenuMode.chooseModeUI; + public static Transform ChooseModeUI_T => MainMenuMode?.chooseModeUI?.transform; + public static GameObject ChooseModeUI_O => MainMenuMode?.chooseModeUI; #endregion } diff --git a/Main.cs b/Main.cs index 998e6be..d5d42f4 100644 --- a/Main.cs +++ b/Main.cs @@ -189,7 +189,21 @@ namespace KCM Main.helper.Log(JsonConvert.SerializeObject(World.inst.mapSizeDefs, Formatting.Indented)); - KaC_Button serverBrowser = new KaC_Button(Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New").parent) + // Check if MainMenuUI_T is available + if (Constants.MainMenuUI_T == null) + { + Main.helper.Log("MainMenuUI_T is null, cannot create Multiplayer button"); + return; + } + + var buttonContainer = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New"); + if (buttonContainer == null) + { + Main.helper.Log("Button container not found"); + return; + } + + KaC_Button serverBrowser = new KaC_Button(buttonContainer.parent) { Name = "Multiplayer", Text = "Multiplayer", @@ -202,8 +216,11 @@ namespace KCM }; serverBrowser.Transform.SetSiblingIndex(2); - - Destroy(Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/Kingdom Share").gameObject); + var kingdomShare = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/Kingdom Share"); + if (kingdomShare != null) + { + Destroy(kingdomShare.gameObject); + } } catch (Exception ex) {