fix: Update button template resolution and improve error logging for missing components

This commit is contained in:
2025-12-15 09:56:55 +01:00
parent 4d8279719c
commit 270a92c617
3 changed files with 46 additions and 21 deletions

12
Main.cs
View File

@@ -218,7 +218,14 @@ namespace KCM
} }
Main.helper.Log($"Found button container at: {buttonContainer.name}"); Main.helper.Log($"Found button container at: {buttonContainer.name}");
KaC_Button serverBrowser = new KaC_Button(buttonContainer.parent) var templateButton = buttonContainer.GetComponent<Button>();
if (templateButton == null)
{
Main.helper.Log("Template button on container is missing Button component.");
return;
}
KaC_Button serverBrowser = new KaC_Button(templateButton, buttonContainer.parent)
{ {
Name = "Multiplayer", Name = "Multiplayer",
Text = "Multiplayer", Text = "Multiplayer",
@@ -231,7 +238,8 @@ namespace KCM
}; };
serverBrowser.Transform.SetSiblingIndex(2); serverBrowser.Transform.SetSiblingIndex(2);
var kingdomShare = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/Kingdom Share"); var kingdomShare = Constants.MainMenuUI_T.Find("MainMenu/TopLevel/Body/ButtonContainer/Kingdom Share")
?? Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/Kingdom Share");
if (kingdomShare != null) if (kingdomShare != null)
{ {
Destroy(kingdomShare.gameObject); Destroy(kingdomShare.gameObject);

View File

@@ -305,10 +305,11 @@ namespace KCM
return; return;
} }
var topLevelCanvas = Constants.MainMenuUI_T.Find("TopLevelUICanvas"); var topLevelCanvas = Constants.MainMenuUI_T.Find("MainMenu/TopLevel")
?? Constants.MainMenuUI_T.Find("TopLevelUICanvas");
if (topLevelCanvas == null) if (topLevelCanvas == null)
{ {
Main.helper.Log("TopLevelUICanvas not found in ServerBrowser"); Main.helper.Log("TopLevel/TopLevelUICanvas not found in ServerBrowser");
return; return;
} }

View File

@@ -15,6 +15,11 @@ namespace KCM.UI
class KaC_Button class KaC_Button
{ {
public Button Button = null; public Button Button = null;
private static readonly string[] ButtonPaths =
{
"MainMenu/TopLevel/Body/ButtonContainer/New",
"TopLevelUICanvas/TopLevel/Body/ButtonContainer/New" // legacy path fallback
};
public string Name public string Name
{ {
@@ -84,14 +89,18 @@ namespace KCM.UI
set => Transform.SetSiblingIndex(value); set => Transform.SetSiblingIndex(value);
} }
public KaC_Button(Transform parent = null) public KaC_Button(Transform parent = null) : this(null, parent) { }
{
Button b = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New").GetComponent<Button>();
if (parent == null) public KaC_Button(Button b, Transform parent = null)
Button = GameObject.Instantiate(b); {
else var templateButton = ResolveTemplateButton(b);
Button = GameObject.Instantiate(b, parent);
if (templateButton == null)
throw new InvalidOperationException("Template button not found in main menu UI.");
Button = parent == null
? GameObject.Instantiate(templateButton)
: GameObject.Instantiate(templateButton, parent);
foreach (Localize Localize in Button.GetComponentsInChildren<Localize>()) foreach (Localize Localize in Button.GetComponentsInChildren<Localize>())
GameObject.Destroy(Localize); GameObject.Destroy(Localize);
@@ -99,20 +108,27 @@ namespace KCM.UI
Button.onClick = new Button.ButtonClickedEvent(); Button.onClick = new Button.ButtonClickedEvent();
} }
public KaC_Button(Button b, Transform parent = null) private static Button ResolveTemplateButton(Button providedButton)
{ {
if (b == null) if (providedButton != null)
b = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New").GetComponent<Button>(); return providedButton;
if (parent == null) foreach (var path in ButtonPaths)
Button = GameObject.Instantiate(b); {
else var transform = Constants.MainMenuUI_T?.Find(path);
Button = GameObject.Instantiate(b, parent); if (transform == null)
continue;
foreach (Localize Localize in Button.GetComponentsInChildren<Localize>()) var button = transform.GetComponent<Button>();
GameObject.Destroy(Localize); if (button != null)
{
Main.helper?.Log($"Using menu button template at '{path}'.");
return button;
}
}
Button.onClick = new Button.ButtonClickedEvent(); Main.helper?.Log("Failed to find menu button template for KaC_Button.");
return null;
} }
public override string ToString() public override string ToString()