fix: Update button template resolution and improve error logging for missing components
This commit is contained in:
12
Main.cs
12
Main.cs
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user