using Godot; namespace SupaLidlGame.Extensions; public static class NodeExtensions { /// /// Iterates through each ancestor until it finds an ancestor of type /// T /// [System.Obsolete] public static T GetAncestorDeprecated(this Node node) where T : Node { Node parent; while ((parent = node.GetParent()) != null) { if (parent is T t) { return t; } node = parent; } return null; } /// /// A version GetNode that returns null rather than cause an /// exception if the node is not found or is not the same type. /// /// /// null if name does not match /// a valid Node /// public static T GetN(this Node node, string name) where T : Node { return node.GetNode(name) as T; } public static T FindChildOfType(this Node node) where T : Node { foreach (Node child in node.GetChildren()) { if (child is T t) { return t; } } return null; } public static State.Global.GlobalState GetGlobalState(this Node node) { return node.GetNode("/root/GlobalState"); } public static Events.EventBus GetEventBus(this Node node) { return node.GetNode("/root/EventBus"); } public static Utils.World GetWorld(this Node node) { return node.GetNode("/root/World"); } }