A game about forced loneliness, made by TACStudios
1using System.Collections.Generic; 2using System.Linq; 3using UnityEngine; 4 5namespace Unity.VisualScripting 6{ 7 /// <summary> 8 /// Triggers a custom event. 9 /// </summary> 10 [UnitSurtitle("Custom Event")] 11 [UnitShortTitle("Trigger")] 12 [TypeIcon(typeof(CustomEvent))] 13 [UnitCategory("Events")] 14 [UnitOrder(1)] 15 public sealed class TriggerCustomEvent : Unit 16 { 17 [SerializeAs(nameof(argumentCount))] 18 private int _argumentCount; 19 20 [DoNotSerialize] 21 public List<ValueInput> arguments { get; private set; } 22 23 [DoNotSerialize] 24 [Inspectable, UnitHeaderInspectable("Arguments")] 25 public int argumentCount 26 { 27 get => _argumentCount; 28 set => _argumentCount = Mathf.Clamp(value, 0, 10); 29 } 30 31 /// <summary> 32 /// The entry point to trigger the event. 33 /// </summary> 34 [DoNotSerialize] 35 [PortLabelHidden] 36 public ControlInput enter { get; private set; } 37 38 /// <summary> 39 /// The name of the event. 40 /// </summary> 41 [DoNotSerialize] 42 [PortLabelHidden] 43 public ValueInput name { get; private set; } 44 45 /// <summary> 46 /// The target of the event. 47 /// </summary> 48 [DoNotSerialize] 49 [PortLabelHidden] 50 [NullMeansSelf] 51 public ValueInput target { get; private set; } 52 53 /// <summary> 54 /// The action to do after the event has been triggered. 55 /// </summary> 56 [DoNotSerialize] 57 [PortLabelHidden] 58 public ControlOutput exit { get; private set; } 59 60 protected override void Definition() 61 { 62 enter = ControlInput(nameof(enter), Trigger); 63 64 exit = ControlOutput(nameof(exit)); 65 66 name = ValueInput(nameof(name), string.Empty); 67 68 target = ValueInput<GameObject>(nameof(target), null).NullMeansSelf(); 69 70 arguments = new List<ValueInput>(); 71 72 for (var i = 0; i < argumentCount; i++) 73 { 74 var argument = ValueInput<object>("argument_" + i); 75 arguments.Add(argument); 76 Requirement(argument, enter); 77 } 78 79 Requirement(name, enter); 80 Requirement(target, enter); 81 Succession(enter, exit); 82 } 83 84 private ControlOutput Trigger(Flow flow) 85 { 86 var target = flow.GetValue<GameObject>(this.target); 87 var name = flow.GetValue<string>(this.name); 88 var arguments = this.arguments.Select(flow.GetConvertedValue).ToArray(); 89 90 CustomEvent.Trigger(target, name, arguments); 91 92 return exit; 93 } 94 } 95}