Maze / Library /PackageCache /com.unity.visualscripting@1.8.0 /Runtime /VisualScripting.Flow /Framework /Control /SelectOnEnum.cs
| using System; | |
| using System.Collections.Generic; | |
| namespace Unity.VisualScripting | |
| { | |
| /// <summary> | |
| /// Selects a value from a set by switching over an enum. | |
| /// </summary> | |
| [] | |
| [] | |
| [] | |
| [] | |
| [] | |
| [] | |
| public sealed class SelectOnEnum : Unit, ISelectUnit | |
| { | |
| [] | |
| public Dictionary<object, ValueInput> branches { get; private set; } | |
| /// <summary> | |
| /// The value on which to select. | |
| /// </summary> | |
| [] | |
| [] | |
| public ValueInput selector { get; private set; } | |
| /// <summary> | |
| /// The selected value. | |
| /// </summary> | |
| [] | |
| [] | |
| public ValueOutput selection { get; private set; } | |
| [] | |
| [] | |
| [] | |
| public Type enumType { get; set; } | |
| public override bool canDefine => enumType != null && enumType.IsEnum; | |
| protected override void Definition() | |
| { | |
| branches = new Dictionary<object, ValueInput>(); | |
| selection = ValueOutput(nameof(selection), Branch).Predictable(); | |
| selector = ValueInput(enumType, nameof(selector)); | |
| Requirement(selector, selection); | |
| foreach (var valueByName in EnumUtility.ValuesByNames(enumType)) | |
| { | |
| var enumValue = valueByName.Value; | |
| if (branches.ContainsKey(enumValue)) | |
| continue; | |
| var branch = ValueInput<object>("%" + valueByName.Key).AllowsNull(); | |
| branches.Add(enumValue, branch); | |
| Requirement(branch, selection); | |
| } | |
| } | |
| public object Branch(Flow flow) | |
| { | |
| var selector = flow.GetValue(this.selector, enumType); | |
| return flow.GetValue(branches[selector]); | |
| } | |
| } | |
| } | |