com.wallstop-studios.dxmessaging 2.2.0 → 3.1.0

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 (270) hide show
  1. package/CHANGELOG.md +315 -67
  2. package/CHANGELOG.md.meta +7 -7
  3. package/Editor/Analyzers/BaseCallIlInspector.cs +277 -0
  4. package/Editor/Analyzers/BaseCallIlInspector.cs.meta +11 -0
  5. package/Editor/Analyzers/BaseCallLogMessageParser.cs +295 -0
  6. package/Editor/Analyzers/BaseCallLogMessageParser.cs.meta +11 -0
  7. package/Editor/Analyzers/BaseCallReportAggregator.cs +308 -0
  8. package/Editor/Analyzers/BaseCallReportAggregator.cs.meta +11 -0
  9. package/Editor/Analyzers/BaseCallTypeScanner.cs +110 -0
  10. package/Editor/Analyzers/BaseCallTypeScanner.cs.meta +11 -0
  11. package/Editor/Analyzers/BaseCallTypeScannerCore.cs +562 -0
  12. package/Editor/Analyzers/BaseCallTypeScannerCore.cs.meta +11 -0
  13. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +1129 -0
  14. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs.meta +11 -0
  15. package/Editor/Analyzers/Microsoft.CodeAnalysis.CSharp.dll.meta +44 -44
  16. package/Editor/Analyzers/Microsoft.CodeAnalysis.dll.meta +44 -44
  17. package/Editor/Analyzers/System.Collections.Immutable.dll.meta +44 -44
  18. package/Editor/Analyzers/System.Reflection.Metadata.dll.meta +44 -44
  19. package/Editor/Analyzers/System.Runtime.CompilerServices.Unsafe.dll.meta +44 -44
  20. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll +0 -0
  21. package/Editor/Analyzers/WallstopStudios.DxMessaging.Analyzer.dll.meta +46 -0
  22. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  23. package/Editor/Analyzers/WallstopStudios.DxMessaging.SourceGenerators.dll.meta +72 -72
  24. package/Editor/Analyzers.meta +8 -8
  25. package/Editor/AssemblyInfo.cs.meta +11 -3
  26. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs +81 -0
  27. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs.meta +11 -0
  28. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +429 -0
  29. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs.meta +11 -0
  30. package/Editor/CustomEditors/MessagingComponentEditor.cs +1 -1
  31. package/Editor/CustomEditors/MessagingComponentEditor.cs.meta +11 -3
  32. package/Editor/CustomEditors.meta +2 -2
  33. package/Editor/DxMessagingEditorIdle.cs +62 -0
  34. package/Editor/DxMessagingEditorIdle.cs.meta +11 -0
  35. package/Editor/DxMessagingEditorInitializer.cs +112 -15
  36. package/Editor/DxMessagingEditorInitializer.cs.meta +11 -3
  37. package/Editor/DxMessagingEditorLog.cs +32 -0
  38. package/Editor/DxMessagingEditorLog.cs.meta +11 -0
  39. package/Editor/DxMessagingMenu.cs.meta +11 -11
  40. package/Editor/DxMessagingSceneBuildProcessor.cs.meta +11 -11
  41. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs +313 -0
  42. package/Editor/Settings/DxMessagingBaseCallIgnoreSync.cs.meta +11 -0
  43. package/Editor/Settings/DxMessagingSettings.cs +261 -11
  44. package/Editor/Settings/DxMessagingSettings.cs.meta +11 -3
  45. package/Editor/Settings/DxMessagingSettingsProvider.cs +50 -33
  46. package/Editor/Settings/DxMessagingSettingsProvider.cs.meta +11 -3
  47. package/Editor/Settings.meta +2 -2
  48. package/Editor/SetupCscRsp.cs +406 -39
  49. package/Editor/SetupCscRsp.cs.meta +11 -3
  50. package/Editor/Testing/MessagingComponentEditorHarness.cs +2 -2
  51. package/Editor/Testing/MessagingComponentEditorHarness.cs.meta +11 -3
  52. package/Editor/Testing.meta +3 -3
  53. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef +14 -14
  54. package/Editor/WallstopStudios.DxMessaging.Editor.asmdef.meta +7 -7
  55. package/Editor.meta +8 -8
  56. package/LICENSE.md +9 -9
  57. package/LICENSE.md.meta +7 -7
  58. package/README.md +940 -900
  59. package/README.md.meta +7 -7
  60. package/Runtime/AssemblyInfo.cs +4 -0
  61. package/Runtime/AssemblyInfo.cs.meta +11 -3
  62. package/Runtime/Core/Attributes/DxAutoConstructorAttribute.cs.meta +11 -3
  63. package/Runtime/Core/Attributes/DxBroadcastMessageAttribute.cs.meta +11 -3
  64. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs +26 -0
  65. package/Runtime/Core/Attributes/DxIgnoreMissingBaseCallAttribute.cs.meta +11 -0
  66. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs +2 -4
  67. package/Runtime/Core/Attributes/DxOptionalParameterAttribute.cs.meta +11 -3
  68. package/Runtime/Core/Attributes/DxTargetedMessageAttribute.cs.meta +11 -3
  69. package/Runtime/Core/Attributes/DxUntargetedMessageAttribute.cs.meta +11 -3
  70. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs +56 -0
  71. package/Runtime/Core/Attributes/Il2CppSetOptionAttribute.cs.meta +11 -0
  72. package/Runtime/Core/Attributes.meta +2 -2
  73. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs +195 -0
  74. package/Runtime/Core/Configuration/DxMessagingRuntimeSettings.cs.meta +11 -0
  75. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs +179 -0
  76. package/Runtime/Core/Configuration/DxMessagingRuntimeSettingsProvider.cs.meta +11 -0
  77. package/Runtime/Core/Configuration.meta +9 -0
  78. package/Runtime/Core/DataStructure/CyclicBuffer.cs +46 -28
  79. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -3
  80. package/Runtime/Core/DataStructure.meta +2 -2
  81. package/Runtime/Core/Diagnostics/MessageEmissionData.cs.meta +11 -3
  82. package/Runtime/Core/Diagnostics/MessageRegistrationData.cs.meta +11 -3
  83. package/Runtime/Core/Diagnostics/MessageRegistrationType.cs.meta +11 -3
  84. package/Runtime/Core/Diagnostics.meta +2 -2
  85. package/Runtime/Core/DxMessagingStaticState.cs +19 -0
  86. package/Runtime/Core/DxMessagingStaticState.cs.meta +11 -11
  87. package/Runtime/Core/Extensions/EnumExtensions.cs +6 -5
  88. package/Runtime/Core/Extensions/EnumExtensions.cs.meta +11 -3
  89. package/Runtime/Core/Extensions/IListExtensions.cs.meta +11 -3
  90. package/Runtime/Core/Extensions/MessageBusExtensions.cs.meta +12 -12
  91. package/Runtime/Core/Extensions/MessageExtensions.cs +0 -60
  92. package/Runtime/Core/Extensions/MessageExtensions.cs.meta +11 -11
  93. package/Runtime/Core/Extensions.meta +8 -8
  94. package/Runtime/Core/Helper/MessageCache.cs +32 -0
  95. package/Runtime/Core/Helper/MessageCache.cs.meta +11 -3
  96. package/Runtime/Core/Helper/MessageHelperIndexer.cs.meta +11 -3
  97. package/Runtime/Core/Helper.meta +2 -2
  98. package/Runtime/Core/IMessage.cs +3 -3
  99. package/Runtime/Core/IMessage.cs.meta +11 -11
  100. package/Runtime/Core/InstanceId.cs +25 -1
  101. package/Runtime/Core/InstanceId.cs.meta +11 -11
  102. package/Runtime/Core/Internal/DxUnsafe.cs +60 -0
  103. package/Runtime/Core/Internal/DxUnsafe.cs.meta +11 -0
  104. package/Runtime/Core/Internal/FlatDispatch.cs +198 -0
  105. package/Runtime/Core/Internal/FlatDispatch.cs.meta +11 -0
  106. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs +38 -0
  107. package/Runtime/Core/Internal/TypedGlobalSlotIndex.cs.meta +11 -0
  108. package/Runtime/Core/Internal/TypedSlotIndex.cs +81 -0
  109. package/Runtime/Core/Internal/TypedSlotIndex.cs.meta +11 -0
  110. package/Runtime/Core/Internal/TypedSlots.cs +597 -0
  111. package/Runtime/Core/Internal/TypedSlots.cs.meta +11 -0
  112. package/Runtime/Core/Internal.meta +9 -0
  113. package/Runtime/Core/MessageBus/DiagnosticsTarget.cs.meta +11 -11
  114. package/Runtime/Core/MessageBus/GlobalMessageBusProvider.cs.meta +11 -11
  115. package/Runtime/Core/MessageBus/IMessageBus.cs +189 -15
  116. package/Runtime/Core/MessageBus/IMessageBus.cs.meta +11 -11
  117. package/Runtime/Core/MessageBus/IMessageBusProvider.cs.meta +11 -11
  118. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs +1 -0
  119. package/Runtime/Core/MessageBus/IMessageRegistrationBuilder.cs.meta +11 -11
  120. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs +16 -0
  121. package/Runtime/Core/MessageBus/Internal/BusContextIndex.cs.meta +11 -0
  122. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs +40 -0
  123. package/Runtime/Core/MessageBus/Internal/BusSinkIndex.cs.meta +11 -0
  124. package/Runtime/Core/MessageBus/Internal/BusSlots.cs +719 -0
  125. package/Runtime/Core/MessageBus/Internal/BusSlots.cs.meta +11 -0
  126. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs +38 -0
  127. package/Runtime/Core/MessageBus/Internal/DispatchKind.cs.meta +11 -0
  128. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs +20 -0
  129. package/Runtime/Core/MessageBus/Internal/DispatchPhase.cs.meta +11 -0
  130. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs +28 -0
  131. package/Runtime/Core/MessageBus/Internal/DispatchVariant.cs.meta +11 -0
  132. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs +48 -0
  133. package/Runtime/Core/MessageBus/Internal/IEvictableSlot.cs.meta +11 -0
  134. package/Runtime/Core/MessageBus/Internal/ISweepable.cs +15 -0
  135. package/Runtime/Core/MessageBus/Internal/ISweepable.cs.meta +11 -0
  136. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs +222 -0
  137. package/Runtime/Core/MessageBus/Internal/RegistrationMethodAxes.cs.meta +11 -0
  138. package/Runtime/Core/MessageBus/Internal/SlotKey.cs +192 -0
  139. package/Runtime/Core/MessageBus/Internal/SlotKey.cs.meta +11 -0
  140. package/Runtime/Core/MessageBus/Internal.meta +9 -0
  141. package/Runtime/Core/MessageBus/MessageBus.cs +5366 -3838
  142. package/Runtime/Core/MessageBus/MessageBus.cs.meta +11 -11
  143. package/Runtime/Core/MessageBus/MessageBusRebindMode.cs.meta +11 -11
  144. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +187 -14
  145. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs.meta +11 -11
  146. package/Runtime/Core/MessageBus/MessagingRegistration.cs.meta +11 -11
  147. package/Runtime/Core/MessageBus/RegistrationLog.cs.meta +11 -11
  148. package/Runtime/Core/MessageBus.meta +8 -8
  149. package/Runtime/Core/MessageHandler.cs +2399 -1042
  150. package/Runtime/Core/MessageHandler.cs.meta +11 -11
  151. package/Runtime/Core/MessageRegistrationHandle.cs.meta +11 -11
  152. package/Runtime/Core/MessageRegistrationToken.cs +429 -44
  153. package/Runtime/Core/MessageRegistrationToken.cs.meta +11 -11
  154. package/Runtime/Core/Messages/GlobalStringMessage.cs.meta +11 -3
  155. package/Runtime/Core/Messages/IBroadcastMessage.cs.meta +11 -11
  156. package/Runtime/Core/Messages/ITargetedMessage.cs.meta +11 -11
  157. package/Runtime/Core/Messages/IUntargetedMessage.cs.meta +11 -11
  158. package/Runtime/Core/Messages/ReflexiveMessage.cs.meta +11 -3
  159. package/Runtime/Core/Messages/SourcedStringMessage.cs.meta +11 -11
  160. package/Runtime/Core/Messages/StringMessage.cs.meta +11 -3
  161. package/Runtime/Core/Messages.meta +8 -8
  162. package/Runtime/Core/MessagingDebug.cs.meta +11 -11
  163. package/Runtime/Core/Pooling/CollectionPool.cs +266 -0
  164. package/Runtime/Core/Pooling/CollectionPool.cs.meta +11 -0
  165. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs +30 -0
  166. package/Runtime/Core/Pooling/CollectionPoolDiagnostics.cs.meta +11 -0
  167. package/Runtime/Core/Pooling/DxPools.cs +157 -0
  168. package/Runtime/Core/Pooling/DxPools.cs.meta +11 -0
  169. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs +106 -0
  170. package/Runtime/Core/Pooling/EvictionPlayerLoopHook.cs.meta +11 -0
  171. package/Runtime/Core/Pooling/IDxMessagingClock.cs +18 -0
  172. package/Runtime/Core/Pooling/IDxMessagingClock.cs.meta +11 -0
  173. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs +55 -0
  174. package/Runtime/Core/Pooling/PoolDiagnosticsSnapshot.cs.meta +11 -0
  175. package/Runtime/Core/Pooling/StopwatchClock.cs +27 -0
  176. package/Runtime/Core/Pooling/StopwatchClock.cs.meta +11 -0
  177. package/Runtime/Core/Pooling/UnityRealtimeClock.cs +31 -0
  178. package/Runtime/Core/Pooling/UnityRealtimeClock.cs.meta +11 -0
  179. package/Runtime/Core/Pooling.meta +9 -0
  180. package/Runtime/Core.meta +8 -8
  181. package/Runtime/Unity/CurrentGlobalMessageBusProvider.cs.meta +12 -12
  182. package/Runtime/Unity/DxMessagingRuntimeInitializer.cs.meta +11 -11
  183. package/Runtime/Unity/InitialGlobalMessageBusProvider.cs.meta +12 -12
  184. package/Runtime/Unity/Integrations/Reflex/AssemblyInfo.cs.meta +11 -3
  185. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs +73 -0
  186. package/Runtime/Unity/Integrations/Reflex/ReflexRegistrationInstaller.cs.meta +11 -11
  187. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef +20 -20
  188. package/Runtime/Unity/Integrations/Reflex/WallstopStudios.DxMessaging.Reflex.asmdef.meta +7 -7
  189. package/Runtime/Unity/Integrations/Reflex.meta +8 -8
  190. package/Runtime/Unity/Integrations/VContainer/AssemblyInfo.cs.meta +11 -3
  191. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs +109 -1
  192. package/Runtime/Unity/Integrations/VContainer/VContainerRegistrationExtensions.cs.meta +11 -11
  193. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef +30 -30
  194. package/Runtime/Unity/Integrations/VContainer/WallstopStudios.DxMessaging.VContainer.asmdef.meta +7 -7
  195. package/Runtime/Unity/Integrations/VContainer.meta +8 -8
  196. package/Runtime/Unity/Integrations/Zenject/AssemblyInfo.cs.meta +11 -3
  197. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef +30 -30
  198. package/Runtime/Unity/Integrations/Zenject/WallstopStudios.DxMessaging.Zenject.asmdef.meta +7 -7
  199. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs +79 -1
  200. package/Runtime/Unity/Integrations/Zenject/ZenjectRegistrationInstaller.cs.meta +11 -11
  201. package/Runtime/Unity/Integrations/Zenject.meta +8 -8
  202. package/Runtime/Unity/Integrations.meta +8 -8
  203. package/Runtime/Unity/MessageAwareComponent.cs +74 -0
  204. package/Runtime/Unity/MessageAwareComponent.cs.meta +11 -11
  205. package/Runtime/Unity/MessageBusProviderHandle.cs.meta +12 -12
  206. package/Runtime/Unity/MessagingComponent.cs +43 -10
  207. package/Runtime/Unity/MessagingComponent.cs.meta +11 -11
  208. package/Runtime/Unity/MessagingComponentInstaller.cs.meta +12 -12
  209. package/Runtime/Unity/ScriptableMessageBusProvider.cs.meta +12 -12
  210. package/Runtime/Unity.meta +8 -8
  211. package/Runtime/WallstopStudios.DxMessaging.asmdef +14 -14
  212. package/Runtime/WallstopStudios.DxMessaging.asmdef.meta +7 -7
  213. package/Runtime.meta +8 -8
  214. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab +98 -98
  215. package/Samples~/DI/Prefabs/MessagingInstallerSample.prefab.meta +7 -7
  216. package/Samples~/DI/Prefabs.meta +8 -8
  217. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset +14 -14
  218. package/Samples~/DI/Providers/GlobalMessageBusProvider.asset.meta +8 -8
  219. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset +14 -14
  220. package/Samples~/DI/Providers/InitialGlobalMessageBusProvider.asset.meta +8 -8
  221. package/Samples~/DI/Providers.meta +8 -8
  222. package/Samples~/DI/README.md +51 -51
  223. package/Samples~/DI/README.md.meta +7 -7
  224. package/Samples~/DI/Reflex/SampleInstaller.cs +7 -0
  225. package/Samples~/DI/Reflex/SampleInstaller.cs.meta +11 -11
  226. package/Samples~/DI/Reflex.meta +8 -8
  227. package/Samples~/DI/VContainer/SampleLifetimeScope.cs +6 -1
  228. package/Samples~/DI/VContainer/SampleLifetimeScope.cs.meta +11 -11
  229. package/Samples~/DI/VContainer.meta +8 -8
  230. package/Samples~/DI/Zenject/SampleInstaller.cs +8 -0
  231. package/Samples~/DI/Zenject/SampleInstaller.cs.meta +11 -11
  232. package/Samples~/DI/Zenject.meta +8 -8
  233. package/Samples~/DI.meta +8 -8
  234. package/Samples~/Mini Combat/Boot.cs.meta +11 -11
  235. package/Samples~/Mini Combat/Enemy.cs.meta +11 -11
  236. package/Samples~/Mini Combat/Messages.cs.meta +11 -11
  237. package/Samples~/Mini Combat/Player.cs.meta +11 -11
  238. package/Samples~/Mini Combat/README.md +324 -323
  239. package/Samples~/Mini Combat/README.md.meta +7 -7
  240. package/Samples~/Mini Combat/UIOverlay.cs.meta +11 -11
  241. package/Samples~/Mini Combat/Walkthrough.md +430 -430
  242. package/Samples~/Mini Combat/Walkthrough.md.meta +7 -7
  243. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef +13 -13
  244. package/Samples~/Mini Combat/WallstopStudios.DxMessaging.MiniCombat.Sample.asmdef.meta +7 -7
  245. package/Samples~/Mini Combat.meta +8 -8
  246. package/Samples~/UI Buttons + Inspector/DiagnosticsEnabler.cs.meta +11 -11
  247. package/Samples~/UI Buttons + Inspector/Messages.cs.meta +11 -11
  248. package/Samples~/UI Buttons + Inspector/MessagingObserver.cs.meta +11 -11
  249. package/Samples~/UI Buttons + Inspector/README.md +210 -209
  250. package/Samples~/UI Buttons + Inspector/README.md.meta +7 -7
  251. package/Samples~/UI Buttons + Inspector/UIButtonEmitter.cs.meta +11 -11
  252. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef +13 -13
  253. package/Samples~/UI Buttons + Inspector/WallstopStudios.DxMessaging.UIButtons.Sample.asmdef.meta +7 -7
  254. package/Samples~/UI Buttons + Inspector.meta +8 -8
  255. package/SourceGenerators/Directory.Build.props +50 -3
  256. package/SourceGenerators/Directory.Build.props.meta +7 -7
  257. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs +96 -63
  258. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxAutoConstructorGenerator.cs.meta +11 -11
  259. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs +745 -87
  260. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/DxMessageIdGenerator.cs.meta +11 -3
  261. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj +39 -46
  262. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.csproj.meta +7 -7
  263. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.meta +8 -8
  264. package/SourceGenerators/global.json +7 -0
  265. package/SourceGenerators/global.json.meta +7 -0
  266. package/SourceGenerators.meta +8 -8
  267. package/Third Party Notices.md +3 -3
  268. package/Third Party Notices.md.meta +7 -7
  269. package/package.json +102 -92
  270. package/package.json.meta +7 -7
@@ -1,323 +1,324 @@
1
- # Mini Combat Sample
2
-
3
- > **Ideal for:** First-time users who want to see messaging in action with a working combat example
4
-
5
- ## What You'll Learn in 10 Minutes
6
-
7
- **This sample demonstrates messaging concepts through a functional example.** It shows:
8
-
9
- 1. How Player heals without UI knowing about Player (**zero coupling**)
10
- 2. How Enemy broadcasts damage without knowing who cares (**observer pattern**)
11
- 3. How settings changes update everything automatically (**global events**)
12
-
13
- **No prior messaging experience needed** - this sample walks you through everything.
14
-
15
- ---
16
-
17
- ## Why This Sample Matters
18
-
19
- ### Before DxMessaging:
20
-
21
- ```csharp
22
- public class Player {
23
- [SerializeField] private UI ui; // Coupling!
24
- [SerializeField] private AudioManager audio; // More coupling!
25
-
26
- void Heal(int amount) {
27
- health += amount;
28
- ui.UpdateHealth(health); // Manual call
29
- audio.PlayHealSound(); // Manual call
30
- }
31
- }
32
- ```
33
-
34
- #### Every new system = another SerializeField + another manual call.
35
-
36
- ##### With DxMessaging:
37
-
38
- ```csharp
39
- public class Player : MessageAwareComponent {
40
- void Heal(int amount) {
41
- health += amount;
42
- new PlayerHealed(amount).EmitBroadcast(this);
43
- // Done! UI, audio, analytics all react automatically.
44
- }
45
- }
46
- ```
47
-
48
- ###### This decouples systems and removes manual wiring.
49
-
50
- ---
51
-
52
- ## Key Concepts (3 Message Types)
53
-
54
- ### 1. Untargeted - "Everyone, listen up!"
55
-
56
- **Example:** Game settings changed
57
-
58
- - Like a stadium announcement - everyone hears it
59
- - No specific target
60
- - Perfect for: settings, pause, scene transitions
61
-
62
- ### 2. Targeted - "Hey YOU, do this!"
63
-
64
- **Example:** Heal this specific player
65
-
66
- - Like mailing a letter to one address
67
- - Only the target receives it
68
- - Perfect for: commands, direct actions
69
-
70
- ### 3. Broadcast - "I did something!"
71
-
72
- **Example:** Enemy took damage
73
-
74
- - Like ringing a bell - anyone nearby can hear
75
- - Source announces, observers react
76
- - Perfect for: events, notifications, analytics
77
-
78
- ---
79
-
80
- ## Sample Files
81
-
82
- Here's what each script does:
83
-
84
- | File | Purpose | Message Type |
85
- |------|---------|--------------|
86
- | **[Messages.cs](./Messages.cs)** | Defines all message types | Contains `VideoSettingsChanged`, `Heal`, and `TookDamage` |
87
- | **[Player.cs](./Player.cs)** | Handles receiving healing | Listens for `Heal` (Targeted) |
88
- | **[Enemy.cs](./Enemy.cs)** | Announces when damaged | Emits `TookDamage` (Broadcast) |
89
- | **[UIOverlay.cs](./UIOverlay.cs)** | Updates UI based on events | Listens to settings and `TookDamage` (Broadcast) |
90
- | **[Boot.cs](./Boot.cs)** | Starts the demo | Simulates message flow |
91
-
92
- ---
93
-
94
- ## Quick Start Guide (2 Minutes to Working Demo)
95
-
96
- ### Import & Run (Fastest Way)
97
-
98
- #### Want to see it work immediately?
99
-
100
- 1. **Open Package Manager**: Window → Package Manager
101
- 2. **Find DxMessaging** in the package list
102
- 3. **Scroll to Samples** section Find "Mini Combat" → Click **Import**
103
- 4. **Navigate to** Assets/Samples/DxMessaging/.../Mini Combat/
104
- 5. **Open the scene**
105
- 6. **Press Play** 🎮
106
-
107
- Watch the Console logs as messages flow.
108
-
109
- **Pro tip:** Enable diagnostics in the Inspector (MessagingComponent → Enable Diagnostics) to see message traffic in real-time.
110
-
111
- ### Method 2: Manual Setup in Your Scene
112
-
113
- #### Step 1: Set Up Your Scene
114
-
115
- 1. **Create GameObjects** in your Unity scene:
116
- - Create a GameObject named "Player"
117
- - Create a GameObject named "Enemy"
118
- - Create a GameObject named "UIOverlay"
119
- - Create a GameObject named "Boot"
120
-
121
- #### Step 2: Add Components
122
-
123
- For **each GameObject**, you need TWO components:
124
-
125
- 1. **Add MessagingComponent** (DxMessaging's Unity component)
126
- - Click GameObject Add Component → "MessagingComponent"
127
-
128
- 1. **Add the sample script**:
129
- - **Player** GameObject Add [Player.cs](./Player.cs) script
130
- - **Enemy** GameObjectAdd [Enemy.cs](./Enemy.cs) script
131
- - **UIOverlay** GameObjectAdd [UIOverlay.cs](./UIOverlay.cs) script
132
- - **Boot** GameObjectAdd [Boot.cs](./Boot.cs) script
133
-
134
- #### Step 3: Run and Observe
135
-
136
- Press Play! The Boot script will automatically:
137
-
138
- 1. Send a settings change message → UI updates
139
- 1. Send a heal message to the Player → Player's HP increases
140
- 1. Trigger Enemy damage UI displays the damage event
141
-
142
- **Pro Tip**: Enable **Diagnostics** on each MessagingComponent in the Inspector to see messages being sent and received in real-time!
143
-
144
- ---
145
-
146
- ## How It Works
147
-
148
- ### The Message Flow
149
-
150
- #### [Boot.cs](./Boot.cs) sends messages:
151
-
152
- 1. `VideoSettingsChanged` (Untargeted) → [UIOverlay.cs](./UIOverlay.cs) receives
153
- 2. `Heal` (Targeted to Player)[Player.cs](./Player.cs) receives
154
- 3. `TookDamage` (Broadcast from Enemy)[UIOverlay.cs](./UIOverlay.cs) receives
155
-
156
- ### Understanding Message Types
157
-
158
- 1. **Untargeted Messages** (`VideoSettingsChanged`)
159
- - Like a public announcement everyone can hear
160
- - No specific recipient
161
- - Anyone interested can listen
162
-
163
- 1. **Targeted Messages** (`Heal`)
164
- - Sent directly to a specific component
165
- - Only that component receives it
166
- - Like sending a letter to a specific person
167
-
168
- 1. **Broadcast Messages** (`TookDamage`)
169
- - Announced from a GameObject to all listeners
170
- - Anyone listening for this message type will receive it
171
- - Like shouting in a room—everyone hears it
172
-
173
- ---
174
-
175
- ## Important Notes
176
-
177
- ### Assembly Definitions
178
-
179
- This sample includes an `.asmdef` (Assembly Definition) file that references `WallstopStudios.DxMessaging`.
180
-
181
- #### What this means:
182
-
183
- - The sample scripts are in their own assembly for clean separation
184
- - The assembly definition already references DxMessaging for you
185
- - `using DxMessaging.*` statements work automatically
186
-
187
- ##### If you move these scripts:
188
-
189
- - If you move them to your main Assets folder, they'll use your project's default assembly
190
- - If you move them to a different assembly, make sure that assembly references `WallstopStudios.DxMessaging`
191
-
192
- ### Message Registration
193
-
194
- Each script uses `MessagingComponent.Create(this)` to get a `MessageRegistrationToken`:
195
-
196
- - This token manages all message subscriptions for that component
197
- - It automatically cleans up when the component is destroyed
198
- - Think of it as your "ticket" to use the messaging system
199
-
200
- ### CRITICAL: Inheriting from MessageAwareComponent
201
-
202
- #### If you extend these sample scripts or create your own derived classes:
203
-
204
- 1. **ALWAYS call `base.RegisterMessageHandlers()` FIRST** in your override:
205
-
206
- ```csharp
207
- protected override void RegisterMessageHandlers() {
208
- base.RegisterMessageHandlers(); // ← MUST call this first!
209
- _ = Token.RegisterUntargeted<YourMessage>(OnYourMessage);
210
- }
211
- ```
212
-
213
- 1. **If you override Unity lifecycle methods, call the base version:**
214
- - `base.Awake()` - Skipping this means your token won't be created (handlers will never fire!)
215
- - `base.OnEnable()` / `base.OnDisable()` - Skipping these means handlers won't activate
216
- - `base.OnDestroy()` - Skipping this can cause memory leaks
217
-
218
- 1. **Never use `new` to hide methods** - Always use `override` and call `base.*`
219
-
220
- **Why this matters:** Forgetting `base.RegisterMessageHandlers()` or `base.Awake()` is the #1 cause of "my handlers aren't firing" issues. The base class does essential setup that your code depends on.
221
-
222
- ### Registration Timing: Use Awake, Not Start
223
-
224
- - All sample scripts register in `Awake()` (via `RegisterMessageHandlers()`)
225
- - This is **the recommended pattern** - handlers are ready before any `Start()` methods run
226
- - **Avoid registering in `Start()`** unless you have a specific order-of-execution reason
227
- - Early registration ensures you don't miss messages emitted by other components
228
-
229
- ### Learning vs Production
230
-
231
- This sample is designed for **learning** and **experimentation**:
232
-
233
- - It's intentionally simple and focused
234
- - Great starting point for your own messaging systems
235
- - Feel free to modify and extend it!
236
- - Use it as a foundation for your game's communication patterns
237
-
238
- ---
239
-
240
- ## Next Steps
241
-
242
- ### Deep Dive Walkthrough
243
-
244
- Ready to understand the implementation details?
245
-
246
- 👉 **[Read the Complete Walkthrough](Walkthrough.md)** - Step-by-step explanation of how everything works
247
-
248
- ### Need Help
249
-
250
- - **New to messaging patterns?** Check the main [Getting Started Guide](../../docs/getting-started/getting-started.md)
251
- - **Want more examples?** See [Patterns Documentation](../../docs/guides/patterns.md)
252
- - **Having issues?** Visit [Troubleshooting Guide](../../docs/reference/troubleshooting.md)
253
-
254
- ---
255
-
256
- ## Common Pitfalls (Avoid These!)
257
-
258
- ### ❌ Pitfall #1: Forgetting base.RegisterMessageHandlers()
259
-
260
- ```csharp
261
- // ❌ WRONG - Missing base call
262
- protected override void RegisterMessageHandlers() {
263
- _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
264
- }
265
-
266
- // ✅ CORRECT - Always call base first
267
- protected override void RegisterMessageHandlers() {
268
- base.RegisterMessageHandlers(); // Essential!
269
- _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
270
- }
271
- ```
272
-
273
- ### ❌ Pitfall #2: Overriding Awake() without calling base
274
-
275
- ```csharp
276
- // ❌ WRONG - Token never created, handlers never fire
277
- protected override void Awake() {
278
- myCustomSetup();
279
- }
280
-
281
- // ✅ CORRECT - Call base.Awake()
282
- protected override void Awake() {
283
- base.Awake(); // Creates the token!
284
- myCustomSetup();
285
- }
286
- ```
287
-
288
- ### ❌ Pitfall #3: Registering in Start() instead of Awake()
289
-
290
- ```csharp
291
- // ❌ WRONG - Might miss messages from other components
292
- void Start() {
293
- _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
294
- }
295
-
296
- // ✅ CORRECT - Use Awake via RegisterMessageHandlers
297
- protected override void RegisterMessageHandlers() {
298
- base.RegisterMessageHandlers();
299
- _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
300
- }
301
- ```
302
-
303
- ### ❌ Pitfall #4: Using 'new' instead of 'override'
304
-
305
- ```csharp
306
- // ❌ WRONG - Hides the base method, breaks functionality
307
- new void OnEnable() {
308
- // This doesn't override, it hides!
309
- }
310
-
311
- // ✅ CORRECT - Always use override
312
- protected override void OnEnable() {
313
- base.OnEnable();
314
- // Your code here
315
- }
316
- ```
317
-
318
- ## Quick Reference
319
-
320
- **Enable Diagnostics**: Select MessagingComponent in Inspector → Enable Diagnostics
321
- **Message Types**: See [Messages.cs](./Messages.cs) for all available messages
322
- **Modify Behavior**: Edit handler methods in [Player.cs](./Player.cs), [Enemy.cs](./Enemy.cs), or [UIOverlay.cs](./UIOverlay.cs)
323
- **Extend Scripts**: Always call `base.RegisterMessageHandlers()` and other `base.*` methods
1
+ # Mini Combat Sample
2
+
3
+ > **Ideal for:** First-time users who want to see messaging in action with a working combat example
4
+
5
+ ## What You'll Learn in 10 Minutes
6
+
7
+ **This sample demonstrates messaging concepts through a functional example.** It shows:
8
+
9
+ 1. How Player heals without UI knowing about Player (**zero coupling**)
10
+ 1. How Enemy broadcasts damage without knowing who cares (**observer pattern**)
11
+ 1. How settings changes update everything automatically (**global events**)
12
+
13
+ **No prior messaging experience needed** - this sample walks you through everything.
14
+
15
+ ---
16
+
17
+ ## Why This Sample Matters
18
+
19
+ ### Before DxMessaging:
20
+
21
+ ```csharp
22
+ public class Player {
23
+ [SerializeField] private UI ui; // Coupling!
24
+ [SerializeField] private AudioManager audio; // More coupling!
25
+
26
+ void Heal(int amount) {
27
+ health += amount;
28
+ ui.UpdateHealth(health); // Manual call
29
+ audio.PlayHealSound(); // Manual call
30
+ }
31
+ }
32
+ ```
33
+
34
+ #### Every new system = another SerializeField + another manual call.
35
+
36
+ ##### With DxMessaging:
37
+
38
+ ```csharp
39
+ public class Player : MessageAwareComponent {
40
+ void Heal(int amount) {
41
+ health += amount;
42
+ var healed = new PlayerHealed(amount);
43
+ healed.EmitBroadcast(this);
44
+ // Done! UI, audio, analytics all react automatically.
45
+ }
46
+ }
47
+ ```
48
+
49
+ ###### This decouples systems and removes manual wiring.
50
+
51
+ ---
52
+
53
+ ## Key Concepts (3 Message Types)
54
+
55
+ ### 1. Untargeted - "Everyone, listen up!"
56
+
57
+ **Example:** Game settings changed
58
+
59
+ - Like a stadium announcement - everyone hears it
60
+ - No specific target
61
+ - Perfect for: settings, pause, scene transitions
62
+
63
+ ### 2. Targeted - "Hey YOU, do this!"
64
+
65
+ **Example:** Heal this specific player
66
+
67
+ - Like mailing a letter to one address
68
+ - Only the target receives it
69
+ - Perfect for: commands, direct actions
70
+
71
+ ### 3. Broadcast - "I did something!"
72
+
73
+ **Example:** Enemy took damage
74
+
75
+ - Like ringing a bell - anyone nearby can hear
76
+ - Source announces, observers react
77
+ - Perfect for: events, notifications, analytics
78
+
79
+ ---
80
+
81
+ ## Sample Files
82
+
83
+ Here's what each script does:
84
+
85
+ | File | Purpose | Message Type |
86
+ |------|---------|--------------|
87
+ | **[Messages.cs](./Messages.cs)** | Defines all message types | Contains `VideoSettingsChanged`, `Heal`, and `TookDamage` |
88
+ | **[Player.cs](./Player.cs)** | Handles receiving healing | Listens for `Heal` (Targeted) |
89
+ | **[Enemy.cs](./Enemy.cs)** | Announces when damaged | Emits `TookDamage` (Broadcast) |
90
+ | **[UIOverlay.cs](./UIOverlay.cs)** | Updates UI based on events | Listens to settings and `TookDamage` (Broadcast) |
91
+ | **[Boot.cs](./Boot.cs)** | Starts the demo | Simulates message flow |
92
+
93
+ ---
94
+
95
+ ## Quick Start Guide (2 Minutes to Working Demo)
96
+
97
+ ### Import & Run (Fastest Way)
98
+
99
+ #### Want to see it work immediately?
100
+
101
+ 1. **Open Package Manager**: Window -> Package Manager
102
+ 1. **Find DxMessaging** in the package list
103
+ 1. **Scroll to Samples** section -> Find "Mini Combat" -> Click **Import**
104
+ 1. **Navigate to** Assets/Samples/DxMessaging/.../Mini Combat/
105
+ 1. **Open the scene**
106
+ 1. **Press Play**
107
+
108
+ Watch the Console logs as messages flow.
109
+
110
+ **Pro tip:** Enable diagnostics in the Inspector (MessagingComponent -> Enable Diagnostics) to see message traffic in real-time.
111
+
112
+ ### Method 2: Manual Setup in Your Scene
113
+
114
+ #### Step 1: Set Up Your Scene
115
+
116
+ 1. **Create GameObjects** in your Unity scene:
117
+ - Create a GameObject named "Player"
118
+ - Create a GameObject named "Enemy"
119
+ - Create a GameObject named "UIOverlay"
120
+ - Create a GameObject named "Boot"
121
+
122
+ #### Step 2: Add Components
123
+
124
+ For **each GameObject**, you need TWO components:
125
+
126
+ 1. **Add MessagingComponent** (DxMessaging's Unity component)
127
+ - Click GameObject -> Add Component -> "MessagingComponent"
128
+
129
+ 1. **Add the sample script**:
130
+ - **Player** GameObject -> Add [Player.cs](./Player.cs) script
131
+ - **Enemy** GameObject -> Add [Enemy.cs](./Enemy.cs) script
132
+ - **UIOverlay** GameObject -> Add [UIOverlay.cs](./UIOverlay.cs) script
133
+ - **Boot** GameObject -> Add [Boot.cs](./Boot.cs) script
134
+
135
+ #### Step 3: Run and Observe
136
+
137
+ Press Play! The Boot script will automatically:
138
+
139
+ 1. Send a settings change message -> UI updates
140
+ 1. Send a heal message to the Player -> Player's HP increases
141
+ 1. Trigger Enemy damage -> UI displays the damage event
142
+
143
+ **Pro Tip**: Enable **Diagnostics** on each MessagingComponent in the Inspector to see messages being sent and received in real-time!
144
+
145
+ ---
146
+
147
+ ## How It Works
148
+
149
+ ### The Message Flow
150
+
151
+ #### [Boot.cs](./Boot.cs) sends messages:
152
+
153
+ 1. `VideoSettingsChanged` (Untargeted) -> [UIOverlay.cs](./UIOverlay.cs) receives
154
+ 1. `Heal` (Targeted to Player) -> [Player.cs](./Player.cs) receives
155
+ 1. `TookDamage` (Broadcast from Enemy) -> [UIOverlay.cs](./UIOverlay.cs) receives
156
+
157
+ ### Understanding Message Types
158
+
159
+ 1. **Untargeted Messages** (`VideoSettingsChanged`)
160
+ - Like a public announcement everyone can hear
161
+ - No specific recipient
162
+ - Anyone interested can listen
163
+
164
+ 1. **Targeted Messages** (`Heal`)
165
+ - Sent directly to a specific component
166
+ - Only that component receives it
167
+ - Like sending a letter to a specific person
168
+
169
+ 1. **Broadcast Messages** (`TookDamage`)
170
+ - Announced from a GameObject to all listeners
171
+ - Anyone listening for this message type will receive it
172
+ - Like shouting in a room -- everyone hears it
173
+
174
+ ---
175
+
176
+ ## Important Notes
177
+
178
+ ### Assembly Definitions
179
+
180
+ This sample includes an `.asmdef` (Assembly Definition) file that references `WallstopStudios.DxMessaging`.
181
+
182
+ #### What this means:
183
+
184
+ - The sample scripts are in their own assembly for clean separation
185
+ - The assembly definition already references DxMessaging for you
186
+ - `using DxMessaging.*` statements work automatically
187
+
188
+ ##### If you move these scripts:
189
+
190
+ - If you move them to your main Assets folder, they'll use your project's default assembly
191
+ - If you move them to a different assembly, make sure that assembly references `WallstopStudios.DxMessaging`
192
+
193
+ ### Message Registration
194
+
195
+ Each script uses `MessagingComponent.Create(this)` to get a `MessageRegistrationToken`:
196
+
197
+ - This token manages all message subscriptions for that component
198
+ - It automatically cleans up when the component is destroyed
199
+ - Think of it as your "ticket" to use the messaging system
200
+
201
+ ### CRITICAL: Inheriting from MessageAwareComponent
202
+
203
+ #### If you extend these sample scripts or create your own derived classes:
204
+
205
+ 1. **ALWAYS call `base.RegisterMessageHandlers()` FIRST** in your override:
206
+
207
+ ```csharp
208
+ protected override void RegisterMessageHandlers() {
209
+ base.RegisterMessageHandlers(); // <- MUST call this first!
210
+ _ = Token.RegisterUntargeted<YourMessage>(OnYourMessage);
211
+ }
212
+ ```
213
+
214
+ 1. **If you override Unity lifecycle methods, call the base version:**
215
+ - `base.Awake()` - Skipping this means your token won't be created (handlers will never fire!)
216
+ - `base.OnEnable()` / `base.OnDisable()` - Skipping these means handlers won't activate
217
+ - `base.OnDestroy()` - Skipping this can cause memory leaks
218
+
219
+ 1. **Never use `new` to hide methods** - Always use `override` and call `base.*`
220
+
221
+ **Why this matters:** Forgetting `base.RegisterMessageHandlers()` or `base.Awake()` is the #1 cause of "my handlers aren't firing" issues. The base class does essential setup that your code depends on.
222
+
223
+ ### Registration Timing: Use Awake, Not Start
224
+
225
+ - All sample scripts register in `Awake()` (via `RegisterMessageHandlers()`)
226
+ - This is **the recommended pattern** - handlers are ready before any `Start()` methods run
227
+ - **Avoid registering in `Start()`** unless you have a specific order-of-execution reason
228
+ - Early registration ensures you don't miss messages emitted by other components
229
+
230
+ ### Learning vs Production
231
+
232
+ This sample is designed for **learning** and **experimentation**:
233
+
234
+ - It's intentionally simple and focused
235
+ - Great starting point for your own messaging systems
236
+ - Feel free to modify and extend it!
237
+ - Use it as a foundation for your game's communication patterns
238
+
239
+ ---
240
+
241
+ ## Next Steps
242
+
243
+ ### Deep Dive Walkthrough
244
+
245
+ Ready to understand the implementation details?
246
+
247
+ **[Read the Complete Walkthrough](Walkthrough.md)** - Step-by-step explanation of how everything works
248
+
249
+ ### Need Help
250
+
251
+ - **New to messaging patterns?** Check the main [Getting Started Guide](../../docs/getting-started/getting-started.md)
252
+ - **Want more examples?** See [Patterns Documentation](../../docs/guides/patterns.md)
253
+ - **Having issues?** Visit [Troubleshooting Guide](../../docs/reference/troubleshooting.md)
254
+
255
+ ---
256
+
257
+ ## Common Pitfalls (Avoid These!)
258
+
259
+ ### Pitfall #1: Forgetting base.RegisterMessageHandlers()
260
+
261
+ ```csharp
262
+ // WRONG - Missing base call
263
+ protected override void RegisterMessageHandlers() {
264
+ _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
265
+ }
266
+
267
+ // CORRECT - Always call base first
268
+ protected override void RegisterMessageHandlers() {
269
+ base.RegisterMessageHandlers(); // Essential!
270
+ _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
271
+ }
272
+ ```
273
+
274
+ ### Pitfall #2: Overriding Awake() without calling base
275
+
276
+ ```csharp
277
+ // WRONG - Token never created, handlers never fire
278
+ protected override void Awake() {
279
+ myCustomSetup();
280
+ }
281
+
282
+ // CORRECT - Call base.Awake()
283
+ protected override void Awake() {
284
+ base.Awake(); // Creates the token!
285
+ myCustomSetup();
286
+ }
287
+ ```
288
+
289
+ ### Pitfall #3: Registering in Start() instead of Awake()
290
+
291
+ ```csharp
292
+ // WRONG - Might miss messages from other components
293
+ void Start() {
294
+ _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
295
+ }
296
+
297
+ // CORRECT - Use Awake via RegisterMessageHandlers
298
+ protected override void RegisterMessageHandlers() {
299
+ base.RegisterMessageHandlers();
300
+ _ = Token.RegisterUntargeted<MyMessage>(OnMessage);
301
+ }
302
+ ```
303
+
304
+ ### Pitfall #4: Using 'new' instead of 'override'
305
+
306
+ ```csharp
307
+ // WRONG - Hides the base method, breaks functionality
308
+ new void OnEnable() {
309
+ // This doesn't override, it hides!
310
+ }
311
+
312
+ // CORRECT - Always use override
313
+ protected override void OnEnable() {
314
+ base.OnEnable();
315
+ // Your code here
316
+ }
317
+ ```
318
+
319
+ ## Quick Reference
320
+
321
+ **Enable Diagnostics**: Select MessagingComponent in Inspector -> Enable Diagnostics
322
+ **Message Types**: See [Messages.cs](./Messages.cs) for all available messages
323
+ **Modify Behavior**: Edit handler methods in [Player.cs](./Player.cs), [Enemy.cs](./Enemy.cs), or [UIOverlay.cs](./UIOverlay.cs)
324
+ **Extend Scripts**: Always call `base.RegisterMessageHandlers()` and other `base.*` methods