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}");
|
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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user