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}");
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",
Text = "Multiplayer",
@@ -231,7 +238,8 @@ namespace KCM
};
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)
{
Destroy(kingdomShare.gameObject);

View File

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

View File

@@ -15,6 +15,11 @@ namespace KCM.UI
class KaC_Button
{
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
{
@@ -84,14 +89,18 @@ namespace KCM.UI
set => Transform.SetSiblingIndex(value);
}
public KaC_Button(Transform parent = null)
{
Button b = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New").GetComponent<Button>();
public KaC_Button(Transform parent = null) : this(null, parent) { }
if (parent == null)
Button = GameObject.Instantiate(b);
else
Button = GameObject.Instantiate(b, parent);
public KaC_Button(Button b, Transform parent = null)
{
var templateButton = ResolveTemplateButton(b);
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>())
GameObject.Destroy(Localize);
@@ -99,20 +108,27 @@ namespace KCM.UI
Button.onClick = new Button.ButtonClickedEvent();
}
public KaC_Button(Button b, Transform parent = null)
private static Button ResolveTemplateButton(Button providedButton)
{
if (b == null)
b = Constants.MainMenuUI_T.Find("TopLevelUICanvas/TopLevel/Body/ButtonContainer/New").GetComponent<Button>();
if (providedButton != null)
return providedButton;
if (parent == null)
Button = GameObject.Instantiate(b);
else
Button = GameObject.Instantiate(b, parent);
foreach (var path in ButtonPaths)
{
var transform = Constants.MainMenuUI_T?.Find(path);
if (transform == null)
continue;
foreach (Localize Localize in Button.GetComponentsInChildren<Localize>())
GameObject.Destroy(Localize);
var button = transform.GetComponent<Button>();
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()