暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TriggerCustomEvent.cs 2.6KB

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