49 lines
1.2 KiB
C#
49 lines
1.2 KiB
C#
|
using System.Collections;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace Unity.VisualScripting
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Returns the first item in a collection or enumeration.
|
||
|
/// </summary>
|
||
|
[UnitCategory("Collections")]
|
||
|
public sealed class FirstItem : Unit
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// The collection.
|
||
|
/// </summary>
|
||
|
[DoNotSerialize]
|
||
|
[PortLabelHidden]
|
||
|
public ValueInput collection { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The first item of the collection.
|
||
|
/// </summary>
|
||
|
[DoNotSerialize]
|
||
|
[PortLabelHidden]
|
||
|
public ValueOutput firstItem { get; private set; }
|
||
|
|
||
|
protected override void Definition()
|
||
|
{
|
||
|
collection = ValueInput<IEnumerable>(nameof(collection));
|
||
|
firstItem = ValueOutput(nameof(firstItem), First);
|
||
|
|
||
|
Requirement(collection, firstItem);
|
||
|
}
|
||
|
|
||
|
public object First(Flow flow)
|
||
|
{
|
||
|
var enumerable = flow.GetValue<IEnumerable>(collection);
|
||
|
|
||
|
if (enumerable is IList)
|
||
|
{
|
||
|
return ((IList)enumerable)[0];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return enumerable.Cast<object>().First();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|