SupaLidlGame/Extensions/Node.cs

81 lines
2.0 KiB
C#
Raw Normal View History

2022-11-25 09:11:46 -08:00
using Godot;
2023-06-03 18:21:46 -07:00
namespace SupaLidlGame.Extensions;
public static class NodeExtensions
2022-11-25 09:11:46 -08:00
{
2023-06-03 18:21:46 -07:00
/// <summary>
/// Iterates through each ancestor until it finds an ancestor of type
/// <c>T</c>
/// </summary>
2023-06-13 02:55:30 -07:00
[System.Obsolete]
public static T GetAncestorDeprecated<T>(this Node node) where T : Node
2022-11-25 09:11:46 -08:00
{
2023-06-03 18:21:46 -07:00
Node parent;
2022-11-25 09:11:46 -08:00
2023-06-03 18:21:46 -07:00
while ((parent = node.GetParent()) != null)
{
if (parent is T t)
2022-11-25 09:11:46 -08:00
{
2023-06-03 18:21:46 -07:00
return t;
2022-11-25 09:11:46 -08:00
}
2023-06-03 18:21:46 -07:00
node = parent;
2022-11-25 09:11:46 -08:00
}
2022-11-25 11:59:55 -08:00
2023-06-03 18:21:46 -07:00
return null;
}
/// <summary>
/// A version <c>GetNode</c> that returns null rather than cause an
/// exception if the node is not found or is not the same type.
/// </summary>
/// <returns>
/// <see langword="null">null</see> if <param>name</param> does not match
/// a valid Node
/// </returns>
public static T GetN<T>(this Node node, string name) where T : Node
{
return node.GetNode(name) as T;
2022-11-25 09:11:46 -08:00
}
2023-07-23 23:39:20 -07:00
public static T FindChildOfType<T>(this Node node) where T : Node
{
foreach (Node child in node.GetChildren())
{
if (child is T t)
{
return t;
}
}
return null;
}
2023-08-01 23:49:48 -07:00
public static State.Global.GlobalState GetGlobalState(this Node node)
{
return node.GetNode<State.Global.GlobalState>("/root/GlobalState");
}
public static Events.EventBus GetEventBus(this Node node)
{
return node.GetNode<Events.EventBus>("/root/EventBus");
}
2023-08-03 16:17:34 -07:00
public static Utils.World GetWorld(this Node node)
{
return node.GetNode<Utils.World>("/root/World");
}
2023-08-13 16:49:18 -07:00
public static CanvasLayer GetUI(this Node node)
{
return node.GetNode<CanvasLayer>("/root/BaseUI");
}
public static UI.UIController GetMainUI(this Node node)
{
return node.GetNode<UI.UIController>("/root/BaseUI/" +
"SubViewportContainer/UIViewport/CanvasLayer/MainUILayer/Main");
}
2022-11-25 09:11:46 -08:00
}