com.wallstop-studios.dxmessaging 2.0.0-rc11 → 2.0.0-rc13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/.gitattributes +63 -63
  2. package/.github/workflows/npm-publish.yml +66 -0
  3. package/CHANGELOG.md.meta +7 -7
  4. package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +33 -33
  5. package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +33 -33
  6. package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +33 -33
  7. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +71 -71
  8. package/Editor/Analyzers.meta +8 -8
  9. package/Editor/SetupCscRsp.cs +162 -146
  10. package/Editor/SetupCscRsp.cs.meta +2 -2
  11. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +17 -17
  12. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
  13. package/Editor.meta +8 -8
  14. package/LICENSE.md +6 -6
  15. package/LICENSE.md.meta +7 -7
  16. package/README.md +387 -363
  17. package/README.md.meta +7 -7
  18. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs +7 -9
  19. package/Runtime/Core/Attributes/DxAutoMessageTypeAttribute.cs.meta +2 -2
  20. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs +7 -10
  21. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +2 -2
  22. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs +7 -10
  23. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +2 -2
  24. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs +7 -10
  25. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +2 -2
  26. package/Runtime/Core/Attributes.meta +2 -2
  27. package/Runtime/Core/Extensions/MessageExtensions.cs +342 -275
  28. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
  29. package/Runtime/Core/Extensions.meta +8 -8
  30. package/Runtime/Core/IMessage.cs +12 -12
  31. package/Runtime/Core/IMessage.cs.meta +11 -11
  32. package/Runtime/Core/InstanceId.cs +149 -149
  33. package/Runtime/Core/InstanceId.cs.meta +11 -11
  34. package/Runtime/Core/MessageBus/IMessageBus.cs +309 -309
  35. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
  36. package/Runtime/Core/MessageBus/MessageBus.cs +2243 -2084
  37. package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
  38. package/Runtime/Core/MessageBus/MessagingRegistration.cs +105 -100
  39. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
  40. package/Runtime/Core/MessageBus/RegistrationLog.cs +111 -111
  41. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
  42. package/Runtime/Core/MessageBus.meta +8 -8
  43. package/Runtime/Core/MessageHandler.cs +2778 -2759
  44. package/Runtime/Core/MessageHandler.cs.meta +11 -11
  45. package/Runtime/Core/MessageRegistrationHandle.cs +110 -110
  46. package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
  47. package/Runtime/Core/MessageRegistrationToken.cs +1234 -1234
  48. package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
  49. package/Runtime/Core/Messages/IBroadcastMessage.cs +27 -27
  50. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
  51. package/Runtime/Core/Messages/ITargetedMessage.cs +27 -26
  52. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  53. package/Runtime/Core/Messages/IUntargetedMessage.cs +27 -26
  54. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
  55. package/Runtime/Core/Messages.meta +8 -8
  56. package/Runtime/Core/MessagingDebug.cs +70 -71
  57. package/Runtime/Core/MessagingDebug.cs.meta +11 -11
  58. package/Runtime/Core.meta +8 -8
  59. package/Runtime/Unity/MessageAwareComponent.cs +77 -77
  60. package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
  61. package/Runtime/Unity/MessagingComponent.cs +99 -99
  62. package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
  63. package/Runtime/Unity.meta +8 -8
  64. package/Runtime/WallstopStudios.DxMessaging.asmdef +15 -15
  65. package/Runtime.meta +8 -8
  66. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs +92 -75
  67. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoMessageTypeGenerator.cs.meta +11 -11
  68. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs +94 -77
  69. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxBroadcastMessageGenerator.cs.meta +2 -2
  70. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs +94 -77
  71. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxTargetedMessageGenerator.cs.meta +2 -2
  72. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs +94 -78
  73. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxUntargetedMessageGenerator.cs.meta +2 -2
  74. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +21 -21
  75. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
  76. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
  77. package/SourceGenerators.meta +8 -8
  78. package/Tests/Runtime/Benchmarks/PerformanceTests.cs +373 -310
  79. package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +11 -11
  80. package/Tests/Runtime/Benchmarks.meta +8 -8
  81. package/Tests/Runtime/Core/BroadcastTests.cs +899 -899
  82. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +190 -169
  83. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +11 -11
  84. package/Tests/Runtime/Core/MessagingTestBase.cs +185 -164
  85. package/Tests/Runtime/Core/MessagingTestBase.cs.meta +11 -11
  86. package/Tests/Runtime/Core/NominalTests.cs +1740 -1518
  87. package/Tests/Runtime/Core/PostProcessorTests.cs +1236 -849
  88. package/Tests/Runtime/Core/PostProcessorTests.cs.meta +11 -11
  89. package/Tests/Runtime/Core/RegistrationTests.cs +1266 -995
  90. package/Tests/Runtime/Core/RegistrationTests.cs.meta +11 -11
  91. package/Tests/Runtime/Core/TargetedTests.cs +888 -888
  92. package/Tests/Runtime/Core/TargetedTests.cs.meta +11 -11
  93. package/Tests/Runtime/Core/UntargetedTests.cs +272 -272
  94. package/Tests/Runtime/Core/UntargetedTests.cs.meta +11 -11
  95. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +9 -9
  96. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +11 -11
  97. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +186 -140
  98. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +30 -30
  99. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +8 -8
  100. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +8 -8
  101. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +8 -8
  102. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +22 -22
  103. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.csproj.meta +7 -7
  104. package/Tests.meta +8 -8
  105. package/Third Party Notices.md.meta +7 -7
  106. package/package.json +36 -36
  107. package/package.json.meta +7 -7
@@ -1,275 +1,342 @@
1
- namespace DxMessaging.Core.Extensions
2
- {
3
- using Core;
4
- using MessageBus;
5
- using Messages;
6
-
7
- /// <summary>
8
- /// Extensions to smartly go about emitting messages :^)
9
- /// </summary>
10
- public static class MessageExtensions
11
- {
12
-
13
- #if UNITY_2017_1_OR_NEWER
14
- /// <summary>
15
- /// Emits a TargetedMessage of the given type.
16
- /// </summary>
17
- /// <param name="message">TargetedMessage to emit.</param>
18
- /// <param name="target">Target that this message is intended for.</param>
19
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
20
- public static void EmitGameObjectTargeted<TMessage>(this TMessage message, UnityEngine.GameObject target, IMessageBus messageBus = null) where TMessage : class, ITargetedMessage
21
- {
22
- InstanceId targetId = target;
23
- messageBus ??= MessageHandler.MessageBus;
24
- if (typeof(TMessage) == typeof(ITargetedMessage))
25
- {
26
- messageBus.UntypedTargetedBroadcast(targetId, message);
27
- return;
28
- }
29
-
30
- messageBus.TargetedBroadcast(ref targetId, ref message);
31
- }
32
-
33
- /// <summary>
34
- /// Emits a TargetedMessage of the given type.
35
- /// </summary>
36
- /// <param name="message">TargetedMessage to emit.</param>
37
- /// <param name="target">Target that this message is intended for.</param>
38
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
39
- public static void EmitGameObjectTargeted<TMessage>(this ref TMessage message, UnityEngine.GameObject target, IMessageBus messageBus = null) where TMessage : struct, ITargetedMessage
40
- {
41
- InstanceId targetId = target;
42
- messageBus ??= MessageHandler.MessageBus;
43
- if (typeof(TMessage) == typeof(ITargetedMessage))
44
- {
45
- messageBus.UntypedTargetedBroadcast(targetId, message);
46
- return;
47
- }
48
-
49
- messageBus.TargetedBroadcast(ref targetId, ref message);
50
- }
51
-
52
- /// <summary>
53
- /// Emits a TargetedMessage of the given type.
54
- /// </summary>
55
- /// <param name="message">TargetedMessage to emit.</param>
56
- /// <param name="target">Target that this message is intended for.</param>
57
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
58
- public static void EmitComponentTargeted<TMessage>(this TMessage message, UnityEngine.Component target, IMessageBus messageBus = null) where TMessage : class, ITargetedMessage
59
- {
60
- InstanceId targetId = target;
61
- messageBus ??= MessageHandler.MessageBus;
62
- if (typeof(TMessage) == typeof(ITargetedMessage))
63
- {
64
- messageBus.UntypedTargetedBroadcast(targetId, message);
65
- return;
66
- }
67
-
68
- messageBus.TargetedBroadcast(ref targetId, ref message);
69
- }
70
-
71
- /// <summary>
72
- /// Emits a TargetedMessage of the given type.
73
- /// </summary>
74
- /// <param name="message">TargetedMessage to emit.</param>
75
- /// <param name="target">Target that this message is intended for.</param>
76
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
77
- public static void EmitComponentTargeted<TMessage>(this ref TMessage message, UnityEngine.Component target, IMessageBus messageBus = null) where TMessage : struct, ITargetedMessage
78
- {
79
- InstanceId targetId = target;
80
- messageBus ??= MessageHandler.MessageBus;
81
- if (typeof(TMessage) == typeof(ITargetedMessage))
82
- {
83
- messageBus.UntypedTargetedBroadcast(targetId, message);
84
- return;
85
- }
86
-
87
- messageBus.TargetedBroadcast(ref targetId, ref message);
88
- }
89
- #endif
90
-
91
-
92
- /// <summary>
93
- /// Emits a TargetedMessage of the given type.
94
- /// </summary>
95
- /// <param name="message">TargetedMessage to emit.</param>
96
- /// <param name="target">Target that this message is intended for.</param>
97
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
98
- public static void EmitTargeted<TMessage>(this TMessage message, InstanceId target, IMessageBus messageBus = null) where TMessage : class, ITargetedMessage
99
- {
100
- messageBus ??= MessageHandler.MessageBus;
101
- if (typeof(TMessage) == typeof(ITargetedMessage))
102
- {
103
- messageBus.UntypedTargetedBroadcast(target, message);
104
- return;
105
- }
106
-
107
- messageBus.TargetedBroadcast(ref target, ref message);
108
- }
109
-
110
- /// <summary>
111
- /// Emits a TargetedMessage of the given type.
112
- /// </summary>
113
- /// <param name="message">TargetedMessage to emit.</param>
114
- /// <param name="target">Target that this message is intended for.</param>
115
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
116
- public static void EmitTargeted<TMessage>(this ref TMessage message, InstanceId target, IMessageBus messageBus = null) where TMessage : struct, ITargetedMessage
117
- {
118
- messageBus ??= MessageHandler.MessageBus;
119
- if (typeof(TMessage) == typeof(ITargetedMessage))
120
- {
121
- messageBus.UntypedTargetedBroadcast(target, message);
122
- return;
123
- }
124
-
125
- messageBus.TargetedBroadcast(ref target, ref message);
126
- }
127
-
128
- /// <summary>
129
- /// Emits an UntargetedMessage of the given type.
130
- /// </summary>
131
- /// <param name="message">UntargetedMessage to emit.</param>
132
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
133
- public static void EmitUntargeted<TMessage>(this TMessage message, IMessageBus messageBus = null) where TMessage : class, IUntargetedMessage
134
- {
135
- messageBus ??= MessageHandler.MessageBus;
136
- if (typeof(TMessage) == typeof(IUntargetedMessage))
137
- {
138
- messageBus.UntypedUntargetedBroadcast(message);
139
- return;
140
- }
141
-
142
- messageBus.UntargetedBroadcast(ref message);
143
- }
144
-
145
- /// <summary>
146
- /// Emits an UntargetedMessage of the given type.
147
- /// </summary>
148
- /// <param name="message">UntargetedMessage to emit.</param>
149
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
150
- public static void EmitUntargeted<TMessage>(this ref TMessage message, IMessageBus messageBus = null) where TMessage : struct, IUntargetedMessage
151
- {
152
- messageBus ??= MessageHandler.MessageBus;
153
- if (typeof(TMessage) == typeof(IUntargetedMessage))
154
- {
155
- messageBus.UntypedUntargetedBroadcast(message);
156
- return;
157
- }
158
-
159
- messageBus.UntargetedBroadcast(ref message);
160
- }
161
-
162
- #if UNITY_2017_1_OR_NEWER
163
- /// <summary>
164
- /// Emits a BroadcastMessage of the given type.
165
- /// </summary>
166
- /// <param name="message">BroadcastMessage to emit.</param>
167
- /// <param name="source">Source of this message.</param>
168
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
169
- public static void EmitGameObjectBroadcast<TMessage>(this TMessage message, UnityEngine.GameObject source, IMessageBus messageBus = null) where TMessage : class, IBroadcastMessage
170
- {
171
- InstanceId sourceId = source;
172
- messageBus ??= MessageHandler.MessageBus;
173
- if (typeof(TMessage) == typeof(IBroadcastMessage))
174
- {
175
- messageBus.UntypedSourcedBroadcast(sourceId, message);
176
- return;
177
- }
178
-
179
- messageBus.SourcedBroadcast(ref sourceId, ref message);
180
- }
181
-
182
- /// <summary>
183
- /// Emits a BroadcastMessage of the given type.
184
- /// </summary>
185
- /// <param name="message">BroadcastMessage to emit.</param>
186
- /// <param name="source">Source of this message.</param>
187
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
188
- public static void EmitGameObjectBroadcast<TMessage>(this ref TMessage message, UnityEngine.GameObject source, IMessageBus messageBus = null) where TMessage : struct, IBroadcastMessage
189
- {
190
- InstanceId sourceId = source;
191
- messageBus ??= MessageHandler.MessageBus;
192
- if (typeof(TMessage) == typeof(IBroadcastMessage))
193
- {
194
- messageBus.UntypedSourcedBroadcast(sourceId, message);
195
- return;
196
- }
197
-
198
- messageBus.SourcedBroadcast(ref sourceId, ref message);
199
- }
200
-
201
- /// <summary>
202
- /// Emits a BroadcastMessage of the given type from the specified component.
203
- /// </summary>
204
- /// <param name="message">BroadcastMessage to emit.</param>
205
- /// <param name="source">Source of this message.</param>
206
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
207
- public static void EmitComponentBroadcast<TMessage>(this TMessage message, UnityEngine.Component source, IMessageBus messageBus = null) where TMessage : class, IBroadcastMessage
208
- {
209
- InstanceId sourceId = source;
210
- messageBus ??= MessageHandler.MessageBus;
211
- if (typeof(TMessage) == typeof(IBroadcastMessage))
212
- {
213
- messageBus.UntypedSourcedBroadcast(sourceId, message);
214
- return;
215
- }
216
-
217
- messageBus.SourcedBroadcast(ref sourceId, ref message);
218
- }
219
-
220
- /// <summary>
221
- /// Emits a BroadcastMessage of the given type from the specified component.
222
- /// </summary>
223
- /// <param name="message">BroadcastMessage to emit.</param>
224
- /// <param name="source">Source of this message.</param>
225
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
226
- public static void EmitComponentBroadcast<TMessage>(this ref TMessage message, UnityEngine.Component source, IMessageBus messageBus = null) where TMessage : struct, IBroadcastMessage
227
- {
228
- InstanceId sourceId = source;
229
- messageBus ??= MessageHandler.MessageBus;
230
- if (typeof(TMessage) == typeof(IBroadcastMessage))
231
- {
232
- messageBus.UntypedSourcedBroadcast(sourceId, message);
233
- return;
234
- }
235
-
236
- messageBus.SourcedBroadcast(ref sourceId, ref message);
237
- }
238
- #endif
239
- /// <summary>
240
- /// Emits a BroadcastMessage of the given type from the specified component.
241
- /// </summary>
242
- /// <param name="message">BroadcastMessage to emit.</param>
243
- /// <param name="source">Source of this message.</param>
244
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
245
- public static void EmitBroadcast<TMessage>(this TMessage message, InstanceId source, IMessageBus messageBus = null) where TMessage : class, IBroadcastMessage
246
- {
247
- messageBus ??= MessageHandler.MessageBus;
248
- if (typeof(TMessage) == typeof(IBroadcastMessage))
249
- {
250
- messageBus.UntypedSourcedBroadcast(source, message);
251
- return;
252
- }
253
-
254
- messageBus.SourcedBroadcast(ref source, ref message);
255
- }
256
-
257
- /// <summary>
258
- /// Emits a BroadcastMessage of the given type from the specified component.
259
- /// </summary>
260
- /// <param name="message">BroadcastMessage to emit.</param>
261
- /// <param name="source">Source of this message.</param>
262
- /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
263
- public static void EmitBroadcast<TMessage>(this ref TMessage message, InstanceId source, IMessageBus messageBus = null) where TMessage : struct, IBroadcastMessage
264
- {
265
- messageBus ??= MessageHandler.MessageBus;
266
- if (typeof(TMessage) == typeof(IBroadcastMessage))
267
- {
268
- messageBus.UntypedSourcedBroadcast(source, message);
269
- return;
270
- }
271
-
272
- messageBus.SourcedBroadcast(ref source, ref message);
273
- }
274
- }
275
- }
1
+ namespace DxMessaging.Core.Extensions
2
+ {
3
+ using Core;
4
+ using MessageBus;
5
+ using Messages;
6
+
7
+ /// <summary>
8
+ /// Extensions to smartly go about emitting messages :^)
9
+ /// </summary>
10
+ public static class MessageExtensions
11
+ {
12
+ #if UNITY_2017_1_OR_NEWER
13
+ /// <summary>
14
+ /// Emits a TargetedMessage of the given type.
15
+ /// </summary>
16
+ /// <param name="message">TargetedMessage to emit.</param>
17
+ /// <param name="target">Target that this message is intended for.</param>
18
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
19
+ public static void EmitGameObjectTargeted<TMessage>(
20
+ this TMessage message,
21
+ UnityEngine.GameObject target,
22
+ IMessageBus messageBus = null
23
+ )
24
+ where TMessage : class, ITargetedMessage
25
+ {
26
+ InstanceId targetId = target;
27
+ messageBus ??= MessageHandler.MessageBus;
28
+ if (typeof(TMessage) == typeof(ITargetedMessage))
29
+ {
30
+ messageBus.UntypedTargetedBroadcast(targetId, message);
31
+ return;
32
+ }
33
+
34
+ messageBus.TargetedBroadcast(ref targetId, ref message);
35
+ }
36
+
37
+ /// <summary>
38
+ /// Emits a TargetedMessage of the given type.
39
+ /// </summary>
40
+ /// <param name="message">TargetedMessage to emit.</param>
41
+ /// <param name="target">Target that this message is intended for.</param>
42
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
43
+ public static void EmitGameObjectTargeted<TMessage>(
44
+ this ref TMessage message,
45
+ UnityEngine.GameObject target,
46
+ IMessageBus messageBus = null
47
+ )
48
+ where TMessage : struct, ITargetedMessage
49
+ {
50
+ InstanceId targetId = target;
51
+ messageBus ??= MessageHandler.MessageBus;
52
+ if (typeof(TMessage) == typeof(ITargetedMessage))
53
+ {
54
+ messageBus.UntypedTargetedBroadcast(targetId, message);
55
+ return;
56
+ }
57
+
58
+ messageBus.TargetedBroadcast(ref targetId, ref message);
59
+ }
60
+
61
+ /// <summary>
62
+ /// Emits a TargetedMessage of the given type.
63
+ /// </summary>
64
+ /// <param name="message">TargetedMessage to emit.</param>
65
+ /// <param name="target">Target that this message is intended for.</param>
66
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
67
+ public static void EmitComponentTargeted<TMessage>(
68
+ this TMessage message,
69
+ UnityEngine.Component target,
70
+ IMessageBus messageBus = null
71
+ )
72
+ where TMessage : class, ITargetedMessage
73
+ {
74
+ InstanceId targetId = target;
75
+ messageBus ??= MessageHandler.MessageBus;
76
+ if (typeof(TMessage) == typeof(ITargetedMessage))
77
+ {
78
+ messageBus.UntypedTargetedBroadcast(targetId, message);
79
+ return;
80
+ }
81
+
82
+ messageBus.TargetedBroadcast(ref targetId, ref message);
83
+ }
84
+
85
+ /// <summary>
86
+ /// Emits a TargetedMessage of the given type.
87
+ /// </summary>
88
+ /// <param name="message">TargetedMessage to emit.</param>
89
+ /// <param name="target">Target that this message is intended for.</param>
90
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
91
+ public static void EmitComponentTargeted<TMessage>(
92
+ this ref TMessage message,
93
+ UnityEngine.Component target,
94
+ IMessageBus messageBus = null
95
+ )
96
+ where TMessage : struct, ITargetedMessage
97
+ {
98
+ InstanceId targetId = target;
99
+ messageBus ??= MessageHandler.MessageBus;
100
+ if (typeof(TMessage) == typeof(ITargetedMessage))
101
+ {
102
+ messageBus.UntypedTargetedBroadcast(targetId, message);
103
+ return;
104
+ }
105
+
106
+ messageBus.TargetedBroadcast(ref targetId, ref message);
107
+ }
108
+ #endif
109
+
110
+ /// <summary>
111
+ /// Emits a TargetedMessage of the given type.
112
+ /// </summary>
113
+ /// <param name="message">TargetedMessage to emit.</param>
114
+ /// <param name="target">Target that this message is intended for.</param>
115
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
116
+ public static void EmitTargeted<TMessage>(
117
+ this TMessage message,
118
+ InstanceId target,
119
+ IMessageBus messageBus = null
120
+ )
121
+ where TMessage : class, ITargetedMessage
122
+ {
123
+ messageBus ??= MessageHandler.MessageBus;
124
+ if (typeof(TMessage) == typeof(ITargetedMessage))
125
+ {
126
+ messageBus.UntypedTargetedBroadcast(target, message);
127
+ return;
128
+ }
129
+
130
+ messageBus.TargetedBroadcast(ref target, ref message);
131
+ }
132
+
133
+ /// <summary>
134
+ /// Emits a TargetedMessage of the given type.
135
+ /// </summary>
136
+ /// <param name="message">TargetedMessage to emit.</param>
137
+ /// <param name="target">Target that this message is intended for.</param>
138
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
139
+ public static void EmitTargeted<TMessage>(
140
+ this ref TMessage message,
141
+ InstanceId target,
142
+ IMessageBus messageBus = null
143
+ )
144
+ where TMessage : struct, ITargetedMessage
145
+ {
146
+ messageBus ??= MessageHandler.MessageBus;
147
+ if (typeof(TMessage) == typeof(ITargetedMessage))
148
+ {
149
+ messageBus.UntypedTargetedBroadcast(target, message);
150
+ return;
151
+ }
152
+
153
+ messageBus.TargetedBroadcast(ref target, ref message);
154
+ }
155
+
156
+ /// <summary>
157
+ /// Emits an UntargetedMessage of the given type.
158
+ /// </summary>
159
+ /// <param name="message">UntargetedMessage to emit.</param>
160
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
161
+ public static void EmitUntargeted<TMessage>(
162
+ this TMessage message,
163
+ IMessageBus messageBus = null
164
+ )
165
+ where TMessage : class, IUntargetedMessage
166
+ {
167
+ messageBus ??= MessageHandler.MessageBus;
168
+ if (typeof(TMessage) == typeof(IUntargetedMessage))
169
+ {
170
+ messageBus.UntypedUntargetedBroadcast(message);
171
+ return;
172
+ }
173
+
174
+ messageBus.UntargetedBroadcast(ref message);
175
+ }
176
+
177
+ /// <summary>
178
+ /// Emits an UntargetedMessage of the given type.
179
+ /// </summary>
180
+ /// <param name="message">UntargetedMessage to emit.</param>
181
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
182
+ public static void EmitUntargeted<TMessage>(
183
+ this ref TMessage message,
184
+ IMessageBus messageBus = null
185
+ )
186
+ where TMessage : struct, IUntargetedMessage
187
+ {
188
+ messageBus ??= MessageHandler.MessageBus;
189
+ if (typeof(TMessage) == typeof(IUntargetedMessage))
190
+ {
191
+ messageBus.UntypedUntargetedBroadcast(message);
192
+ return;
193
+ }
194
+
195
+ messageBus.UntargetedBroadcast(ref message);
196
+ }
197
+
198
+ #if UNITY_2017_1_OR_NEWER
199
+ /// <summary>
200
+ /// Emits a BroadcastMessage of the given type.
201
+ /// </summary>
202
+ /// <param name="message">BroadcastMessage to emit.</param>
203
+ /// <param name="source">Source of this message.</param>
204
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
205
+ public static void EmitGameObjectBroadcast<TMessage>(
206
+ this TMessage message,
207
+ UnityEngine.GameObject source,
208
+ IMessageBus messageBus = null
209
+ )
210
+ where TMessage : class, IBroadcastMessage
211
+ {
212
+ InstanceId sourceId = source;
213
+ messageBus ??= MessageHandler.MessageBus;
214
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
215
+ {
216
+ messageBus.UntypedSourcedBroadcast(sourceId, message);
217
+ return;
218
+ }
219
+
220
+ messageBus.SourcedBroadcast(ref sourceId, ref message);
221
+ }
222
+
223
+ /// <summary>
224
+ /// Emits a BroadcastMessage of the given type.
225
+ /// </summary>
226
+ /// <param name="message">BroadcastMessage to emit.</param>
227
+ /// <param name="source">Source of this message.</param>
228
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
229
+ public static void EmitGameObjectBroadcast<TMessage>(
230
+ this ref TMessage message,
231
+ UnityEngine.GameObject source,
232
+ IMessageBus messageBus = null
233
+ )
234
+ where TMessage : struct, IBroadcastMessage
235
+ {
236
+ InstanceId sourceId = source;
237
+ messageBus ??= MessageHandler.MessageBus;
238
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
239
+ {
240
+ messageBus.UntypedSourcedBroadcast(sourceId, message);
241
+ return;
242
+ }
243
+
244
+ messageBus.SourcedBroadcast(ref sourceId, ref message);
245
+ }
246
+
247
+ /// <summary>
248
+ /// Emits a BroadcastMessage of the given type from the specified component.
249
+ /// </summary>
250
+ /// <param name="message">BroadcastMessage to emit.</param>
251
+ /// <param name="source">Source of this message.</param>
252
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
253
+ public static void EmitComponentBroadcast<TMessage>(
254
+ this TMessage message,
255
+ UnityEngine.Component source,
256
+ IMessageBus messageBus = null
257
+ )
258
+ where TMessage : class, IBroadcastMessage
259
+ {
260
+ InstanceId sourceId = source;
261
+ messageBus ??= MessageHandler.MessageBus;
262
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
263
+ {
264
+ messageBus.UntypedSourcedBroadcast(sourceId, message);
265
+ return;
266
+ }
267
+
268
+ messageBus.SourcedBroadcast(ref sourceId, ref message);
269
+ }
270
+
271
+ /// <summary>
272
+ /// Emits a BroadcastMessage of the given type from the specified component.
273
+ /// </summary>
274
+ /// <param name="message">BroadcastMessage to emit.</param>
275
+ /// <param name="source">Source of this message.</param>
276
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
277
+ public static void EmitComponentBroadcast<TMessage>(
278
+ this ref TMessage message,
279
+ UnityEngine.Component source,
280
+ IMessageBus messageBus = null
281
+ )
282
+ where TMessage : struct, IBroadcastMessage
283
+ {
284
+ InstanceId sourceId = source;
285
+ messageBus ??= MessageHandler.MessageBus;
286
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
287
+ {
288
+ messageBus.UntypedSourcedBroadcast(sourceId, message);
289
+ return;
290
+ }
291
+
292
+ messageBus.SourcedBroadcast(ref sourceId, ref message);
293
+ }
294
+ #endif
295
+
296
+ /// <summary>
297
+ /// Emits a BroadcastMessage of the given type from the specified component.
298
+ /// </summary>
299
+ /// <param name="message">BroadcastMessage to emit.</param>
300
+ /// <param name="source">Source of this message.</param>
301
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
302
+ public static void EmitBroadcast<TMessage>(
303
+ this TMessage message,
304
+ InstanceId source,
305
+ IMessageBus messageBus = null
306
+ )
307
+ where TMessage : class, IBroadcastMessage
308
+ {
309
+ messageBus ??= MessageHandler.MessageBus;
310
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
311
+ {
312
+ messageBus.UntypedSourcedBroadcast(source, message);
313
+ return;
314
+ }
315
+
316
+ messageBus.SourcedBroadcast(ref source, ref message);
317
+ }
318
+
319
+ /// <summary>
320
+ /// Emits a BroadcastMessage of the given type from the specified component.
321
+ /// </summary>
322
+ /// <param name="message">BroadcastMessage to emit.</param>
323
+ /// <param name="source">Source of this message.</param>
324
+ /// <param name="messageBus">MessageBus to emit to. If null, uses the GlobalMessageBus.</param>
325
+ public static void EmitBroadcast<TMessage>(
326
+ this ref TMessage message,
327
+ InstanceId source,
328
+ IMessageBus messageBus = null
329
+ )
330
+ where TMessage : struct, IBroadcastMessage
331
+ {
332
+ messageBus ??= MessageHandler.MessageBus;
333
+ if (typeof(TMessage) == typeof(IBroadcastMessage))
334
+ {
335
+ messageBus.UntypedSourcedBroadcast(source, message);
336
+ return;
337
+ }
338
+
339
+ messageBus.SourcedBroadcast(ref source, ref message);
340
+ }
341
+ }
342
+ }