UnityGame/Library/PackageCache/com.unity.visualscripting/Runtime/VisualScripting.Flow/Framework/Graph/GetGraphs.cs

45 lines
1.4 KiB
C#
Raw Normal View History

2024-10-27 10:53:47 +03:00
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace Unity.VisualScripting
{
[UnitCategory("Graphs/Graph Nodes")]
public abstract class GetGraphs<TGraph, TGraphAsset, TMachine> : Unit
where TGraph : class, IGraph, new()
where TGraphAsset : Macro<TGraph>
where TMachine : Machine<TGraph, TGraphAsset>
{
/// <summary>
/// The GameObject to retrieve the graphs from.
/// </summary>
[DoNotSerialize]
[PortLabelHidden]
[NullMeansSelf]
public ValueInput gameObject { get; protected set; }
/// <summary>
/// The graph that is set on the GameObject.
/// </summary>
[DoNotSerialize]
[PortLabel("Graphs")]
[PortLabelHidden]
public ValueOutput graphList { get; protected set; }
protected override void Definition()
{
gameObject = ValueInput<GameObject>(nameof(gameObject), null).NullMeansSelf();
graphList = ValueOutput(nameof(graphList), Get);
}
List<TGraphAsset> Get(Flow flow)
{
var go = flow.GetValue<GameObject>(gameObject);
return go.GetComponents<TMachine>()
.Where(machine => go.GetComponent<TMachine>().nest.macro != null)
.Select(machine => machine.nest.macro)
.ToList();
}
}
}