A game about forced loneliness, made by TACStudios
1using UnityEngine; 2 3namespace Unity.VisualScripting 4{ 5 [UnitOrder(502)] 6 public abstract class MoveTowards<T> : Unit 7 { 8 /// <summary> 9 /// The current value. 10 /// </summary> 11 [DoNotSerialize] 12 public ValueInput current { get; private set; } 13 14 /// <summary> 15 /// The target value. 16 /// </summary> 17 [DoNotSerialize] 18 public ValueInput target { get; private set; } 19 20 /// <summary> 21 /// The maximum scalar increment between values. 22 /// </summary> 23 [DoNotSerialize] 24 public ValueInput maxDelta { get; private set; } 25 26 /// <summary> 27 /// The incremented value. 28 /// </summary> 29 [DoNotSerialize] 30 [PortLabelHidden] 31 public ValueOutput result { get; private set; } 32 33 [Serialize, Inspectable, UnitHeaderInspectable("Per Second"), InspectorToggleLeft] 34 public bool perSecond { get; set; } 35 36 [DoNotSerialize] 37 protected virtual T defaultCurrent => default(T); 38 39 [DoNotSerialize] 40 protected virtual T defaultTarget => default(T); 41 42 protected override void Definition() 43 { 44 current = ValueInput(nameof(current), defaultCurrent); 45 target = ValueInput(nameof(target), defaultTarget); 46 maxDelta = ValueInput<float>(nameof(maxDelta), 0); 47 result = ValueOutput(nameof(result), Operation); 48 49 Requirement(current, result); 50 Requirement(target, result); 51 Requirement(maxDelta, result); 52 } 53 54 private T Operation(Flow flow) 55 { 56 return Operation(flow.GetValue<T>(current), flow.GetValue<T>(target), flow.GetValue<float>(maxDelta) * (perSecond ? Time.deltaTime : 1)); 57 } 58 59 public abstract T Operation(T current, T target, float maxDelta); 60 } 61}