mirror of
https://github.com/Ikatono/TierMaker.git
synced 2025-10-28 20:45:34 -05:00
56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using System.Collections.Generic;
|
|
using Godot;
|
|
|
|
public static class ExtensionHelper
|
|
{
|
|
public static Card GetCardWithId(this SceneTree tree, string id)
|
|
{
|
|
const string CardGroup = "Card";
|
|
var cards = tree.GetNodesInGroup(CardGroup);
|
|
foreach (var card in cards)
|
|
{
|
|
if (card is Card c)
|
|
{
|
|
if (c.Id == id)
|
|
return c;
|
|
}
|
|
else
|
|
throw new System.Exception($"Node in group {CardGroup} is not of type {nameof(Card)}");
|
|
}
|
|
return null;
|
|
}
|
|
public static Row GetRowWithId(this SceneTree tree, string id)
|
|
{
|
|
const string RowGroup = "Card";
|
|
var rows = tree.GetNodesInGroup(RowGroup);
|
|
foreach (var row in rows)
|
|
{
|
|
if (row is Row r)
|
|
{
|
|
if (r.Id == id)
|
|
return r;
|
|
}
|
|
else
|
|
throw new System.Exception($"Node in group {RowGroup} is not of type {nameof(Row)}");
|
|
}
|
|
return null;
|
|
}
|
|
public static IEnumerable<Node> GetAllDescendents(this Node node, bool includeInternal = false)
|
|
{
|
|
foreach (Node n in node.GetChildren(includeInternal))
|
|
{
|
|
yield return n;
|
|
foreach (Node c in n.GetAllDescendents())
|
|
yield return c;
|
|
}
|
|
}
|
|
// gets all descendents of a given type (in undefined order)
|
|
public static IEnumerable<T> GetAllDescendents<T>(this Node node,
|
|
bool includeInternal = false)
|
|
{
|
|
foreach (var n in node.GetAllDescendents(includeInternal))
|
|
if (n is T t)
|
|
yield return t;
|
|
}
|
|
}
|