Maze / Library /PackageCache /com.unity.visualscripting@1.8.0 /Runtime /VisualScripting.Flow /Framework /Variables /SetVariable.cs
| using UnityEngine; | |
| namespace Unity.VisualScripting | |
| { | |
| /// <summary> | |
| /// Assigns the value of a variable. | |
| /// </summary> | |
| [] | |
| public sealed class SetVariable : UnifiedVariableUnit | |
| { | |
| /// <summary> | |
| /// The entry point to assign the variable. | |
| /// </summary> | |
| [] | |
| [] | |
| public ControlInput assign { get; set; } | |
| /// <summary> | |
| /// The value to assign to the variable. | |
| /// </summary> | |
| [] | |
| [] | |
| [] | |
| public ValueInput input { get; private set; } | |
| /// <summary> | |
| /// The action to execute once the variable has been assigned. | |
| /// </summary> | |
| [] | |
| [] | |
| public ControlOutput assigned { get; set; } | |
| /// <summary> | |
| /// The value assigned to the variable. | |
| /// </summary> | |
| [] | |
| [] | |
| [] | |
| public ValueOutput output { get; private set; } | |
| protected override void Definition() | |
| { | |
| base.Definition(); | |
| assign = ControlInput(nameof(assign), Assign); | |
| input = ValueInput<object>(nameof(input)).AllowsNull(); | |
| output = ValueOutput<object>(nameof(output)); | |
| assigned = ControlOutput(nameof(assigned)); | |
| Requirement(name, assign); | |
| Requirement(input, assign); | |
| Assignment(assign, output); | |
| Succession(assign, assigned); | |
| if (kind == VariableKind.Object) | |
| { | |
| Requirement(@object, assign); | |
| } | |
| } | |
| private ControlOutput Assign(Flow flow) | |
| { | |
| var name = flow.GetValue<string>(this.name); | |
| var input = flow.GetValue(this.input); | |
| switch (kind) | |
| { | |
| case VariableKind.Flow: | |
| flow.variables.Set(name, input); | |
| break; | |
| case VariableKind.Graph: | |
| Variables.Graph(flow.stack).Set(name, input); | |
| break; | |
| case VariableKind.Object: | |
| Variables.Object(flow.GetValue<GameObject>(@object)).Set(name, input); | |
| break; | |
| case VariableKind.Scene: | |
| Variables.Scene(flow.stack.scene).Set(name, input); | |
| break; | |
| case VariableKind.Application: | |
| Variables.Application.Set(name, input); | |
| break; | |
| case VariableKind.Saved: | |
| Variables.Saved.Set(name, input); | |
| break; | |
| default: | |
| throw new UnexpectedEnumValueException<VariableKind>(kind); | |
| } | |
| flow.SetValue(output, input); | |
| return assigned; | |
| } | |
| } | |
| } | |