com.wallstop-studios.dxmessaging 2.1.7 → 2.1.9

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 (1408) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/Runtime/Core/DxMessagingStaticState.cs +19 -13
  3. package/Runtime/Core/Helper/MessageHelperIndexer.cs +14 -77
  4. package/Runtime/Core/MessageBus/MessageRegistrationBuilder.cs +0 -5
  5. package/Runtime/Core/MessageRegistrationHandle.cs +0 -5
  6. package/package.json +25 -1
  7. package/.artifacts/SourceGenerators.Tests/TestResults/0e800bba-2376-4062-bb19-cf916d3083a1/coverage.cobertura.xml +0 -2624
  8. package/.artifacts/SourceGenerators.Tests/TestResults/260ab294-e640-4674-9ae9-29b5344c0540/coverage.cobertura.xml +0 -2624
  9. package/.artifacts/SourceGenerators.Tests/TestResults/31c02772-7d85-4466-a2c4-93742725076e/coverage.cobertura.xml +0 -2624
  10. package/.artifacts/SourceGenerators.Tests/TestResults/ca4d2ef2-0c53-49dc-91b5-039938571ed8/coverage.cobertura.xml +0 -2624
  11. package/.artifacts/SourceGenerators.Tests/TestResults/f6cadd7e-1bf5-44b0-9351-47426600fc69/coverage.cobertura.xml +0 -2624
  12. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  13. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  14. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  15. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  16. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  17. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  18. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  19. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  20. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  21. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  22. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  23. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  24. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  25. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  26. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  27. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.Testing.Platform.dll +0 -0
  28. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  29. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  30. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  31. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/NUnit3.TestAdapter.dll +0 -0
  32. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/Newtonsoft.Json.dll +0 -0
  33. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -872
  34. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  35. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -13
  36. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  37. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  38. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  39. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  40. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  41. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  42. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  43. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  44. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  45. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  46. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  47. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  48. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  49. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  50. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  51. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  52. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  53. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  54. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  55. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  56. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  57. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  58. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  59. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  60. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  61. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  62. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  63. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  64. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  65. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  66. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  67. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  68. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  69. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  70. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  71. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  72. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  73. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  74. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  75. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  76. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  77. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  78. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  79. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  80. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  81. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  82. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  83. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  84. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  85. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  86. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  87. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  88. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  89. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  90. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  91. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  92. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  93. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  94. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  95. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  96. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  97. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  98. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  99. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  100. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  101. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  102. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  103. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  104. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  105. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  106. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  107. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  108. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  109. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  110. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  111. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  112. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  113. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  114. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  115. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  116. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  117. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  118. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  119. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  120. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  121. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.api.dll +0 -0
  122. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.core.dll +0 -0
  123. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.engine.dll +0 -0
  124. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.framework.dll +0 -0
  125. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/nunit.framework.legacy.dll +0 -0
  126. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  127. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  128. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  129. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  130. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  131. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  132. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  133. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  134. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  135. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  136. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  137. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  138. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  139. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  140. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  141. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  142. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  143. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  144. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  145. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  146. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  147. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  148. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  149. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  150. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  151. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  152. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  153. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  154. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  155. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  156. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  157. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  158. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  159. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  160. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  161. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  162. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testcentric.engine.metadata.dll +0 -0
  163. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testhost.dll +0 -0
  164. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/testhost.exe +0 -0
  165. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  166. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  167. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  168. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  169. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  170. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  171. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  172. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  173. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  174. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  175. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  176. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  177. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  178. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  179. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  180. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  181. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  182. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  183. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  184. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  185. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  186. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  187. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  188. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  189. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  190. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  191. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  192. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  193. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  194. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  195. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  196. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  197. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  198. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  199. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  200. package/.artifacts/SourceGenerators.Tests/bin/Debug/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  201. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  202. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  203. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  204. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  205. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  206. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Extensions.DependencyModel.dll +0 -0
  207. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  208. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  209. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  210. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  211. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  212. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  213. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  214. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  215. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  216. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  217. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.Testing.Platform.dll +0 -0
  218. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  219. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  220. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  221. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/NUnit3.TestAdapter.dll +0 -0
  222. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/Newtonsoft.Json.dll +0 -0
  223. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -817
  224. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  225. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -14
  226. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  227. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  228. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  229. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  230. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  231. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  232. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  233. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  234. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  235. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  236. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  237. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  238. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  239. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  240. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  241. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  242. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  243. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  244. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  245. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  246. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  247. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  248. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  249. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  250. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  251. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  252. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  253. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  254. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  255. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  256. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  257. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  258. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  259. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  260. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  261. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  262. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  263. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  264. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  265. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  266. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  267. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  268. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  269. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  270. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  271. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  272. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  273. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  274. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  275. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  276. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  277. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  278. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  279. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  280. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  281. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  282. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  283. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  284. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  285. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  286. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  287. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  288. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  289. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  290. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  291. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  292. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  293. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  294. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  295. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  296. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  297. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  298. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  299. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  300. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  301. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  302. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  303. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  304. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  305. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  306. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  307. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  308. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  309. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  310. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  311. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.api.dll +0 -0
  312. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.core.dll +0 -0
  313. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.engine.dll +0 -0
  314. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.framework.dll +0 -0
  315. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/nunit.framework.legacy.dll +0 -0
  316. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  317. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  318. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  319. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  320. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  321. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  322. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  323. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  324. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  325. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  326. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  327. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  328. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  329. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  330. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  331. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  332. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  333. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  334. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  335. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  336. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  337. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  338. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  339. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  340. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  341. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  342. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  343. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  344. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  345. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  346. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  347. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  348. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  349. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  350. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  351. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  352. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testcentric.engine.metadata.dll +0 -0
  353. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testhost.dll +0 -0
  354. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/testhost.exe +0 -0
  355. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  356. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  357. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  358. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  359. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  360. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  361. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  362. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  363. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  364. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  365. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  366. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  367. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  368. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  369. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  370. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  371. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  372. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  373. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  374. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  375. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  376. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  377. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  378. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  379. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  380. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  381. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  382. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  383. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  384. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  385. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  386. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  387. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  388. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  389. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  390. package/.artifacts/SourceGenerators.Tests/bin/Release/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  391. package/.artifacts/SourceGenerators.Tests/bin/net9.0/.msCoverageSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  392. package/.artifacts/SourceGenerators.Tests/bin/net9.0/CoverletSourceRootsMapping_WallstopStudios.DxMessaging.SourceGenerators.Tests +0 -0
  393. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.ApplicationInsights.dll +0 -0
  394. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.CodeAnalysis.CSharp.dll +0 -0
  395. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.CodeAnalysis.dll +0 -0
  396. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Extensions.DependencyModel.dll +0 -0
  397. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.AdapterUtilities.dll +0 -0
  398. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CommunicationUtilities.dll +0 -0
  399. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CoreUtilities.dll +0 -0
  400. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.CrossPlatEngine.dll +0 -0
  401. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.PlatformAbstractions.dll +0 -0
  402. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.TestPlatform.Utilities.dll +0 -0
  403. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.MSBuild.dll +0 -0
  404. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.Telemetry.dll +0 -0
  405. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.TrxReport.Abstractions.dll +0 -0
  406. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Extensions.VSTestBridge.dll +0 -0
  407. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.Testing.Platform.dll +0 -0
  408. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.CodeCoverage.Shim.dll +0 -0
  409. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.TestPlatform.Common.dll +0 -0
  410. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Microsoft.VisualStudio.TestPlatform.ObjectModel.dll +0 -0
  411. package/.artifacts/SourceGenerators.Tests/bin/net9.0/NUnit3.TestAdapter.dll +0 -0
  412. package/.artifacts/SourceGenerators.Tests/bin/net9.0/Newtonsoft.Json.dll +0 -0
  413. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.deps.json +0 -872
  414. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  415. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.runtimeconfig.json +0 -13
  416. package/.artifacts/SourceGenerators.Tests/bin/net9.0/WallstopStudios.DxMessaging.SourceGenerators.dll +0 -0
  417. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  418. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.CodeAnalysis.resources.dll +0 -0
  419. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  420. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  421. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  422. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  423. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  424. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  425. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  426. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.Testing.Platform.resources.dll +0 -0
  427. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  428. package/.artifacts/SourceGenerators.Tests/bin/net9.0/cs/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  429. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  430. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.CodeAnalysis.resources.dll +0 -0
  431. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  432. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  433. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  434. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  435. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  436. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  437. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  438. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.Testing.Platform.resources.dll +0 -0
  439. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  440. package/.artifacts/SourceGenerators.Tests/bin/net9.0/de/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  441. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  442. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.CodeAnalysis.resources.dll +0 -0
  443. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  444. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  445. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  446. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  447. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  448. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  449. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  450. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.Testing.Platform.resources.dll +0 -0
  451. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  452. package/.artifacts/SourceGenerators.Tests/bin/net9.0/es/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  453. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  454. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.CodeAnalysis.resources.dll +0 -0
  455. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  456. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  457. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  458. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  459. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  460. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  461. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  462. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.Testing.Platform.resources.dll +0 -0
  463. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  464. package/.artifacts/SourceGenerators.Tests/bin/net9.0/fr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  465. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  466. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.CodeAnalysis.resources.dll +0 -0
  467. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  468. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  469. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  470. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  471. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  472. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  473. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  474. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.Testing.Platform.resources.dll +0 -0
  475. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  476. package/.artifacts/SourceGenerators.Tests/bin/net9.0/it/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  477. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  478. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.CodeAnalysis.resources.dll +0 -0
  479. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  480. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  481. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  482. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  483. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  484. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  485. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  486. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.Testing.Platform.resources.dll +0 -0
  487. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  488. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ja/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  489. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  490. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.CodeAnalysis.resources.dll +0 -0
  491. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  492. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  493. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  494. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  495. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  496. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  497. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  498. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.Testing.Platform.resources.dll +0 -0
  499. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  500. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ko/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  501. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.api.dll +0 -0
  502. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.core.dll +0 -0
  503. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.engine.dll +0 -0
  504. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.framework.dll +0 -0
  505. package/.artifacts/SourceGenerators.Tests/bin/net9.0/nunit.framework.legacy.dll +0 -0
  506. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  507. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.CodeAnalysis.resources.dll +0 -0
  508. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  509. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  510. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  511. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  512. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  513. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  514. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  515. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.Testing.Platform.resources.dll +0 -0
  516. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  517. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pl/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  518. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  519. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.CodeAnalysis.resources.dll +0 -0
  520. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  521. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  522. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  523. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  524. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  525. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  526. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  527. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.Testing.Platform.resources.dll +0 -0
  528. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  529. package/.artifacts/SourceGenerators.Tests/bin/net9.0/pt-BR/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  530. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  531. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.CodeAnalysis.resources.dll +0 -0
  532. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  533. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  534. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  535. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  536. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  537. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  538. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  539. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.Testing.Platform.resources.dll +0 -0
  540. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  541. package/.artifacts/SourceGenerators.Tests/bin/net9.0/ru/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  542. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testcentric.engine.metadata.dll +0 -0
  543. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testhost.dll +0 -0
  544. package/.artifacts/SourceGenerators.Tests/bin/net9.0/testhost.exe +0 -0
  545. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  546. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.CodeAnalysis.resources.dll +0 -0
  547. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  548. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  549. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  550. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  551. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  552. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  553. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  554. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.Testing.Platform.resources.dll +0 -0
  555. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  556. package/.artifacts/SourceGenerators.Tests/bin/net9.0/tr/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  557. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  558. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.CodeAnalysis.resources.dll +0 -0
  559. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  560. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  561. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  562. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  563. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  564. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  565. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  566. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.Testing.Platform.resources.dll +0 -0
  567. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  568. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hans/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  569. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll +0 -0
  570. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.CodeAnalysis.resources.dll +0 -0
  571. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.AdapterUtilities.resources.dll +0 -0
  572. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CommunicationUtilities.resources.dll +0 -0
  573. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CoreUtilities.resources.dll +0 -0
  574. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.TestPlatform.CrossPlatEngine.resources.dll +0 -0
  575. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.MSBuild.resources.dll +0 -0
  576. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.Telemetry.resources.dll +0 -0
  577. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Extensions.VSTestBridge.resources.dll +0 -0
  578. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.Testing.Platform.resources.dll +0 -0
  579. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.Common.resources.dll +0 -0
  580. package/.artifacts/SourceGenerators.Tests/bin/net9.0/zh-Hant/Microsoft.VisualStudio.TestPlatform.ObjectModel.resources.dll +0 -0
  581. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  582. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  583. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -22
  584. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -25
  585. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  586. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -28
  587. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  588. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  589. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  590. package/.artifacts/SourceGenerators.Tests/obj/Debug/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  591. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  592. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  593. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -23
  594. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -17
  595. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  596. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.BuildWithSkipAnalyzers +0 -0
  597. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -84
  598. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  599. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  600. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  601. package/.artifacts/SourceGenerators.Tests/obj/Release/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  602. package/.artifacts/SourceGenerators.Tests/obj/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +0 -4
  603. package/.artifacts/SourceGenerators.Tests/obj/net9.0/Wallstop.9ADB0525.Up2Date +0 -0
  604. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.AssemblyInfo.cs +0 -22
  605. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GeneratedMSBuildEditorConfig.editorconfig +0 -23
  606. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.GlobalUsings.g.cs +0 -8
  607. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.FileListAbsolute.txt +0 -55
  608. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  609. package/.artifacts/SourceGenerators.Tests/obj/net9.0/WallstopStudios.DxMessaging.SourceGenerators.Tests.sourcelink.json +0 -1
  610. package/.artifacts/SourceGenerators.Tests/obj/net9.0/ref/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  611. package/.artifacts/SourceGenerators.Tests/obj/net9.0/refint/WallstopStudios.DxMessaging.SourceGenerators.Tests.dll +0 -0
  612. package/.config/dotnet-tools.json +0 -10
  613. package/.csharpierignore +0 -1
  614. package/.csharpierrc.json +0 -3
  615. package/.cspell.json +0 -222
  616. package/.cursorrules +0 -3
  617. package/.devcontainer/.dockerignore +0 -92
  618. package/.devcontainer/Dockerfile +0 -475
  619. package/.devcontainer/devcontainer.json +0 -54
  620. package/.devcontainer/verify-tools.sh +0 -183
  621. package/.editorconfig +0 -190
  622. package/.gitattributes +0 -99
  623. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -95
  624. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  625. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -46
  626. package/.github/copilot-instructions.md +0 -3
  627. package/.github/dependabot.yml +0 -66
  628. package/.github/pull_request_template.md +0 -30
  629. package/.github/release-drafter.yml +0 -92
  630. package/.github/scripts/check-markdown-links.ps1 +0 -101
  631. package/.github/scripts/check_markdown_links.py +0 -187
  632. package/.github/scripts/check_markdown_url_encoding.py +0 -74
  633. package/.github/scripts/test_check_markdown_links.py +0 -545
  634. package/.github/scripts/validate_markdown_links.py +0 -194
  635. package/.github/workflows/actionlint.yml +0 -47
  636. package/.github/workflows/csharpier-autofix.yml +0 -192
  637. package/.github/workflows/deploy-docs.yml +0 -118
  638. package/.github/workflows/dotnet-tests.yml +0 -85
  639. package/.github/workflows/format-on-demand.yml +0 -309
  640. package/.github/workflows/json-format-check.yml +0 -59
  641. package/.github/workflows/lint-doc-links.yml +0 -44
  642. package/.github/workflows/markdown-json.yml +0 -63
  643. package/.github/workflows/markdown-link-text-check.yml +0 -32
  644. package/.github/workflows/markdown-link-validity.yml +0 -43
  645. package/.github/workflows/markdownlint.yml +0 -57
  646. package/.github/workflows/prettier-autofix.yml +0 -266
  647. package/.github/workflows/release-drafter.yml +0 -135
  648. package/.github/workflows/spellcheck.yml +0 -56
  649. package/.github/workflows/sync-wiki.yml +0 -139
  650. package/.github/workflows/update-dotnet-tools.yml +0 -84
  651. package/.github/workflows/validate-docs.yml +0 -196
  652. package/.github/workflows/validate-skills.yml +0 -46
  653. package/.github/workflows/yaml-format-lint.yml +0 -68
  654. package/.llm/context.md +0 -379
  655. package/.llm/skills/documentation/changelog-entry-writing.md +0 -277
  656. package/.llm/skills/documentation/changelog-management.md +0 -228
  657. package/.llm/skills/documentation/changelog-release-workflow.md +0 -249
  658. package/.llm/skills/documentation/documentation-code-samples.md +0 -262
  659. package/.llm/skills/documentation/documentation-style-guide.md +0 -203
  660. package/.llm/skills/documentation/documentation-update-workflow.md +0 -148
  661. package/.llm/skills/documentation/documentation-updates.md +0 -148
  662. package/.llm/skills/documentation/documentation-xml-docs.md +0 -190
  663. package/.llm/skills/documentation/external-url-fragment-validation.md +0 -181
  664. package/.llm/skills/documentation/github-actions-version-consistency.md +0 -203
  665. package/.llm/skills/documentation/link-quality-guidelines.md +0 -267
  666. package/.llm/skills/documentation/markdown-compatibility.md +0 -476
  667. package/.llm/skills/documentation/mermaid-theming.md +0 -326
  668. package/.llm/skills/documentation/mkdocs-navigation.md +0 -290
  669. package/.llm/skills/documentation/skill-file-sizing.md +0 -260
  670. package/.llm/skills/github-actions/git-renormalize-patterns.md +0 -231
  671. package/.llm/skills/github-actions/workflow-consistency.md +0 -346
  672. package/.llm/skills/index.md +0 -257
  673. package/.llm/skills/performance/aggressive-inlining-performance-notes.md +0 -94
  674. package/.llm/skills/performance/aggressive-inlining.md +0 -342
  675. package/.llm/skills/performance/array-pooling-usage-examples.md +0 -145
  676. package/.llm/skills/performance/array-pooling.md +0 -315
  677. package/.llm/skills/performance/cache-eviction-builder.md +0 -203
  678. package/.llm/skills/performance/cache-eviction-implementation.md +0 -340
  679. package/.llm/skills/performance/cache-eviction-policies.md +0 -176
  680. package/.llm/skills/performance/collection-pooling.md +0 -313
  681. package/.llm/skills/performance/object-pooling-anti-patterns.md +0 -144
  682. package/.llm/skills/performance/object-pooling-usage-examples.md +0 -114
  683. package/.llm/skills/performance/object-pooling-variations.md +0 -147
  684. package/.llm/skills/performance/object-pooling.md +0 -319
  685. package/.llm/skills/performance/readonly-struct-cached-hash-performance-notes.md +0 -91
  686. package/.llm/skills/performance/readonly-struct-cached-hash.md +0 -337
  687. package/.llm/skills/performance/serializable-dictionary-property-drawer.md +0 -147
  688. package/.llm/skills/performance/serializable-dictionary-usage-examples.md +0 -135
  689. package/.llm/skills/performance/serializable-dictionary.md +0 -281
  690. package/.llm/skills/performance/singleton-autoload.md +0 -111
  691. package/.llm/skills/performance/singleton-patterns.md +0 -165
  692. package/.llm/skills/performance/singleton-runtime.md +0 -187
  693. package/.llm/skills/performance/singleton-scriptableobject.md +0 -177
  694. package/.llm/skills/performance/singleton-usage-examples.md +0 -139
  695. package/.llm/skills/performance/stringbuilder-pooling.md +0 -319
  696. package/.llm/skills/performance/yield-instruction-pooling.md +0 -347
  697. package/.llm/skills/scripting/cross-platform-compatibility.md +0 -224
  698. package/.llm/skills/scripting/cross-platform-compatibility.md.meta +0 -7
  699. package/.llm/skills/scripting/javascript-code-quality.md +0 -417
  700. package/.llm/skills/scripting/powershell-best-practices.md +0 -386
  701. package/.llm/skills/scripting/regex-documentation.md +0 -461
  702. package/.llm/skills/scripting/shell-best-practices.md +0 -386
  703. package/.llm/skills/scripting/validation-patterns.md +0 -418
  704. package/.llm/skills/solid/collection-extensions-accessors.md +0 -229
  705. package/.llm/skills/solid/collection-extensions-shuffle.md +0 -144
  706. package/.llm/skills/solid/collection-extensions-type-specialization.md +0 -168
  707. package/.llm/skills/solid/collection-extensions.md +0 -144
  708. package/.llm/skills/solid/fluent-builder-pattern-templates.md +0 -117
  709. package/.llm/skills/solid/fluent-builder-pattern-usage-examples.md +0 -128
  710. package/.llm/skills/solid/fluent-builder-pattern.md +0 -322
  711. package/.llm/skills/solid/iequatable-implementation-usage.md +0 -111
  712. package/.llm/skills/solid/iequatable-implementation-variants.md +0 -201
  713. package/.llm/skills/solid/iequatable-implementation.md +0 -239
  714. package/.llm/skills/solid/try-pattern-apis-usage.md +0 -136
  715. package/.llm/skills/solid/try-pattern-apis-variants.md +0 -233
  716. package/.llm/skills/solid/try-pattern-apis.md +0 -220
  717. package/.llm/skills/specification.md +0 -468
  718. package/.llm/skills/templates/skill-template.md +0 -143
  719. package/.llm/skills/testing/comprehensive-test-coverage.md +0 -141
  720. package/.llm/skills/testing/data-driven-tests-sources.md +0 -255
  721. package/.llm/skills/testing/data-driven-tests-usage.md +0 -107
  722. package/.llm/skills/testing/data-driven-tests.md +0 -197
  723. package/.llm/skills/testing/git-workflow-robustness.md +0 -369
  724. package/.llm/skills/testing/script-test-coverage.md +0 -259
  725. package/.llm/skills/testing/script-test-coverage.md.meta +0 -7
  726. package/.llm/skills/testing/shared-test-fixtures-generic-base.md +0 -185
  727. package/.llm/skills/testing/shared-test-fixtures-reference-counting.md +0 -252
  728. package/.llm/skills/testing/shared-test-fixtures.md +0 -165
  729. package/.llm/skills/testing/test-base-class-cleanup-usage.md +0 -218
  730. package/.llm/skills/testing/test-base-class-cleanup.md +0 -323
  731. package/.llm/skills/testing/test-categories-execution.md +0 -142
  732. package/.llm/skills/testing/test-categories.md +0 -287
  733. package/.llm/skills/testing/test-code-quality.md +0 -243
  734. package/.llm/skills/testing/test-coverage-data-driven.md +0 -172
  735. package/.llm/skills/testing/test-coverage-organization-assertions.md +0 -171
  736. package/.llm/skills/testing/test-coverage-scenario-categories.md +0 -223
  737. package/.llm/skills/testing/test-coverage-unity-anti-patterns.md +0 -232
  738. package/.llm/skills/testing/test-diagnostics-patterns.md +0 -189
  739. package/.llm/skills/testing/test-diagnostics-usage.md +0 -196
  740. package/.llm/skills/testing/test-diagnostics.md +0 -247
  741. package/.llm/skills/testing/test-failure-investigation-procedure.md +0 -216
  742. package/.llm/skills/testing/test-failure-investigation-root-causes.md +0 -186
  743. package/.llm/skills/testing/test-failure-investigation.md +0 -119
  744. package/.llm/skills/testing/test-invalid-skill.md +0 -26
  745. package/.llm/skills/testing/test-production-code.md +0 -348
  746. package/.lychee.toml +0 -30
  747. package/.markdownlint-cli2.jsonc +0 -17
  748. package/.markdownlint.json +0 -23
  749. package/.markdownlint.jsonc +0 -23
  750. package/.markdownlintignore +0 -7
  751. package/.pre-commit-config.yaml +0 -165
  752. package/.prettierignore +0 -21
  753. package/.prettierrc.json +0 -20
  754. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.metadata.v10.bin +0 -0
  755. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.projects.v10.bin +0 -0
  756. package/.vs/ProjectEvaluation/com.wallstop-studios.dxmessaging.strings.v10.bin +0 -0
  757. package/.vs/ProjectSettings.json +0 -3
  758. package/.vs/VSWorkspaceState.json +0 -9
  759. package/.vs/com.wallstop-studios.dxmessaging/CopilotIndices/17.14.1347.20289/CodeChunks.db +0 -0
  760. package/.vs/com.wallstop-studios.dxmessaging/CopilotIndices/17.14.1347.20289/SemanticSymbols.db +0 -0
  761. package/.vs/com.wallstop-studios.dxmessaging/DesignTimeBuild/.dtbcache.v2 +0 -0
  762. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/41b4588f-fa0f-484b-a29b-733b6ce84c26.vsidx +0 -0
  763. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/9a73875f-5693-4296-95fd-0672bf61c5ac.vsidx +0 -0
  764. package/.vs/com.wallstop-studios.dxmessaging/FileContentIndex/fd44ab3e-7015-4c20-918a-a0a916be8934.vsidx +0 -0
  765. package/.vs/com.wallstop-studios.dxmessaging/v17/.futdcache.v2 +0 -0
  766. package/.vs/com.wallstop-studios.dxmessaging/v17/.wsuo +0 -0
  767. package/.vs/com.wallstop-studios.dxmessaging/v17/DocumentLayout.backup.json +0 -82
  768. package/.vs/com.wallstop-studios.dxmessaging/v17/DocumentLayout.json +0 -82
  769. package/.vs/com.wallstop-studios.dxmessaging/v17/TestStore/0/000.testlog +0 -0
  770. package/.vs/com.wallstop-studios.dxmessaging/v17/TestStore/0/testlog.manifest +0 -0
  771. package/.vs/com.wallstop-studios.dxmessaging/v17/csharpier.json +0 -1
  772. package/.vs/com.wallstop-studios.dxmessaging/v18/.futdcache.v2 +0 -0
  773. package/.vs/com.wallstop-studios.dxmessaging/v18/DocumentLayout.backup.json +0 -86
  774. package/.vs/com.wallstop-studios.dxmessaging/v18/DocumentLayout.json +0 -86
  775. package/.vs/slnx.sqlite +0 -0
  776. package/.yamllint.yaml +0 -31
  777. package/AGENTS.md +0 -3
  778. package/AGENTS.md.meta +0 -7
  779. package/CLAUDE.md +0 -3
  780. package/CLAUDE.md.meta +0 -7
  781. package/CONTRIBUTING.md +0 -43
  782. package/CONTRIBUTING.md.meta +0 -7
  783. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/CopilotIndices/17.14.1231.31060/CodeChunks.db +0 -0
  784. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/CopilotIndices/17.14.1231.31060/SemanticSymbols.db +0 -0
  785. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/DesignTimeBuild/.dtbcache.v2 +0 -0
  786. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/FileContentIndex/c90afd9b-d899-4546-bd92-ab874e448437.vsidx +0 -0
  787. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators/.vs/WallstopStudios.DxMessaging.SourceGenerators/v17/.futdcache.v2 +0 -0
  788. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DocsSnippetCompilationTests.cs +0 -544
  789. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DocsSnippetCompilationTests.cs.meta +0 -11
  790. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxAutoConstructorGeneratorDiagnosticsTests.cs +0 -69
  791. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxAutoConstructorGeneratorDiagnosticsTests.cs.meta +0 -11
  792. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxMessageIdGeneratorDiagnosticsTests.cs +0 -66
  793. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/DxMessageIdGeneratorDiagnosticsTests.cs.meta +0 -11
  794. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/GeneratorTestUtilities.cs +0 -155
  795. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/GeneratorTestUtilities.cs.meta +0 -11
  796. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj +0 -20
  797. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests/WallstopStudios.DxMessaging.SourceGenerators.Tests.csproj.meta +0 -7
  798. package/SourceGenerators/WallstopStudios.DxMessaging.SourceGenerators.Tests.meta +0 -8
  799. package/Tests/Editor/MessagingComponentEditorHarnessTests.cs +0 -243
  800. package/Tests/Editor/MessagingComponentEditorHarnessTests.cs.meta +0 -3
  801. package/Tests/Editor/MessagingComponentSerializationTests.cs +0 -129
  802. package/Tests/Editor/MessagingComponentSerializationTests.cs.meta +0 -3
  803. package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef +0 -19
  804. package/Tests/Editor/WallstopStudios.DxMessaging.Tests.Editor.asmdef.meta +0 -3
  805. package/Tests/Editor.meta +0 -3
  806. package/Tests/Runtime/Benchmarks/BenchmarkSession.cs +0 -450
  807. package/Tests/Runtime/Benchmarks/BenchmarkSession.cs.meta +0 -11
  808. package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs +0 -97
  809. package/Tests/Runtime/Benchmarks/BenchmarkTestBase.cs.meta +0 -11
  810. package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs +0 -398
  811. package/Tests/Runtime/Benchmarks/ComparisonPerformanceTests.cs.meta +0 -11
  812. package/Tests/Runtime/Benchmarks/PerformanceTests.cs +0 -623
  813. package/Tests/Runtime/Benchmarks/PerformanceTests.cs.meta +0 -11
  814. package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs +0 -142
  815. package/Tests/Runtime/Benchmarks/ProviderResolutionBenchmarks.cs.meta +0 -12
  816. package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef +0 -45
  817. package/Tests/Runtime/Benchmarks/WallstopStudios.DxMessaging.Tests.Runtime.Benchmarks.asmdef.meta +0 -7
  818. package/Tests/Runtime/Benchmarks.meta +0 -8
  819. package/Tests/Runtime/Core/AlternateBusTests.cs +0 -85
  820. package/Tests/Runtime/Core/AlternateBusTests.cs.meta +0 -11
  821. package/Tests/Runtime/Core/BroadcastTests.cs +0 -914
  822. package/Tests/Runtime/Core/BroadcastTests.cs.meta +0 -11
  823. package/Tests/Runtime/Core/CyclicBufferTests.cs +0 -343
  824. package/Tests/Runtime/Core/CyclicBufferTests.cs.meta +0 -11
  825. package/Tests/Runtime/Core/DefaultBusFallbackTests.cs +0 -336
  826. package/Tests/Runtime/Core/DefaultBusFallbackTests.cs.meta +0 -11
  827. package/Tests/Runtime/Core/DiagnosticsTests.cs +0 -193
  828. package/Tests/Runtime/Core/DiagnosticsTests.cs.meta +0 -11
  829. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs +0 -69
  830. package/Tests/Runtime/Core/DxMessagingStaticStateTests.cs.meta +0 -11
  831. package/Tests/Runtime/Core/EdgeCaseTests.cs +0 -582
  832. package/Tests/Runtime/Core/EdgeCaseTests.cs.meta +0 -11
  833. package/Tests/Runtime/Core/EnablementTests.cs +0 -72
  834. package/Tests/Runtime/Core/EnablementTests.cs.meta +0 -3
  835. package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs +0 -259
  836. package/Tests/Runtime/Core/Extensions/MessageBusExtensionsTests.cs.meta +0 -11
  837. package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs +0 -289
  838. package/Tests/Runtime/Core/Extensions/MessageExtensionsProviderTests.cs.meta +0 -11
  839. package/Tests/Runtime/Core/Extensions.meta +0 -8
  840. package/Tests/Runtime/Core/GenericMessageTests.cs +0 -50
  841. package/Tests/Runtime/Core/GenericMessageTests.cs.meta +0 -3
  842. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs +0 -193
  843. package/Tests/Runtime/Core/GlobalAcceptAllTests.cs.meta +0 -11
  844. package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs +0 -57
  845. package/Tests/Runtime/Core/IntegrationShimSmokeTests.cs.meta +0 -11
  846. package/Tests/Runtime/Core/InterceptorCancellationTests.cs +0 -173
  847. package/Tests/Runtime/Core/InterceptorCancellationTests.cs.meta +0 -11
  848. package/Tests/Runtime/Core/LifecycleTests.cs +0 -75
  849. package/Tests/Runtime/Core/LifecycleTests.cs.meta +0 -11
  850. package/Tests/Runtime/Core/MessageEmissionDataTests.cs +0 -70
  851. package/Tests/Runtime/Core/MessageEmissionDataTests.cs.meta +0 -11
  852. package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs +0 -219
  853. package/Tests/Runtime/Core/MessageHandlerGlobalBusTests.cs.meta +0 -11
  854. package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs +0 -204
  855. package/Tests/Runtime/Core/MessageRegistrationBuilderTests.cs.meta +0 -11
  856. package/Tests/Runtime/Core/MessagingComponentLifecycleTests.cs +0 -92
  857. package/Tests/Runtime/Core/MessagingComponentLifecycleTests.cs.meta +0 -11
  858. package/Tests/Runtime/Core/MessagingTestBase.cs +0 -211
  859. package/Tests/Runtime/Core/MessagingTestBase.cs.meta +0 -11
  860. package/Tests/Runtime/Core/MutationDedupeTests.cs +0 -101
  861. package/Tests/Runtime/Core/MutationDedupeTests.cs.meta +0 -11
  862. package/Tests/Runtime/Core/MutationDestructionTests.cs +0 -437
  863. package/Tests/Runtime/Core/MutationDestructionTests.cs.meta +0 -11
  864. package/Tests/Runtime/Core/MutationDuringEmissionTests.cs +0 -2141
  865. package/Tests/Runtime/Core/MutationDuringEmissionTests.cs.meta +0 -11
  866. package/Tests/Runtime/Core/MutationGlobalAddTests.cs +0 -102
  867. package/Tests/Runtime/Core/MutationGlobalAddTests.cs.meta +0 -11
  868. package/Tests/Runtime/Core/MutationHighVolumeStressTests.cs +0 -512
  869. package/Tests/Runtime/Core/MutationHighVolumeStressTests.cs.meta +0 -11
  870. package/Tests/Runtime/Core/MutationInterceptorTests.cs +0 -190
  871. package/Tests/Runtime/Core/MutationInterceptorTests.cs.meta +0 -11
  872. package/Tests/Runtime/Core/MutationPostProcessorAcrossHandlersTests.cs +0 -109
  873. package/Tests/Runtime/Core/MutationPostProcessorAcrossHandlersTests.cs.meta +0 -11
  874. package/Tests/Runtime/Core/MutationPostProcessorMoreTests.cs +0 -117
  875. package/Tests/Runtime/Core/MutationPostProcessorMoreTests.cs.meta +0 -11
  876. package/Tests/Runtime/Core/MutationPriorityTests.cs +0 -119
  877. package/Tests/Runtime/Core/MutationPriorityTests.cs.meta +0 -11
  878. package/Tests/Runtime/Core/NominalTests.cs +0 -1738
  879. package/Tests/Runtime/Core/NominalTests.cs.meta +0 -11
  880. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs +0 -683
  881. package/Tests/Runtime/Core/OrderingManyRegistrationsTests.cs.meta +0 -11
  882. package/Tests/Runtime/Core/OrderingTests.cs +0 -1932
  883. package/Tests/Runtime/Core/OrderingTests.cs.meta +0 -11
  884. package/Tests/Runtime/Core/OverDeregistrationTests.cs +0 -128
  885. package/Tests/Runtime/Core/OverDeregistrationTests.cs.meta +0 -11
  886. package/Tests/Runtime/Core/PostProcessorTests.cs +0 -1248
  887. package/Tests/Runtime/Core/PostProcessorTests.cs.meta +0 -11
  888. package/Tests/Runtime/Core/ReflexiveErrorTests.cs +0 -43
  889. package/Tests/Runtime/Core/ReflexiveErrorTests.cs.meta +0 -11
  890. package/Tests/Runtime/Core/ReflexiveMessageWarningTests.cs +0 -89
  891. package/Tests/Runtime/Core/ReflexiveMessageWarningTests.cs.meta +0 -11
  892. package/Tests/Runtime/Core/ReflexiveTests.cs +0 -173
  893. package/Tests/Runtime/Core/ReflexiveTests.cs.meta +0 -11
  894. package/Tests/Runtime/Core/RegistrationTests.cs +0 -1269
  895. package/Tests/Runtime/Core/RegistrationTests.cs.meta +0 -11
  896. package/Tests/Runtime/Core/SourceGeneratorNestedTests.cs +0 -116
  897. package/Tests/Runtime/Core/SourceGeneratorNestedTests.cs.meta +0 -11
  898. package/Tests/Runtime/Core/StringShorthandTests.cs +0 -101
  899. package/Tests/Runtime/Core/StringShorthandTests.cs.meta +0 -12
  900. package/Tests/Runtime/Core/TargetedTests.cs +0 -905
  901. package/Tests/Runtime/Core/TargetedTests.cs.meta +0 -11
  902. package/Tests/Runtime/Core/TypedShorthandTests.cs +0 -233
  903. package/Tests/Runtime/Core/TypedShorthandTests.cs.meta +0 -12
  904. package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs +0 -173
  905. package/Tests/Runtime/Core/UntargetedEquivalenceTests.cs.meta +0 -12
  906. package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs +0 -50
  907. package/Tests/Runtime/Core/UntargetedPrefreezeTests.cs.meta +0 -11
  908. package/Tests/Runtime/Core/UntargetedTests.cs +0 -280
  909. package/Tests/Runtime/Core/UntargetedTests.cs.meta +0 -11
  910. package/Tests/Runtime/Core.meta +0 -8
  911. package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs +0 -165
  912. package/Tests/Runtime/Integrations/Reflex/ReflexIntegrationTests.cs.meta +0 -11
  913. package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset +0 -16
  914. package/Tests/Runtime/Integrations/Reflex/Resources/ReflexSettings.asset.meta +0 -8
  915. package/Tests/Runtime/Integrations/Reflex/Resources.meta +0 -8
  916. package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef +0 -27
  917. package/Tests/Runtime/Integrations/Reflex/WallstopStudios.DxMessaging.Tests.Runtime.Reflex.asmdef.meta +0 -7
  918. package/Tests/Runtime/Integrations/Reflex.meta +0 -8
  919. package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs +0 -143
  920. package/Tests/Runtime/Integrations/VContainer/VContainerIntegrationTests.cs.meta +0 -11
  921. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef +0 -37
  922. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.DxMessaging.Tests.Runtime.VContainer.asmdef.meta +0 -7
  923. package/Tests/Runtime/Integrations/VContainer.meta +0 -8
  924. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef +0 -37
  925. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.DxMessaging.Tests.Runtime.Zenject.asmdef.meta +0 -7
  926. package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs +0 -142
  927. package/Tests/Runtime/Integrations/Zenject/ZenjectIntegrationTests.cs.meta +0 -11
  928. package/Tests/Runtime/Integrations/Zenject.meta +0 -8
  929. package/Tests/Runtime/Integrations.meta +0 -8
  930. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs +0 -9
  931. package/Tests/Runtime/Scripts/Components/EmptyMessageAwareComponent.cs.meta +0 -11
  932. package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs +0 -21
  933. package/Tests/Runtime/Scripts/Components/GenericMessageAwareComponent.cs.meta +0 -3
  934. package/Tests/Runtime/Scripts/Components/ManualListenerComponent.cs +0 -25
  935. package/Tests/Runtime/Scripts/Components/ManualListenerComponent.cs.meta +0 -11
  936. package/Tests/Runtime/Scripts/Components/ReflexiveReceiverComponent.cs +0 -17
  937. package/Tests/Runtime/Scripts/Components/ReflexiveReceiverComponent.cs.meta +0 -11
  938. package/Tests/Runtime/Scripts/Components/ShorthandTargetedBroadcastComponent.cs +0 -46
  939. package/Tests/Runtime/Scripts/Components/ShorthandTargetedBroadcastComponent.cs.meta +0 -12
  940. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs +0 -198
  941. package/Tests/Runtime/Scripts/Components/SimpleMessageAwareComponent.cs.meta +0 -11
  942. package/Tests/Runtime/Scripts/Components/StringMessageAwareComponent.cs +0 -75
  943. package/Tests/Runtime/Scripts/Components/StringMessageAwareComponent.cs.meta +0 -12
  944. package/Tests/Runtime/Scripts/Components/UntargetedClassReceiverComponent.cs +0 -16
  945. package/Tests/Runtime/Scripts/Components/UntargetedClassReceiverComponent.cs.meta +0 -12
  946. package/Tests/Runtime/Scripts/Components/UntargetedReceiverComponent.cs +0 -16
  947. package/Tests/Runtime/Scripts/Components/UntargetedReceiverComponent.cs.meta +0 -12
  948. package/Tests/Runtime/Scripts/Components.meta +0 -8
  949. package/Tests/Runtime/Scripts/Messages/ClassUntargetedMessage.cs +0 -17
  950. package/Tests/Runtime/Scripts/Messages/ClassUntargetedMessage.cs.meta +0 -12
  951. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs +0 -29
  952. package/Tests/Runtime/Scripts/Messages/ComplexTargetedMessage.cs.meta +0 -11
  953. package/Tests/Runtime/Scripts/Messages/GenericUntargetedMessage.cs +0 -7
  954. package/Tests/Runtime/Scripts/Messages/GenericUntargetedMessage.cs.meta +0 -3
  955. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs +0 -7
  956. package/Tests/Runtime/Scripts/Messages/SimpleBroadcastMessage.cs.meta +0 -11
  957. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs +0 -7
  958. package/Tests/Runtime/Scripts/Messages/SimpleTargetedMessage.cs.meta +0 -11
  959. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs +0 -7
  960. package/Tests/Runtime/Scripts/Messages/SimpleUntargetedMessage.cs.meta +0 -11
  961. package/Tests/Runtime/Scripts/Messages.meta +0 -8
  962. package/Tests/Runtime/Scripts.meta +0 -8
  963. package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs +0 -67
  964. package/Tests/Runtime/TestUtilities/UnityFixtureBase.cs.meta +0 -12
  965. package/Tests/Runtime/TestUtilities.meta +0 -9
  966. package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs +0 -60
  967. package/Tests/Runtime/Unity/MessageBusProviderAssetTests.cs.meta +0 -11
  968. package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs +0 -191
  969. package/Tests/Runtime/Unity/MessageBusProviderHandleTests.cs.meta +0 -12
  970. package/Tests/Runtime/Unity/MessagingComponentInstallerSceneTests.cs +0 -109
  971. package/Tests/Runtime/Unity/MessagingComponentInstallerSceneTests.cs.meta +0 -11
  972. package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs +0 -352
  973. package/Tests/Runtime/Unity/MessagingComponentProviderIntegrationTests.cs.meta +0 -12
  974. package/Tests/Runtime/Unity.meta +0 -9
  975. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef +0 -21
  976. package/Tests/Runtime/WallstopStudios.DxMessaging.Tests.Runtime.asmdef.meta +0 -7
  977. package/Tests/Runtime.meta +0 -8
  978. package/Tests.meta +0 -8
  979. package/coverage/clover.xml +0 -219
  980. package/coverage/clover.xml.meta +0 -7
  981. package/coverage/coverage-final.json +0 -2
  982. package/coverage/coverage-final.json.meta +0 -7
  983. package/coverage/lcov-report/base.css +0 -224
  984. package/coverage/lcov-report/base.css.meta +0 -7
  985. package/coverage/lcov-report/block-navigation.js +0 -87
  986. package/coverage/lcov-report/block-navigation.js.meta +0 -7
  987. package/coverage/lcov-report/favicon.png +0 -0
  988. package/coverage/lcov-report/favicon.png.meta +0 -127
  989. package/coverage/lcov-report/index.html +0 -116
  990. package/coverage/lcov-report/index.html.meta +0 -7
  991. package/coverage/lcov-report/prettify.css +0 -1
  992. package/coverage/lcov-report/prettify.css.meta +0 -7
  993. package/coverage/lcov-report/prettify.js +0 -2
  994. package/coverage/lcov-report/prettify.js.meta +0 -7
  995. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  996. package/coverage/lcov-report/sort-arrow-sprite.png.meta +0 -127
  997. package/coverage/lcov-report/sorter.js +0 -210
  998. package/coverage/lcov-report/sorter.js.meta +0 -7
  999. package/coverage/lcov-report/transform-docs-to-wiki.js.html +0 -1312
  1000. package/coverage/lcov-report/transform-docs-to-wiki.js.html.meta +0 -7
  1001. package/coverage/lcov-report/vendor.meta +0 -8
  1002. package/coverage/lcov-report.meta +0 -8
  1003. package/coverage/lcov.info +0 -365
  1004. package/coverage/lcov.info.meta +0 -7
  1005. package/docs/advanced/emit-shorthands.md +0 -468
  1006. package/docs/advanced/emit-shorthands.md.meta +0 -7
  1007. package/docs/advanced/message-bus-providers.md +0 -497
  1008. package/docs/advanced/message-bus-providers.md.meta +0 -7
  1009. package/docs/advanced/registration-builders.md +0 -444
  1010. package/docs/advanced/registration-builders.md.meta +0 -7
  1011. package/docs/advanced/runtime-configuration.md +0 -408
  1012. package/docs/advanced/runtime-configuration.md.meta +0 -7
  1013. package/docs/advanced/string-messages.md +0 -71
  1014. package/docs/advanced/string-messages.md.meta +0 -7
  1015. package/docs/advanced.meta +0 -8
  1016. package/docs/architecture/comparisons.md +0 -1684
  1017. package/docs/architecture/comparisons.md.meta +0 -7
  1018. package/docs/architecture/design-and-architecture.md +0 -142
  1019. package/docs/architecture/design-and-architecture.md.meta +0 -7
  1020. package/docs/architecture/performance.md +0 -53
  1021. package/docs/architecture/performance.md.meta +0 -7
  1022. package/docs/architecture.meta +0 -8
  1023. package/docs/concepts/index.md +0 -37
  1024. package/docs/concepts/index.md.meta +0 -7
  1025. package/docs/concepts/interceptors-and-ordering.md +0 -522
  1026. package/docs/concepts/interceptors-and-ordering.md.meta +0 -7
  1027. package/docs/concepts/listening-patterns.md +0 -266
  1028. package/docs/concepts/listening-patterns.md.meta +0 -7
  1029. package/docs/concepts/mental-model.md +0 -390
  1030. package/docs/concepts/mental-model.md.meta +0 -7
  1031. package/docs/concepts/message-types.md +0 -218
  1032. package/docs/concepts/message-types.md.meta +0 -7
  1033. package/docs/concepts/targeting-and-context.md +0 -451
  1034. package/docs/concepts/targeting-and-context.md.meta +0 -7
  1035. package/docs/concepts.meta +0 -8
  1036. package/docs/examples/end-to-end-scene-transitions.md +0 -130
  1037. package/docs/examples/end-to-end-scene-transitions.md.meta +0 -7
  1038. package/docs/examples/end-to-end.md +0 -139
  1039. package/docs/examples/end-to-end.md.meta +0 -7
  1040. package/docs/examples.meta +0 -8
  1041. package/docs/getting-started/getting-started.md +0 -203
  1042. package/docs/getting-started/getting-started.md.meta +0 -7
  1043. package/docs/getting-started/index.md +0 -317
  1044. package/docs/getting-started/index.md.meta +0 -7
  1045. package/docs/getting-started/install.md +0 -89
  1046. package/docs/getting-started/install.md.meta +0 -7
  1047. package/docs/getting-started/overview.md +0 -159
  1048. package/docs/getting-started/overview.md.meta +0 -7
  1049. package/docs/getting-started/quick-start.md +0 -175
  1050. package/docs/getting-started/quick-start.md.meta +0 -7
  1051. package/docs/getting-started/visual-guide.md +0 -605
  1052. package/docs/getting-started/visual-guide.md.meta +0 -7
  1053. package/docs/getting-started.meta +0 -8
  1054. package/docs/guides/advanced.md +0 -261
  1055. package/docs/guides/advanced.md.meta +0 -7
  1056. package/docs/guides/diagnostics.md +0 -300
  1057. package/docs/guides/diagnostics.md.meta +0 -7
  1058. package/docs/guides/migration-guide.md +0 -513
  1059. package/docs/guides/migration-guide.md.meta +0 -7
  1060. package/docs/guides/patterns.md +0 -1080
  1061. package/docs/guides/patterns.md.meta +0 -7
  1062. package/docs/guides/testing.md +0 -243
  1063. package/docs/guides/testing.md.meta +0 -7
  1064. package/docs/guides/unity-integration.md +0 -139
  1065. package/docs/guides/unity-integration.md.meta +0 -7
  1066. package/docs/guides.meta +0 -8
  1067. package/docs/hooks.py +0 -177
  1068. package/docs/hooks.py.meta +0 -7
  1069. package/docs/images/DxMessaging-banner.svg +0 -119
  1070. package/docs/images/DxMessaging-banner.svg.meta +0 -7
  1071. package/docs/images.meta +0 -8
  1072. package/docs/index.md +0 -61
  1073. package/docs/index.md.meta +0 -7
  1074. package/docs/integrations/index.md +0 -66
  1075. package/docs/integrations/index.md.meta +0 -7
  1076. package/docs/integrations/reflex.md +0 -317
  1077. package/docs/integrations/reflex.md.meta +0 -7
  1078. package/docs/integrations/vcontainer.md +0 -333
  1079. package/docs/integrations/vcontainer.md.meta +0 -7
  1080. package/docs/integrations/zenject.md +0 -333
  1081. package/docs/integrations/zenject.md.meta +0 -7
  1082. package/docs/integrations.meta +0 -8
  1083. package/docs/javascripts/csharp-highlight.js +0 -246
  1084. package/docs/javascripts/csharp-highlight.js.meta +0 -7
  1085. package/docs/javascripts/mermaid-config.js +0 -387
  1086. package/docs/javascripts/mermaid-config.js.meta +0 -7
  1087. package/docs/javascripts.meta +0 -8
  1088. package/docs/reference/compatibility.md +0 -44
  1089. package/docs/reference/compatibility.md.meta +0 -7
  1090. package/docs/reference/faq.md +0 -57
  1091. package/docs/reference/faq.md.meta +0 -7
  1092. package/docs/reference/glossary.md +0 -267
  1093. package/docs/reference/glossary.md.meta +0 -7
  1094. package/docs/reference/helpers.md +0 -989
  1095. package/docs/reference/helpers.md.meta +0 -7
  1096. package/docs/reference/quick-reference.md +0 -269
  1097. package/docs/reference/quick-reference.md.meta +0 -7
  1098. package/docs/reference/reference.md +0 -365
  1099. package/docs/reference/reference.md.meta +0 -7
  1100. package/docs/reference/troubleshooting.md +0 -63
  1101. package/docs/reference/troubleshooting.md.meta +0 -7
  1102. package/docs/reference.meta +0 -8
  1103. package/docs/stylesheets/extra.css +0 -485
  1104. package/docs/stylesheets/extra.css.meta +0 -7
  1105. package/docs/stylesheets.meta +0 -8
  1106. package/docs.meta +0 -8
  1107. package/mkdocs.yml +0 -200
  1108. package/mkdocs.yml.meta +0 -7
  1109. package/requirements-docs.txt +0 -23
  1110. package/requirements-docs.txt.meta +0 -7
  1111. package/scripts/__tests__/generate-skills-index.test.js +0 -397
  1112. package/scripts/__tests__/generate-skills-index.test.js.meta +0 -7
  1113. package/scripts/__tests__/mermaid-config.test.js +0 -467
  1114. package/scripts/__tests__/mermaid-config.test.js.meta +0 -7
  1115. package/scripts/__tests__/sync-banner-version.test.js +0 -606
  1116. package/scripts/__tests__/sync-banner-version.test.js.meta +0 -7
  1117. package/scripts/__tests__/validate-skills-optional-fields.test.js +0 -1474
  1118. package/scripts/__tests__/validate-skills-optional-fields.test.js.meta +0 -7
  1119. package/scripts/__tests__/validate-skills-required-fields.test.js +0 -188
  1120. package/scripts/__tests__/validate-skills-required-fields.test.js.meta +0 -7
  1121. package/scripts/__tests__/validate-skills-tags.test.js +0 -353
  1122. package/scripts/__tests__/validate-skills-tags.test.js.meta +0 -7
  1123. package/scripts/__tests__/validate-workflows.test.js +0 -188
  1124. package/scripts/__tests__/validate-workflows.test.js.meta +0 -7
  1125. package/scripts/__tests__.meta +0 -8
  1126. package/scripts/check-eol.js +0 -365
  1127. package/scripts/check-eol.js.meta +0 -7
  1128. package/scripts/check-eol.ps1 +0 -179
  1129. package/scripts/check-eol.ps1.meta +0 -8
  1130. package/scripts/fix-eol.js +0 -164
  1131. package/scripts/fix-eol.js.meta +0 -7
  1132. package/scripts/fix-markdown-file.js +0 -64
  1133. package/scripts/fix-markdown-file.js.meta +0 -7
  1134. package/scripts/fix-md036-headings.js +0 -71
  1135. package/scripts/fix-md036-headings.js.meta +0 -7
  1136. package/scripts/generate-skills-index.js +0 -597
  1137. package/scripts/generate-skills-index.js.meta +0 -7
  1138. package/scripts/generate-skills-index.ps1 +0 -38
  1139. package/scripts/generate-skills-index.ps1.meta +0 -7
  1140. package/scripts/hooks/pre-commit +0 -59
  1141. package/scripts/hooks/pre-commit.meta +0 -7
  1142. package/scripts/hooks.meta +0 -8
  1143. package/scripts/lint-doc-links.ps1 +0 -25
  1144. package/scripts/lint-doc-links.ps1.meta +0 -7
  1145. package/scripts/sync-banner-version.ps1 +0 -133
  1146. package/scripts/sync-banner-version.ps1.meta +0 -7
  1147. package/scripts/sync-banner-version.sh +0 -16
  1148. package/scripts/sync-banner-version.sh.meta +0 -7
  1149. package/scripts/validate-skills.js +0 -757
  1150. package/scripts/validate-skills.js.meta +0 -7
  1151. package/scripts/validate-workflows.js +0 -272
  1152. package/scripts/validate-workflows.js.meta +0 -7
  1153. package/scripts/wiki/__tests__/transform.test.js +0 -380
  1154. package/scripts/wiki/__tests__/transform.test.js.meta +0 -7
  1155. package/scripts/wiki/__tests__.meta +0 -7
  1156. package/scripts/wiki/generate-wiki-sidebar.js +0 -122
  1157. package/scripts/wiki/generate-wiki-sidebar.js.meta +0 -7
  1158. package/scripts/wiki/transform-docs-to-wiki.js +0 -409
  1159. package/scripts/wiki/transform-docs-to-wiki.js.meta +0 -7
  1160. package/scripts/wiki.meta +0 -8
  1161. package/scripts.meta +0 -8
  1162. package/site/404.html +0 -1
  1163. package/site/404.html.meta +0 -7
  1164. package/site/advanced/emit-shorthands/index.html +0 -212
  1165. package/site/advanced/emit-shorthands/index.html.meta +0 -7
  1166. package/site/advanced/emit-shorthands.meta +0 -8
  1167. package/site/advanced/message-bus-providers/index.html +0 -241
  1168. package/site/advanced/message-bus-providers/index.html.meta +0 -7
  1169. package/site/advanced/message-bus-providers.meta +0 -8
  1170. package/site/advanced/registration-builders/index.html +0 -228
  1171. package/site/advanced/registration-builders/index.html.meta +0 -7
  1172. package/site/advanced/registration-builders.meta +0 -8
  1173. package/site/advanced/runtime-configuration/index.html +0 -196
  1174. package/site/advanced/runtime-configuration/index.html.meta +0 -7
  1175. package/site/advanced/runtime-configuration.meta +0 -8
  1176. package/site/advanced/string-messages/index.html +0 -29
  1177. package/site/advanced/string-messages/index.html.meta +0 -7
  1178. package/site/advanced/string-messages.meta +0 -8
  1179. package/site/advanced.meta +0 -8
  1180. package/site/architecture/comparisons/index.html +0 -356
  1181. package/site/architecture/comparisons/index.html.meta +0 -7
  1182. package/site/architecture/comparisons.meta +0 -8
  1183. package/site/architecture/design-and-architecture/index.html +0 -34
  1184. package/site/architecture/design-and-architecture/index.html.meta +0 -7
  1185. package/site/architecture/design-and-architecture.meta +0 -8
  1186. package/site/architecture/performance/index.html +0 -1
  1187. package/site/architecture/performance/index.html.meta +0 -7
  1188. package/site/architecture/performance.meta +0 -8
  1189. package/site/architecture.meta +0 -8
  1190. package/site/assets/images/favicon.png +0 -0
  1191. package/site/assets/images/favicon.png.meta +0 -127
  1192. package/site/assets/images.meta +0 -8
  1193. package/site/assets/javascripts/bundle.79ae519e.min.js +0 -16
  1194. package/site/assets/javascripts/bundle.79ae519e.min.js.map +0 -7
  1195. package/site/assets/javascripts/bundle.79ae519e.min.js.map.meta +0 -7
  1196. package/site/assets/javascripts/bundle.79ae519e.min.js.meta +0 -7
  1197. package/site/assets/javascripts/lunr/min/lunr.ar.min.js +0 -1
  1198. package/site/assets/javascripts/lunr/min/lunr.ar.min.js.meta +0 -7
  1199. package/site/assets/javascripts/lunr/min/lunr.da.min.js +0 -18
  1200. package/site/assets/javascripts/lunr/min/lunr.da.min.js.meta +0 -7
  1201. package/site/assets/javascripts/lunr/min/lunr.de.min.js +0 -18
  1202. package/site/assets/javascripts/lunr/min/lunr.de.min.js.meta +0 -7
  1203. package/site/assets/javascripts/lunr/min/lunr.du.min.js +0 -18
  1204. package/site/assets/javascripts/lunr/min/lunr.du.min.js.meta +0 -7
  1205. package/site/assets/javascripts/lunr/min/lunr.el.min.js +0 -1
  1206. package/site/assets/javascripts/lunr/min/lunr.el.min.js.meta +0 -7
  1207. package/site/assets/javascripts/lunr/min/lunr.es.min.js +0 -18
  1208. package/site/assets/javascripts/lunr/min/lunr.es.min.js.meta +0 -7
  1209. package/site/assets/javascripts/lunr/min/lunr.fi.min.js +0 -18
  1210. package/site/assets/javascripts/lunr/min/lunr.fi.min.js.meta +0 -7
  1211. package/site/assets/javascripts/lunr/min/lunr.fr.min.js +0 -18
  1212. package/site/assets/javascripts/lunr/min/lunr.fr.min.js.meta +0 -7
  1213. package/site/assets/javascripts/lunr/min/lunr.he.min.js +0 -1
  1214. package/site/assets/javascripts/lunr/min/lunr.he.min.js.meta +0 -7
  1215. package/site/assets/javascripts/lunr/min/lunr.hi.min.js +0 -1
  1216. package/site/assets/javascripts/lunr/min/lunr.hi.min.js.meta +0 -7
  1217. package/site/assets/javascripts/lunr/min/lunr.hu.min.js +0 -18
  1218. package/site/assets/javascripts/lunr/min/lunr.hu.min.js.meta +0 -7
  1219. package/site/assets/javascripts/lunr/min/lunr.hy.min.js +0 -1
  1220. package/site/assets/javascripts/lunr/min/lunr.hy.min.js.meta +0 -7
  1221. package/site/assets/javascripts/lunr/min/lunr.it.min.js +0 -18
  1222. package/site/assets/javascripts/lunr/min/lunr.it.min.js.meta +0 -7
  1223. package/site/assets/javascripts/lunr/min/lunr.ja.min.js +0 -1
  1224. package/site/assets/javascripts/lunr/min/lunr.ja.min.js.meta +0 -7
  1225. package/site/assets/javascripts/lunr/min/lunr.jp.min.js +0 -1
  1226. package/site/assets/javascripts/lunr/min/lunr.jp.min.js.meta +0 -7
  1227. package/site/assets/javascripts/lunr/min/lunr.kn.min.js +0 -1
  1228. package/site/assets/javascripts/lunr/min/lunr.kn.min.js.meta +0 -7
  1229. package/site/assets/javascripts/lunr/min/lunr.ko.min.js +0 -1
  1230. package/site/assets/javascripts/lunr/min/lunr.ko.min.js.meta +0 -7
  1231. package/site/assets/javascripts/lunr/min/lunr.multi.min.js +0 -1
  1232. package/site/assets/javascripts/lunr/min/lunr.multi.min.js.meta +0 -7
  1233. package/site/assets/javascripts/lunr/min/lunr.nl.min.js +0 -18
  1234. package/site/assets/javascripts/lunr/min/lunr.nl.min.js.meta +0 -7
  1235. package/site/assets/javascripts/lunr/min/lunr.no.min.js +0 -18
  1236. package/site/assets/javascripts/lunr/min/lunr.no.min.js.meta +0 -7
  1237. package/site/assets/javascripts/lunr/min/lunr.pt.min.js +0 -18
  1238. package/site/assets/javascripts/lunr/min/lunr.pt.min.js.meta +0 -7
  1239. package/site/assets/javascripts/lunr/min/lunr.ro.min.js +0 -18
  1240. package/site/assets/javascripts/lunr/min/lunr.ro.min.js.meta +0 -7
  1241. package/site/assets/javascripts/lunr/min/lunr.ru.min.js +0 -18
  1242. package/site/assets/javascripts/lunr/min/lunr.ru.min.js.meta +0 -7
  1243. package/site/assets/javascripts/lunr/min/lunr.sa.min.js +0 -1
  1244. package/site/assets/javascripts/lunr/min/lunr.sa.min.js.meta +0 -7
  1245. package/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +0 -1
  1246. package/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js.meta +0 -7
  1247. package/site/assets/javascripts/lunr/min/lunr.sv.min.js +0 -18
  1248. package/site/assets/javascripts/lunr/min/lunr.sv.min.js.meta +0 -7
  1249. package/site/assets/javascripts/lunr/min/lunr.ta.min.js +0 -1
  1250. package/site/assets/javascripts/lunr/min/lunr.ta.min.js.meta +0 -7
  1251. package/site/assets/javascripts/lunr/min/lunr.te.min.js +0 -1
  1252. package/site/assets/javascripts/lunr/min/lunr.te.min.js.meta +0 -7
  1253. package/site/assets/javascripts/lunr/min/lunr.th.min.js +0 -1
  1254. package/site/assets/javascripts/lunr/min/lunr.th.min.js.meta +0 -7
  1255. package/site/assets/javascripts/lunr/min/lunr.tr.min.js +0 -18
  1256. package/site/assets/javascripts/lunr/min/lunr.tr.min.js.meta +0 -7
  1257. package/site/assets/javascripts/lunr/min/lunr.vi.min.js +0 -1
  1258. package/site/assets/javascripts/lunr/min/lunr.vi.min.js.meta +0 -7
  1259. package/site/assets/javascripts/lunr/min/lunr.zh.min.js +0 -1
  1260. package/site/assets/javascripts/lunr/min/lunr.zh.min.js.meta +0 -7
  1261. package/site/assets/javascripts/lunr/min.meta +0 -8
  1262. package/site/assets/javascripts/lunr/tinyseg.js +0 -206
  1263. package/site/assets/javascripts/lunr/tinyseg.js.meta +0 -7
  1264. package/site/assets/javascripts/lunr/wordcut.js +0 -6708
  1265. package/site/assets/javascripts/lunr/wordcut.js.meta +0 -7
  1266. package/site/assets/javascripts/lunr.meta +0 -8
  1267. package/site/assets/javascripts/workers/search.2c215733.min.js +0 -42
  1268. package/site/assets/javascripts/workers/search.2c215733.min.js.map +0 -7
  1269. package/site/assets/javascripts/workers/search.2c215733.min.js.map.meta +0 -7
  1270. package/site/assets/javascripts/workers/search.2c215733.min.js.meta +0 -7
  1271. package/site/assets/javascripts/workers.meta +0 -8
  1272. package/site/assets/javascripts.meta +0 -8
  1273. package/site/assets/stylesheets/main.484c7ddc.min.css +0 -1
  1274. package/site/assets/stylesheets/main.484c7ddc.min.css.map +0 -1
  1275. package/site/assets/stylesheets/main.484c7ddc.min.css.map.meta +0 -7
  1276. package/site/assets/stylesheets/main.484c7ddc.min.css.meta +0 -7
  1277. package/site/assets/stylesheets/palette.ab4e12ef.min.css +0 -1
  1278. package/site/assets/stylesheets/palette.ab4e12ef.min.css.map +0 -1
  1279. package/site/assets/stylesheets/palette.ab4e12ef.min.css.map.meta +0 -7
  1280. package/site/assets/stylesheets/palette.ab4e12ef.min.css.meta +0 -7
  1281. package/site/assets/stylesheets.meta +0 -8
  1282. package/site/assets.meta +0 -8
  1283. package/site/concepts/index.html +0 -1
  1284. package/site/concepts/index.html.meta +0 -7
  1285. package/site/concepts/interceptors-and-ordering/index.html +0 -352
  1286. package/site/concepts/interceptors-and-ordering/index.html.meta +0 -7
  1287. package/site/concepts/interceptors-and-ordering.meta +0 -8
  1288. package/site/concepts/listening-patterns/index.html +0 -193
  1289. package/site/concepts/listening-patterns/index.html.meta +0 -7
  1290. package/site/concepts/listening-patterns.meta +0 -8
  1291. package/site/concepts/mental-model/index.html +0 -146
  1292. package/site/concepts/mental-model/index.html.meta +0 -7
  1293. package/site/concepts/mental-model.meta +0 -8
  1294. package/site/concepts/message-types/index.html +0 -111
  1295. package/site/concepts/message-types/index.html.meta +0 -7
  1296. package/site/concepts/message-types.meta +0 -8
  1297. package/site/concepts/targeting-and-context/index.html +0 -201
  1298. package/site/concepts/targeting-and-context/index.html.meta +0 -7
  1299. package/site/concepts/targeting-and-context.meta +0 -8
  1300. package/site/concepts.meta +0 -8
  1301. package/site/css/timeago.css +0 -15
  1302. package/site/css/timeago.css.meta +0 -7
  1303. package/site/css.meta +0 -8
  1304. package/site/examples/end-to-end/index.html +0 -85
  1305. package/site/examples/end-to-end/index.html.meta +0 -7
  1306. package/site/examples/end-to-end-scene-transitions/index.html +0 -84
  1307. package/site/examples/end-to-end-scene-transitions/index.html.meta +0 -7
  1308. package/site/examples/end-to-end-scene-transitions.meta +0 -8
  1309. package/site/examples/end-to-end.meta +0 -8
  1310. package/site/examples.meta +0 -8
  1311. package/site/getting-started/getting-started/index.html +0 -66
  1312. package/site/getting-started/getting-started/index.html.meta +0 -7
  1313. package/site/getting-started/getting-started.meta +0 -8
  1314. package/site/getting-started/index.html +0 -29
  1315. package/site/getting-started/index.html.meta +0 -7
  1316. package/site/getting-started/install/index.html +0 -8
  1317. package/site/getting-started/install/index.html.meta +0 -7
  1318. package/site/getting-started/install.meta +0 -8
  1319. package/site/getting-started/overview/index.html +0 -33
  1320. package/site/getting-started/overview/index.html.meta +0 -7
  1321. package/site/getting-started/overview.meta +0 -8
  1322. package/site/getting-started/quick-start/index.html +0 -81
  1323. package/site/getting-started/quick-start/index.html.meta +0 -7
  1324. package/site/getting-started/quick-start.meta +0 -8
  1325. package/site/getting-started/visual-guide/index.html +0 -256
  1326. package/site/getting-started/visual-guide/index.html.meta +0 -7
  1327. package/site/getting-started/visual-guide.meta +0 -8
  1328. package/site/getting-started.meta +0 -8
  1329. package/site/guides/advanced/index.html +0 -119
  1330. package/site/guides/advanced/index.html.meta +0 -7
  1331. package/site/guides/advanced.meta +0 -8
  1332. package/site/guides/diagnostics/index.html +0 -110
  1333. package/site/guides/diagnostics/index.html.meta +0 -7
  1334. package/site/guides/diagnostics.meta +0 -8
  1335. package/site/guides/migration-guide/index.html +0 -199
  1336. package/site/guides/migration-guide/index.html.meta +0 -7
  1337. package/site/guides/migration-guide.meta +0 -8
  1338. package/site/guides/patterns/index.html +0 -545
  1339. package/site/guides/patterns/index.html.meta +0 -7
  1340. package/site/guides/patterns.meta +0 -8
  1341. package/site/guides/testing/index.html +0 -153
  1342. package/site/guides/testing/index.html.meta +0 -7
  1343. package/site/guides/testing.meta +0 -8
  1344. package/site/guides/unity-integration/index.html +0 -67
  1345. package/site/guides/unity-integration/index.html.meta +0 -7
  1346. package/site/guides/unity-integration.meta +0 -8
  1347. package/site/guides.meta +0 -8
  1348. package/site/hooks.py +0 -168
  1349. package/site/hooks.py.meta +0 -7
  1350. package/site/images/DxMessaging-banner.svg +0 -119
  1351. package/site/images/DxMessaging-banner.svg.meta +0 -7
  1352. package/site/images.meta +0 -8
  1353. package/site/index.html +0 -17
  1354. package/site/index.html.meta +0 -7
  1355. package/site/integrations/index.html +0 -8
  1356. package/site/integrations/index.html.meta +0 -7
  1357. package/site/integrations/reflex/index.html +0 -186
  1358. package/site/integrations/reflex/index.html.meta +0 -7
  1359. package/site/integrations/reflex.meta +0 -8
  1360. package/site/integrations/vcontainer/index.html +0 -192
  1361. package/site/integrations/vcontainer/index.html.meta +0 -7
  1362. package/site/integrations/vcontainer.meta +0 -8
  1363. package/site/integrations/zenject/index.html +0 -197
  1364. package/site/integrations/zenject/index.html.meta +0 -7
  1365. package/site/integrations/zenject.meta +0 -8
  1366. package/site/integrations.meta +0 -8
  1367. package/site/javascripts/csharp-highlight.js +0 -246
  1368. package/site/javascripts/csharp-highlight.js.meta +0 -7
  1369. package/site/javascripts/mermaid-config.js +0 -350
  1370. package/site/javascripts/mermaid-config.js.meta +0 -7
  1371. package/site/javascripts.meta +0 -8
  1372. package/site/js/timeago.min.js +0 -2
  1373. package/site/js/timeago.min.js.meta +0 -7
  1374. package/site/js/timeago_mkdocs_material.js +0 -33
  1375. package/site/js/timeago_mkdocs_material.js.meta +0 -7
  1376. package/site/js.meta +0 -8
  1377. package/site/reference/compatibility/index.html +0 -1
  1378. package/site/reference/compatibility/index.html.meta +0 -7
  1379. package/site/reference/compatibility.meta +0 -8
  1380. package/site/reference/faq/index.html +0 -1
  1381. package/site/reference/faq/index.html.meta +0 -7
  1382. package/site/reference/faq.meta +0 -8
  1383. package/site/reference/glossary/index.html +0 -55
  1384. package/site/reference/glossary/index.html.meta +0 -7
  1385. package/site/reference/glossary.meta +0 -8
  1386. package/site/reference/helpers/index.html +0 -475
  1387. package/site/reference/helpers/index.html.meta +0 -7
  1388. package/site/reference/helpers.meta +0 -8
  1389. package/site/reference/quick-reference/index.html +0 -138
  1390. package/site/reference/quick-reference/index.html.meta +0 -7
  1391. package/site/reference/quick-reference.meta +0 -8
  1392. package/site/reference/reference/index.html +0 -194
  1393. package/site/reference/reference/index.html.meta +0 -7
  1394. package/site/reference/reference.meta +0 -8
  1395. package/site/reference/troubleshooting/index.html +0 -1
  1396. package/site/reference/troubleshooting/index.html.meta +0 -7
  1397. package/site/reference/troubleshooting.meta +0 -8
  1398. package/site/reference.meta +0 -8
  1399. package/site/search/search_index.json +0 -1
  1400. package/site/search/search_index.json.meta +0 -7
  1401. package/site/search.meta +0 -8
  1402. package/site/sitemap.xml +0 -163
  1403. package/site/sitemap.xml.gz +0 -0
  1404. package/site/sitemap.xml.gz.meta +0 -7
  1405. package/site/sitemap.xml.meta +0 -7
  1406. package/site/stylesheets/extra.css +0 -485
  1407. package/site/stylesheets/extra.css.meta +0 -7
  1408. package/site/stylesheets.meta +0 -8
@@ -1,545 +0,0 @@
1
- <!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="High-performance type-safe messaging library for Unity"><meta name=author content="Wallstop Studios"><link href=https://wallstop.github.io/DxMessaging/guides/patterns/ rel=canonical><link href=../../concepts/interceptors-and-ordering/ rel=prev><link href=../unity-integration/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.7.1"><title>Patterns - DxMessaging Documentation</title><link rel=stylesheet href=../../assets/stylesheets/main.484c7ddc.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.ab4e12ef.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../css/timeago.css><link rel=stylesheet href=../../stylesheets/extra.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#dxmessaging-patterns-real-world-solutions class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class="md-header md-header--shadow md-header--lifted" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title="DxMessaging Documentation" class="md-header__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> DxMessaging Documentation </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Patterns </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> </nav> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Home </a> </li> <li class=md-tabs__item> <a href=../../getting-started/ class=md-tabs__link> Getting Started </a> </li> <li class=md-tabs__item> <a href=../../concepts/ class=md-tabs__link> Concepts </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=./ class=md-tabs__link> Guides </a> </li> <li class=md-tabs__item> <a href=../../architecture/design-and-architecture/ class=md-tabs__link> Architecture </a> </li> <li class=md-tabs__item> <a href=../../advanced/emit-shorthands/ class=md-tabs__link> Advanced </a> </li> <li class=md-tabs__item> <a href=../../integrations/ class=md-tabs__link> Integrations </a> </li> <li class=md-tabs__item> <a href=../../examples/end-to-end/ class=md-tabs__link> Examples </a> </li> <li class=md-tabs__item> <a href=../../reference/reference/ class=md-tabs__link> Reference </a> </li> </ul> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title="DxMessaging Documentation" class="md-nav__button md-logo" aria-label="DxMessaging Documentation" data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> DxMessaging Documentation </label> <div class=md-nav__source> <a href=https://github.com/wallstop/DxMessaging title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> wallstop/DxMessaging </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2> <div class="md-nav__link md-nav__container"> <a href=../../getting-started/ class="md-nav__link "> <span class=md-ellipsis> Getting Started </span> </a> <label class="md-nav__link " for=__nav_2 id=__nav_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Getting Started </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../getting-started/overview/ class=md-nav__link> <span class=md-ellipsis> Overview </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/install/ class=md-nav__link> <span class=md-ellipsis> Installation </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/quick-start/ class=md-nav__link> <span class=md-ellipsis> Quick Start </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/getting-started/ class=md-nav__link> <span class=md-ellipsis> Getting Started Guide </span> </a> </li> <li class=md-nav__item> <a href=../../getting-started/visual-guide/ class=md-nav__link> <span class=md-ellipsis> Visual Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_3> <div class="md-nav__link md-nav__container"> <a href=../../concepts/ class="md-nav__link "> <span class=md-ellipsis> Concepts </span> </a> <label class="md-nav__link " for=__nav_3 id=__nav_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Concepts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../concepts/mental-model/ class=md-nav__link> <span class=md-ellipsis> Mental Model </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/message-types/ class=md-nav__link> <span class=md-ellipsis> Message Types </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/listening-patterns/ class=md-nav__link> <span class=md-ellipsis> Listening Patterns </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/targeting-and-context/ class=md-nav__link> <span class=md-ellipsis> Targeting & Context </span> </a> </li> <li class=md-nav__item> <a href=../../concepts/interceptors-and-ordering/ class=md-nav__link> <span class=md-ellipsis> Interceptors & Ordering </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_4 checked> <label class=md-nav__link for=__nav_4 id=__nav_4_label tabindex> <span class=md-ellipsis> Guides </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_4_label aria-expanded=true> <label class=md-nav__title for=__nav_4> <span class="md-nav__icon md-icon"></span> Guides </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> Patterns </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> Patterns </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-youll-find class=md-nav__link> <span class=md-ellipsis> What you'll find </span> </a> <nav class=md-nav aria-label="What you'll find"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#reading-guide class=md-nav__link> <span class=md-ellipsis> Reading guide </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-links-i-want-to class=md-nav__link> <span class=md-ellipsis> Quick Links: "I Want To..." </span> </a> <nav class=md-nav aria-label='Quick Links: "I Want To..."'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#find-your-use-case-jump-to-the-pattern class=md-nav__link> <span class=md-ellipsis> Find your use case, jump to the pattern </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> <nav class=md-nav aria-label="Table of Contents"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#basic-patterns class=md-nav__link> <span class=md-ellipsis> Basic Patterns </span> </a> </li> <li class=md-nav__item> <a href=#advanced-patterns class=md-nav__link> <span class=md-ellipsis> Advanced Patterns </span> </a> </li> <li class=md-nav__item> <a href=#real-world-scale-patterns class=md-nav__link> <span class=md-ellipsis> Real-World Scale Patterns </span> </a> </li> <li class=md-nav__item> <a href=#important-inheritance-with-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> Important: Inheritance with MessageAwareComponent </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#1-scene-wide-events-untargeted class=md-nav__link> <span class=md-ellipsis> 1) Scene-wide Events (Untargeted) </span> </a> </li> <li class=md-nav__item> <a href=#2-directed-commands-targeted class=md-nav__link> <span class=md-ellipsis> 2) Directed Commands (Targeted) </span> </a> </li> <li class=md-nav__item> <a href=#3-observability-broadcast class=md-nav__link> <span class=md-ellipsis> 3) Observability (Broadcast) </span> </a> </li> <li class=md-nav__item> <a href=#4-validation-and-normalization-interceptors class=md-nav__link> <span class=md-ellipsis> 4) Validation and Normalization (Interceptors) </span> </a> </li> <li class=md-nav__item> <a href=#5-analyticslogging-post-processors class=md-nav__link> <span class=md-ellipsis> 5) Analytics/Logging (Post-Processors) </span> </a> </li> <li class=md-nav__item> <a href=#6-local-bus-islands class=md-nav__link> <span class=md-ellipsis> 6) Local Bus Islands </span> </a> </li> <li class=md-nav__item> <a href=#7-lifecycle-pattern-in-unity class=md-nav__link> <span class=md-ellipsis> 7) Lifecycle Pattern in Unity </span> </a> </li> <li class=md-nav__item> <a href=#8-cross-scene-messaging class=md-nav__link> <span class=md-ellipsis> 8) Cross-Scene Messaging </span> </a> </li> <li class=md-nav__item> <a href=#9-bridging-legacy-unity-messaging class=md-nav__link> <span class=md-ellipsis> 9) Bridging Legacy Unity Messaging </span> </a> </li> <li class=md-nav__item> <a href=#10-global-accept-all-handlers class=md-nav__link> <span class=md-ellipsis> 10) Global Accept-All Handlers </span> </a> </li> <li class=md-nav__item> <a href=#11-diagnostics-and-tuning class=md-nav__link> <span class=md-ellipsis> 11) Diagnostics and Tuning </span> </a> </li> <li class=md-nav__item> <a href=#12-testing class=md-nav__link> <span class=md-ellipsis> 12) Testing </span> </a> </li> <li class=md-nav__item> <a href=#13-real-world-scale-beyond-toy-examples class=md-nav__link> <span class=md-ellipsis> 13) Real-World Scale: Beyond Toy Examples </span> </a> <nav class=md-nav aria-label="13) Real-World Scale: Beyond Toy Examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-managing-100-combat-entities class=md-nav__link> <span class=md-ellipsis> Pattern: Managing 100+ Combat Entities </span> </a> <nav class=md-nav aria-label="Pattern: Managing 100+ Combat Entities"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#scale-characteristics class=md-nav__link> <span class=md-ellipsis> Scale characteristics </span> </a> <nav class=md-nav aria-label="Scale characteristics"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#performance-notes class=md-nav__link> <span class=md-ellipsis> Performance notes </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-cross-scene-persistent-systems class=md-nav__link> <span class=md-ellipsis> Pattern: Cross-Scene Persistent Systems </span> </a> </li> <li class=md-nav__item> <a href=#pattern-large-scale-ui-system-20-panels class=md-nav__link> <span class=md-ellipsis> Pattern: Large-Scale UI System (20+ Panels) </span> </a> <nav class=md-nav aria-label="Pattern: Large-Scale UI System (20+ Panels)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits-at-scale class=md-nav__link> <span class=md-ellipsis> Benefits at scale </span> </a> <nav class=md-nav aria-label="Benefits at scale"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#anti-pattern-to-avoid class=md-nav__link> <span class=md-ellipsis> Anti-pattern to avoid </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-priority-ordered-execution-for-complex-systems class=md-nav__link> <span class=md-ellipsis> Pattern: Priority-Ordered Execution for Complex Systems </span> </a> <nav class=md-nav aria-label="Pattern: Priority-Ordered Execution for Complex Systems"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#recommended-priority-ranges class=md-nav__link> <span class=md-ellipsis> Recommended priority ranges </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-efficient-interception-at-scale class=md-nav__link> <span class=md-ellipsis> Pattern: Efficient Interception at Scale </span> </a> </li> <li class=md-nav__item> <a href=#pattern-post-processing-for-analytics-at-scale class=md-nav__link> <span class=md-ellipsis> Pattern: Post-Processing for Analytics at Scale </span> </a> </li> <li class=md-nav__item> <a href=#performance-optimization-patterns-at-scale class=md-nav__link> <span class=md-ellipsis> Performance Optimization Patterns at Scale </span> </a> <nav class=md-nav aria-label="Performance Optimization Patterns at Scale"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#optimization-1-disable-diagnostics-in-builds class=md-nav__link> <span class=md-ellipsis> Optimization 1: Disable Diagnostics in Builds </span> </a> </li> <li class=md-nav__item> <a href=#optimization-2-use-specific-registrations-over-globalacceptall class=md-nav__link> <span class=md-ellipsis> Optimization 2: Use Specific Registrations Over GlobalAcceptAll </span> </a> </li> <li class=md-nav__item> <a href=#optimization-3-batch-message-emissions class=md-nav__link> <span class=md-ellipsis> Optimization 3: Batch Message Emissions </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scaling-guidelines class=md-nav__link> <span class=md-ellipsis> Scaling Guidelines </span> </a> </li> <li class=md-nav__item> <a href=#real-world-production-example-battle-royale-game class=md-nav__link> <span class=md-ellipsis> Real-World Production Example: Battle Royale Game </span> </a> <nav class=md-nav aria-label="Real-World Production Example: Battle Royale Game"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-insights class=md-nav__link> <span class=md-ellipsis> Key insights </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#14-compatibility-with-scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> 14) Compatibility with Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="14) Compatibility with Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-is-scriptable-object-architecture class=md-nav__link> <span class=md-ellipsis> What is Scriptable Object Architecture? </span> </a> <nav class=md-nav aria-label="What is Scriptable Object Architecture?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-resources class=md-nav__link> <span class=md-ellipsis> Key resources </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#why-soa-is-controversial class=md-nav__link> <span class=md-ellipsis> Why SOA is Controversial </span> </a> <nav class=md-nav aria-label="Why SOA is Controversial"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#recommended-alternatives class=md-nav__link> <span class=md-ellipsis> Recommended alternatives </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-dxmessaging-work-with-soa class=md-nav__link> <span class=md-ellipsis> Can DxMessaging Work with SOA? </span> </a> </li> <li class=md-nav__item> <a href=#pattern-overview class=md-nav__link> <span class=md-ellipsis> Pattern Overview </span> </a> </li> <li class=md-nav__item> <a href=#pattern-a-soa--dxmessaging-event-forwarding class=md-nav__link> <span class=md-ellipsis> Pattern A: SOA → DxMessaging (Event Forwarding) </span> </a> <nav class=md-nav aria-label="Pattern A: SOA → DxMessaging (Event Forwarding)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example-scene-transitions class=md-nav__link> <span class=md-ellipsis> Example: Scene Transitions </span> </a> <nav class=md-nav aria-label="Example: Scene Transitions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> <nav class=md-nav aria-label=Benefits> <ul class=md-nav__list> <li class=md-nav__item> <a href=#drawbacks class=md-nav__link> <span class=md-ellipsis> Drawbacks </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-b-proper-scriptableobject-usage-recommended class=md-nav__link> <span class=md-ellipsis> Pattern B: Proper ScriptableObject Usage (Recommended) </span> </a> <nav class=md-nav aria-label="Pattern B: Proper ScriptableObject Usage (Recommended)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example-combat-with-designer-tunable-data class=md-nav__link> <span class=md-ellipsis> Example: Combat with Designer-Tunable Data </span> </a> <nav class=md-nav aria-label="Example: Combat with Designer-Tunable Data"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits_1 class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> <nav class=md-nav aria-label=Benefits> <ul class=md-nav__list> <li class=md-nav__item> <a href=#this-pattern-separates-concerns-clearly class=md-nav__link> <span class=md-ellipsis> This pattern separates concerns clearly </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-each-pattern class=md-nav__link> <span class=md-ellipsis> When to Use Each Pattern </span> </a> </li> <li class=md-nav__item> <a href=#migration-path-soa--dxmessaging class=md-nav__link> <span class=md-ellipsis> Migration Path: SOA → DxMessaging </span> </a> </li> <li class=md-nav__item> <a href=#final-recommendations class=md-nav__link> <span class=md-ellipsis> Final Recommendations </span> </a> <nav class=md-nav aria-label="Final Recommendations"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#if-youre-using-soa class=md-nav__link> <span class=md-ellipsis> If you're using SOA </span> </a> <nav class=md-nav aria-label="If you're using SOA"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#if-youre-starting-fresh class=md-nav__link> <span class=md-ellipsis> If you're starting fresh </span> </a> <nav class=md-nav aria-label="If you're starting fresh"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#related-documentation class=md-nav__link> <span class=md-ellipsis> Related Documentation </span> </a> <nav class=md-nav aria-label="Related Documentation"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learn-the-basics-first class=md-nav__link> <span class=md-ellipsis> Learn the Basics First? </span> </a> </li> <li class=md-nav__item> <a href=#try-real-examples class=md-nav__link> <span class=md-ellipsis> Try Real Examples </span> </a> </li> <li class=md-nav__item> <a href=#deep-dives class=md-nav__link> <span class=md-ellipsis> Deep Dives </span> </a> </li> <li class=md-nav__item> <a href=#reference class=md-nav__link> <span class=md-ellipsis> Reference </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../unity-integration/ class=md-nav__link> <span class=md-ellipsis> Unity Integration </span> </a> </li> <li class=md-nav__item> <a href=../testing/ class=md-nav__link> <span class=md-ellipsis> Testing </span> </a> </li> <li class=md-nav__item> <a href=../diagnostics/ class=md-nav__link> <span class=md-ellipsis> Diagnostics </span> </a> </li> <li class=md-nav__item> <a href=../advanced/ class=md-nav__link> <span class=md-ellipsis> Advanced Topics </span> </a> </li> <li class=md-nav__item> <a href=../migration-guide/ class=md-nav__link> <span class=md-ellipsis> Migration Guide </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Architecture </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Architecture </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../architecture/design-and-architecture/ class=md-nav__link> <span class=md-ellipsis> Design & Architecture </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/comparisons/ class=md-nav__link> <span class=md-ellipsis> Comparisons </span> </a> </li> <li class=md-nav__item> <a href=../../architecture/performance/ class=md-nav__link> <span class=md-ellipsis> Performance </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_6> <label class=md-nav__link for=__nav_6 id=__nav_6_label tabindex=0> <span class=md-ellipsis> Advanced </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_6_label aria-expanded=false> <label class=md-nav__title for=__nav_6> <span class="md-nav__icon md-icon"></span> Advanced </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../advanced/emit-shorthands/ class=md-nav__link> <span class=md-ellipsis> Emit Shorthands </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/message-bus-providers/ class=md-nav__link> <span class=md-ellipsis> Message Bus Providers </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/registration-builders/ class=md-nav__link> <span class=md-ellipsis> Registration Builders </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/runtime-configuration/ class=md-nav__link> <span class=md-ellipsis> Runtime Configuration </span> </a> </li> <li class=md-nav__item> <a href=../../advanced/string-messages/ class=md-nav__link> <span class=md-ellipsis> String Messages </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_7> <div class="md-nav__link md-nav__container"> <a href=../../integrations/ class="md-nav__link "> <span class=md-ellipsis> Integrations </span> </a> <label class="md-nav__link " for=__nav_7 id=__nav_7_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_7_label aria-expanded=false> <label class=md-nav__title for=__nav_7> <span class="md-nav__icon md-icon"></span> Integrations </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../integrations/vcontainer/ class=md-nav__link> <span class=md-ellipsis> VContainer </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/zenject/ class=md-nav__link> <span class=md-ellipsis> Zenject </span> </a> </li> <li class=md-nav__item> <a href=../../integrations/reflex/ class=md-nav__link> <span class=md-ellipsis> Reflex </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_8> <label class=md-nav__link for=__nav_8 id=__nav_8_label tabindex=0> <span class=md-ellipsis> Examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_8_label aria-expanded=false> <label class=md-nav__title for=__nav_8> <span class="md-nav__icon md-icon"></span> Examples </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../examples/end-to-end/ class=md-nav__link> <span class=md-ellipsis> End-to-End </span> </a> </li> <li class=md-nav__item> <a href=../../examples/end-to-end-scene-transitions/ class=md-nav__link> <span class=md-ellipsis> Scene Transitions </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_9> <label class=md-nav__link for=__nav_9 id=__nav_9_label tabindex=0> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_9_label aria-expanded=false> <label class=md-nav__title for=__nav_9> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../reference/reference/ class=md-nav__link> <span class=md-ellipsis> API Reference (Practical) </span> </a> </li> <li class=md-nav__item> <a href=../../reference/quick-reference/ class=md-nav__link> <span class=md-ellipsis> Quick Reference </span> </a> </li> <li class=md-nav__item> <a href=../../reference/helpers/ class=md-nav__link> <span class=md-ellipsis> Helpers </span> </a> </li> <li class=md-nav__item> <a href=../../reference/faq/ class=md-nav__link> <span class=md-ellipsis> FAQ </span> </a> </li> <li class=md-nav__item> <a href=../../reference/glossary/ class=md-nav__link> <span class=md-ellipsis> Glossary </span> </a> </li> <li class=md-nav__item> <a href=../../reference/troubleshooting/ class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> </li> <li class=md-nav__item> <a href=../../reference/compatibility/ class=md-nav__link> <span class=md-ellipsis> Compatibility </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#what-youll-find class=md-nav__link> <span class=md-ellipsis> What you'll find </span> </a> <nav class=md-nav aria-label="What you'll find"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#reading-guide class=md-nav__link> <span class=md-ellipsis> Reading guide </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#quick-links-i-want-to class=md-nav__link> <span class=md-ellipsis> Quick Links: "I Want To..." </span> </a> <nav class=md-nav aria-label='Quick Links: "I Want To..."'> <ul class=md-nav__list> <li class=md-nav__item> <a href=#find-your-use-case-jump-to-the-pattern class=md-nav__link> <span class=md-ellipsis> Find your use case, jump to the pattern </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#table-of-contents class=md-nav__link> <span class=md-ellipsis> Table of Contents </span> </a> <nav class=md-nav aria-label="Table of Contents"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#basic-patterns class=md-nav__link> <span class=md-ellipsis> Basic Patterns </span> </a> </li> <li class=md-nav__item> <a href=#advanced-patterns class=md-nav__link> <span class=md-ellipsis> Advanced Patterns </span> </a> </li> <li class=md-nav__item> <a href=#real-world-scale-patterns class=md-nav__link> <span class=md-ellipsis> Real-World Scale Patterns </span> </a> </li> <li class=md-nav__item> <a href=#important-inheritance-with-messageawarecomponent class=md-nav__link> <span class=md-ellipsis> Important: Inheritance with MessageAwareComponent </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#1-scene-wide-events-untargeted class=md-nav__link> <span class=md-ellipsis> 1) Scene-wide Events (Untargeted) </span> </a> </li> <li class=md-nav__item> <a href=#2-directed-commands-targeted class=md-nav__link> <span class=md-ellipsis> 2) Directed Commands (Targeted) </span> </a> </li> <li class=md-nav__item> <a href=#3-observability-broadcast class=md-nav__link> <span class=md-ellipsis> 3) Observability (Broadcast) </span> </a> </li> <li class=md-nav__item> <a href=#4-validation-and-normalization-interceptors class=md-nav__link> <span class=md-ellipsis> 4) Validation and Normalization (Interceptors) </span> </a> </li> <li class=md-nav__item> <a href=#5-analyticslogging-post-processors class=md-nav__link> <span class=md-ellipsis> 5) Analytics/Logging (Post-Processors) </span> </a> </li> <li class=md-nav__item> <a href=#6-local-bus-islands class=md-nav__link> <span class=md-ellipsis> 6) Local Bus Islands </span> </a> </li> <li class=md-nav__item> <a href=#7-lifecycle-pattern-in-unity class=md-nav__link> <span class=md-ellipsis> 7) Lifecycle Pattern in Unity </span> </a> </li> <li class=md-nav__item> <a href=#8-cross-scene-messaging class=md-nav__link> <span class=md-ellipsis> 8) Cross-Scene Messaging </span> </a> </li> <li class=md-nav__item> <a href=#9-bridging-legacy-unity-messaging class=md-nav__link> <span class=md-ellipsis> 9) Bridging Legacy Unity Messaging </span> </a> </li> <li class=md-nav__item> <a href=#10-global-accept-all-handlers class=md-nav__link> <span class=md-ellipsis> 10) Global Accept-All Handlers </span> </a> </li> <li class=md-nav__item> <a href=#11-diagnostics-and-tuning class=md-nav__link> <span class=md-ellipsis> 11) Diagnostics and Tuning </span> </a> </li> <li class=md-nav__item> <a href=#12-testing class=md-nav__link> <span class=md-ellipsis> 12) Testing </span> </a> </li> <li class=md-nav__item> <a href=#13-real-world-scale-beyond-toy-examples class=md-nav__link> <span class=md-ellipsis> 13) Real-World Scale: Beyond Toy Examples </span> </a> <nav class=md-nav aria-label="13) Real-World Scale: Beyond Toy Examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#pattern-managing-100-combat-entities class=md-nav__link> <span class=md-ellipsis> Pattern: Managing 100+ Combat Entities </span> </a> <nav class=md-nav aria-label="Pattern: Managing 100+ Combat Entities"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#scale-characteristics class=md-nav__link> <span class=md-ellipsis> Scale characteristics </span> </a> <nav class=md-nav aria-label="Scale characteristics"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#performance-notes class=md-nav__link> <span class=md-ellipsis> Performance notes </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-cross-scene-persistent-systems class=md-nav__link> <span class=md-ellipsis> Pattern: Cross-Scene Persistent Systems </span> </a> </li> <li class=md-nav__item> <a href=#pattern-large-scale-ui-system-20-panels class=md-nav__link> <span class=md-ellipsis> Pattern: Large-Scale UI System (20+ Panels) </span> </a> <nav class=md-nav aria-label="Pattern: Large-Scale UI System (20+ Panels)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits-at-scale class=md-nav__link> <span class=md-ellipsis> Benefits at scale </span> </a> <nav class=md-nav aria-label="Benefits at scale"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#anti-pattern-to-avoid class=md-nav__link> <span class=md-ellipsis> Anti-pattern to avoid </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-priority-ordered-execution-for-complex-systems class=md-nav__link> <span class=md-ellipsis> Pattern: Priority-Ordered Execution for Complex Systems </span> </a> <nav class=md-nav aria-label="Pattern: Priority-Ordered Execution for Complex Systems"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#recommended-priority-ranges class=md-nav__link> <span class=md-ellipsis> Recommended priority ranges </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-efficient-interception-at-scale class=md-nav__link> <span class=md-ellipsis> Pattern: Efficient Interception at Scale </span> </a> </li> <li class=md-nav__item> <a href=#pattern-post-processing-for-analytics-at-scale class=md-nav__link> <span class=md-ellipsis> Pattern: Post-Processing for Analytics at Scale </span> </a> </li> <li class=md-nav__item> <a href=#performance-optimization-patterns-at-scale class=md-nav__link> <span class=md-ellipsis> Performance Optimization Patterns at Scale </span> </a> <nav class=md-nav aria-label="Performance Optimization Patterns at Scale"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#optimization-1-disable-diagnostics-in-builds class=md-nav__link> <span class=md-ellipsis> Optimization 1: Disable Diagnostics in Builds </span> </a> </li> <li class=md-nav__item> <a href=#optimization-2-use-specific-registrations-over-globalacceptall class=md-nav__link> <span class=md-ellipsis> Optimization 2: Use Specific Registrations Over GlobalAcceptAll </span> </a> </li> <li class=md-nav__item> <a href=#optimization-3-batch-message-emissions class=md-nav__link> <span class=md-ellipsis> Optimization 3: Batch Message Emissions </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#scaling-guidelines class=md-nav__link> <span class=md-ellipsis> Scaling Guidelines </span> </a> </li> <li class=md-nav__item> <a href=#real-world-production-example-battle-royale-game class=md-nav__link> <span class=md-ellipsis> Real-World Production Example: Battle Royale Game </span> </a> <nav class=md-nav aria-label="Real-World Production Example: Battle Royale Game"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-insights class=md-nav__link> <span class=md-ellipsis> Key insights </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#14-compatibility-with-scriptable-object-architecture-soa class=md-nav__link> <span class=md-ellipsis> 14) Compatibility with Scriptable Object Architecture (SOA) </span> </a> <nav class=md-nav aria-label="14) Compatibility with Scriptable Object Architecture (SOA)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-is-scriptable-object-architecture class=md-nav__link> <span class=md-ellipsis> What is Scriptable Object Architecture? </span> </a> <nav class=md-nav aria-label="What is Scriptable Object Architecture?"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#key-resources class=md-nav__link> <span class=md-ellipsis> Key resources </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#why-soa-is-controversial class=md-nav__link> <span class=md-ellipsis> Why SOA is Controversial </span> </a> <nav class=md-nav aria-label="Why SOA is Controversial"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#recommended-alternatives class=md-nav__link> <span class=md-ellipsis> Recommended alternatives </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#can-dxmessaging-work-with-soa class=md-nav__link> <span class=md-ellipsis> Can DxMessaging Work with SOA? </span> </a> </li> <li class=md-nav__item> <a href=#pattern-overview class=md-nav__link> <span class=md-ellipsis> Pattern Overview </span> </a> </li> <li class=md-nav__item> <a href=#pattern-a-soa--dxmessaging-event-forwarding class=md-nav__link> <span class=md-ellipsis> Pattern A: SOA → DxMessaging (Event Forwarding) </span> </a> <nav class=md-nav aria-label="Pattern A: SOA → DxMessaging (Event Forwarding)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example-scene-transitions class=md-nav__link> <span class=md-ellipsis> Example: Scene Transitions </span> </a> <nav class=md-nav aria-label="Example: Scene Transitions"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> <nav class=md-nav aria-label=Benefits> <ul class=md-nav__list> <li class=md-nav__item> <a href=#drawbacks class=md-nav__link> <span class=md-ellipsis> Drawbacks </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#pattern-b-proper-scriptableobject-usage-recommended class=md-nav__link> <span class=md-ellipsis> Pattern B: Proper ScriptableObject Usage (Recommended) </span> </a> <nav class=md-nav aria-label="Pattern B: Proper ScriptableObject Usage (Recommended)"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#example-combat-with-designer-tunable-data class=md-nav__link> <span class=md-ellipsis> Example: Combat with Designer-Tunable Data </span> </a> <nav class=md-nav aria-label="Example: Combat with Designer-Tunable Data"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#benefits_1 class=md-nav__link> <span class=md-ellipsis> Benefits </span> </a> <nav class=md-nav aria-label=Benefits> <ul class=md-nav__list> <li class=md-nav__item> <a href=#this-pattern-separates-concerns-clearly class=md-nav__link> <span class=md-ellipsis> This pattern separates concerns clearly </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#when-to-use-each-pattern class=md-nav__link> <span class=md-ellipsis> When to Use Each Pattern </span> </a> </li> <li class=md-nav__item> <a href=#migration-path-soa--dxmessaging class=md-nav__link> <span class=md-ellipsis> Migration Path: SOA → DxMessaging </span> </a> </li> <li class=md-nav__item> <a href=#final-recommendations class=md-nav__link> <span class=md-ellipsis> Final Recommendations </span> </a> <nav class=md-nav aria-label="Final Recommendations"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#if-youre-using-soa class=md-nav__link> <span class=md-ellipsis> If you're using SOA </span> </a> <nav class=md-nav aria-label="If you're using SOA"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#if-youre-starting-fresh class=md-nav__link> <span class=md-ellipsis> If you're starting fresh </span> </a> <nav class=md-nav aria-label="If you're starting fresh"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#resources class=md-nav__link> <span class=md-ellipsis> Resources </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#related-documentation class=md-nav__link> <span class=md-ellipsis> Related Documentation </span> </a> <nav class=md-nav aria-label="Related Documentation"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#learn-the-basics-first class=md-nav__link> <span class=md-ellipsis> Learn the Basics First? </span> </a> </li> <li class=md-nav__item> <a href=#try-real-examples class=md-nav__link> <span class=md-ellipsis> Try Real Examples </span> </a> </li> <li class=md-nav__item> <a href=#deep-dives class=md-nav__link> <span class=md-ellipsis> Deep Dives </span> </a> </li> <li class=md-nav__item> <a href=#reference class=md-nav__link> <span class=md-ellipsis> Reference </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <nav class=md-path aria-label=Navigation> <ol class=md-path__list> <li class=md-path__item> <a href=../.. class=md-path__link> <span class=md-ellipsis> Home </span> </a> </li> <li class=md-path__item> <a href=./ class=md-path__link> <span class=md-ellipsis> Guides </span> </a> </li> </ol> </nav> <article class="md-content__inner md-typeset"> <a href=https://github.com/wallstop/DxMessaging/edit/master/docs/guides/patterns.md title="Edit this page" class="md-content__button md-icon" rel=edit> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/wallstop/DxMessaging/raw/master/docs/guides/patterns.md title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id=dxmessaging-patterns-real-world-solutions>DxMessaging Patterns: Real-World Solutions<a class=headerlink href=#dxmessaging-patterns-real-world-solutions title="Anchor link to this section">&para;</a></h1> <p><a href=../../getting-started/ >← Back to Index</a> | <a href=../../getting-started/getting-started/ >Getting Started</a> | <a href=../../concepts/message-types/ >Message Types</a> | <a href=https://github.com/wallstop/DxMessaging/tree/master/Samples~>Samples</a></p> <hr> <p><strong>You're here because:</strong> You understand DxMessaging basics, now you want to see "How do I actually build X?"</p> <h2 id=what-youll-find>What you'll find<a class=headerlink href=#what-youll-find title="Anchor link to this section">&para;</a></h2> <ul> <li><strong>Basic Patterns</strong> - Fundamental building blocks (scene transitions, commands, observability)</li> <li><strong>Advanced Patterns</strong> - Power user techniques (diagnostics, testing, legacy integration)</li> <li><strong>Scale Patterns</strong> - Examples for larger systems (100+ entities, cross-scene systems, large UI)</li> </ul> <h3 id=reading-guide>Reading guide<a class=headerlink href=#reading-guide title="Anchor link to this section">&para;</a></h3> <ul> <li><strong>New to DxMessaging?</strong> Start with Basic Patterns 1-8</li> <li><strong>Intermediate user?</strong> Jump to Advanced Patterns 9-12</li> <li><strong>Building at scale?</strong> Go straight to Real-World Scale Patterns</li> <li><strong>Specific problem?</strong> Use Ctrl+F / Cmd+F to search</li> </ul> <p><strong>Philosophy:</strong> These patterns address common challenges teams face when building messaging systems.</p> <hr> <h2 id=quick-links-i-want-to>Quick Links: "I Want To..."<a class=headerlink href=#quick-links-i-want-to title="Anchor link to this section">&para;</a></h2> <h3 id=find-your-use-case-jump-to-the-pattern>Find your use case, jump to the pattern<a class=headerlink href=#find-your-use-case-jump-to-the-pattern title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>I want to...</th> <th>Go to</th> </tr> </thead> <tbody> <tr> <td>Make UI react to gameplay</td> <td><a href=#2-directed-commands-targeted>Pattern 2: Directed Commands</a></td> </tr> <tr> <td>Coordinate scene transitions</td> <td><a href=#1-scene-wide-events-untargeted>Pattern 1: Scene-wide Events</a></td> </tr> <tr> <td>Build an achievement system</td> <td><a href=#3-observability-broadcast>Pattern 3: Observability</a> + <a href=#10-global-accept-all-handlers>Global Accept-All</a></td> </tr> <tr> <td>Validate input/damage before it happens</td> <td><a href=#4-validation-and-normalization-interceptors>Pattern 4: Interceptors</a></td> </tr> <tr> <td>Add analytics without touching gameplay</td> <td><a href=#5-analyticslogging-post-processors>Pattern 5: Post-Processors</a></td> </tr> <tr> <td>Track ALL damage from ANY entity</td> <td><a href=#pattern-managing-100-combat-entities>Pattern: Managing 100+ Entities</a></td> </tr> <tr> <td>Build a large UI system (20+ panels)</td> <td><a href=#pattern-large-scale-ui-system-20-panels>Pattern: Large-Scale UI</a></td> </tr> <tr> <td>Make systems run in a specific order</td> <td><a href=#pattern-priority-ordered-execution-for-complex-systems>Pattern: Priority Ordering</a></td> </tr> <tr> <td>Test in isolation</td> <td><a href=#6-local-bus-islands>Pattern 6: Local Bus Islands</a></td> </tr> <tr> <td>Migrate from C# events</td> <td><a href=#9-bridging-legacy-unity-messaging>Pattern 9: Bridging Legacy</a></td> </tr> <tr> <td>Handle persistent systems across scene loads</td> <td><a href=#pattern-cross-scene-persistent-systems>Pattern: Cross-Scene Persistent</a></td> </tr> <tr> <td>See what's happening (debug message flow)</td> <td><a href=#11-diagnostics-and-tuning>Pattern 11: Diagnostics</a></td> </tr> <tr> <td>Build a battle royale / large multiplayer</td> <td><a href=#real-world-production-example-battle-royale-game>Pattern: Battle Royale Example</a></td> </tr> <tr> <td>Use with Scriptable Object Architecture</td> <td><a href=#14-compatibility-with-scriptable-object-architecture-soa>Pattern 14: SOA Compatibility</a></td> </tr> </tbody> </table> <hr> <h2 id=table-of-contents>Table of Contents<a class=headerlink href=#table-of-contents title="Anchor link to this section">&para;</a></h2> <h3 id=basic-patterns>Basic Patterns<a class=headerlink href=#basic-patterns title="Anchor link to this section">&para;</a></h3> <ul> <li><a href=#1-scene-wide-events-untargeted>Scene-wide Events (Untargeted)</a></li> <li><a href=#2-directed-commands-targeted>Directed Commands (Targeted)</a></li> <li><a href=#3-observability-broadcast>Observability (Broadcast)</a></li> <li><a href=#4-validation-and-normalization-interceptors>Validation and Normalization (Interceptors)</a></li> <li><a href=#5-analyticslogging-post-processors>Analytics and Logging (Post-Processors)</a></li> <li><a href=#6-local-bus-islands>Local Bus Islands</a></li> <li><a href=#7-lifecycle-pattern-in-unity>Lifecycle Pattern in Unity</a></li> <li><a href=#8-cross-scene-messaging>Cross-Scene Messaging</a></li> </ul> <h3 id=advanced-patterns>Advanced Patterns<a class=headerlink href=#advanced-patterns title="Anchor link to this section">&para;</a></h3> <ul> <li><a href=#9-bridging-legacy-unity-messaging>Bridging Legacy Unity Messaging</a></li> <li><a href=#10-global-accept-all-handlers>Global Accept-All Handlers</a></li> <li><a href=#11-diagnostics-and-tuning>Diagnostics and Tuning</a></li> <li><a href=#12-testing>Testing</a></li> <li><a href=#14-compatibility-with-scriptable-object-architecture-soa>Compatibility with Scriptable Object Architecture (SOA)</a></li> </ul> <h3 id=real-world-scale-patterns>Real-World Scale Patterns<a class=headerlink href=#real-world-scale-patterns title="Anchor link to this section">&para;</a></h3> <ul> <li><a href=#pattern-managing-100-combat-entities>Managing 100+ Combat Entities</a></li> <li><a href=#pattern-cross-scene-persistent-systems>Cross-Scene Persistent Systems</a></li> <li><a href=#pattern-large-scale-ui-system-20-panels>Large-Scale UI System (20+ Panels)</a></li> <li><a href=#pattern-priority-ordered-execution-for-complex-systems>Priority-Ordered Execution</a></li> <li><a href=#pattern-efficient-interception-at-scale>Efficient Interception at Scale</a></li> <li><a href=#pattern-post-processing-for-analytics-at-scale>Post-Processing for Analytics at Scale</a></li> <li><a href=#performance-optimization-patterns-at-scale>Performance Optimization Patterns</a></li> <li><a href=#real-world-production-example-battle-royale-game>Production Example: Battle Royale Game</a></li> </ul> <hr> <h3 id=important-inheritance-with-messageawarecomponent>Important: Inheritance with MessageAwareComponent<a class=headerlink href=#important-inheritance-with-messageawarecomponent title="Anchor link to this section">&para;</a></h3> <ul> <li>Many examples derive from <code>MessageAwareComponent</code>. <strong>When overriding hooks, you MUST call the base method.</strong></li> <li><strong>Always call <code>base.RegisterMessageHandlers()</code> FIRST</strong> in your override to preserve default string‑message registrations and parent class registrations.</li> <li><strong>CRITICAL</strong>: Call <code>base.OnEnable()</code> / <code>base.OnDisable()</code> if you override lifecycle methods; otherwise your token may never enable/disable.</li> <li><strong>CRITICAL</strong>: Call <code>base.Awake()</code> if you override <code>Awake()</code>; otherwise your token won't be created.</li> <li>To opt out of string demos, override <code>RegisterForStringMessages =&gt; false</code> instead of skipping the base call.</li> <li><strong>Don't use <code>new</code> to hide methods</strong> (e.g., <code>new void OnEnable()</code>); always use <code>override</code> and call <code>base.*</code>.</li> </ul> <p>Registration timing (pit of success)</p> <ul> <li><strong>Prefer <code>Awake()</code> for all message handler registration</strong>—this is when <code>MessageAwareComponent</code> calls <code>RegisterMessageHandlers()</code>.</li> <li>Avoid registering in <code>Start()</code> unless you have a specific order-of-execution reason.</li> <li>Early registration in <code>Awake()</code> ensures your handlers are ready before other components' <code>Start()</code> methods run.</li> </ul> <h2 id=1-scene-wide-events-untargeted>1) Scene-wide Events (Untargeted)<a class=headerlink href=#1-scene-wide-events-untargeted title="Anchor link to this section">&para;</a></h2> <p>Use untargeted messages for global state changes that any system might care about. Keep messages small and immutable.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
2
- </span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
3
- </span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
4
- </span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>
5
- </span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=na>[DxUntargetedMessage]</span>
6
- </span><span id=__span-0-6><a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=na>[DxAutoConstructor]</span>
7
- </span><span id=__span-0-7><a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>SceneLoaded</span>
8
- </span><span id=__span-0-8><a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=p>{</span>
9
- </span><span id=__span-0-9><a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>buildIndex</span><span class=p>;</span>
10
- </span><span id=__span-0-10><a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>}</span>
11
- </span><span id=__span-0-11><a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a>
12
- </span><span id=__span-0-12><a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=c1>// Sender</span>
13
- </span><span id=__span-0-13><a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=kt>var</span><span class=w> </span><span class=n>evt</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>SceneLoaded</span><span class=p>(</span><span class=n>UnityEngine</span><span class=p>.</span><span class=n>SceneManagement</span><span class=p>.</span><span class=n>SceneManager</span><span class=p>.</span><span class=n>GetActiveScene</span><span class=p>().</span><span class=n>buildIndex</span><span class=p>);</span>
14
- </span><span id=__span-0-14><a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=n>evt</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span>
15
- </span><span id=__span-0-15><a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a>
16
- </span><span id=__span-0-16><a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a><span class=c1>// Listener</span>
17
- </span><span id=__span-0-17><a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>SceneLoaded</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnSceneLoaded</span><span class=p>);</span>
18
- </span><span id=__span-0-18><a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a><span class=k>void</span><span class=w> </span><span class=nf>OnSceneLoaded</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>SceneLoaded</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>RefreshUI</span><span class=p>();</span>
19
- </span></code></pre></div> <h2 id=2-directed-commands-targeted>2) Directed Commands (Targeted)<a class=headerlink href=#2-directed-commands-targeted title="Anchor link to this section">&para;</a></h2> <p>Target a specific <code>GameObject</code>/<code>Component</code> when you want direct control.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
20
- </span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
21
- </span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
22
- </span><span id=__span-1-4><a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a>
23
- </span><span id=__span-1-5><a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=na>[DxTargetedMessage]</span>
24
- </span><span id=__span-1-6><a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=na>[DxAutoConstructor]</span>
25
- </span><span id=__span-1-7><a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>Heal</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
26
- </span><span id=__span-1-8><a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a>
27
- </span><span id=__span-1-9><a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a><span class=c1>// Sender</span>
28
- </span><span id=__span-1-10><a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a><span class=kt>var</span><span class=w> </span><span class=n>heal</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>Heal</span><span class=p>(</span><span class=mi>10</span><span class=p>);</span>
29
- </span><span id=__span-1-11><a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a><span class=n>heal</span><span class=p>.</span><span class=n>EmitComponentTargeted</span><span class=p>(</span><span class=k>this</span><span class=p>);</span>
30
- </span><span id=__span-1-12><a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a>
31
- </span><span id=__span-1-13><a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a><span class=c1>// Listener (on the hero)</span>
32
- </span><span id=__span-1-14><a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterComponentTargeted</span><span class=o>&lt;</span><span class=n>Heal</span><span class=o>&gt;</span><span class=p>(</span><span class=k>this</span><span class=p>,</span><span class=w> </span><span class=n>OnHeal</span><span class=p>);</span>
33
- </span><span id=__span-1-15><a id=__codelineno-1-15 name=__codelineno-1-15 href=#__codelineno-1-15></a><span class=k>void</span><span class=w> </span><span class=nf>OnHeal</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>Heal</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>ApplyHeal</span><span class=p>(</span><span class=n>m</span><span class=p>.</span><span class=n>amount</span><span class=p>);</span>
34
- </span></code></pre></div> <h2 id=3-observability-broadcast>3) Observability (Broadcast)<a class=headerlink href=#3-observability-broadcast title="Anchor link to this section">&para;</a></h2> <p>Broadcast from a source; any listener can observe.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
35
- </span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
36
- </span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
37
- </span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span><span class=w> </span><span class=c1>// InstanceId</span>
38
- </span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a>
39
- </span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=na>[DxBroadcastMessage]</span>
40
- </span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a><span class=na>[DxAutoConstructor]</span>
41
- </span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>TookDamage</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
42
- </span><span id=__span-2-9><a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a>
43
- </span><span id=__span-2-10><a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a><span class=c1>// Sender</span>
44
- </span><span id=__span-2-11><a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a><span class=kt>var</span><span class=w> </span><span class=n>hit</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>TookDamage</span><span class=p>(</span><span class=mi>5</span><span class=p>);</span>
45
- </span><span id=__span-2-12><a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a><span class=n>hit</span><span class=p>.</span><span class=n>EmitGameObjectBroadcast</span><span class=p>(</span><span class=n>enemyGO</span><span class=p>);</span>
46
- </span><span id=__span-2-13><a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a>
47
- </span><span id=__span-2-14><a id=__codelineno-2-14 name=__codelineno-2-14 href=#__codelineno-2-14></a><span class=c1>// Listener: observe every source</span>
48
- </span><span id=__span-2-15><a id=__codelineno-2-15 name=__codelineno-2-15 href=#__codelineno-2-15></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>TookDamage</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnAnyTookDamage</span><span class=p>);</span>
49
- </span><span id=__span-2-16><a id=__codelineno-2-16 name=__codelineno-2-16 href=#__codelineno-2-16></a><span class=k>void</span><span class=w> </span><span class=nf>OnAnyTookDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>src</span><span class=p>,</span><span class=w> </span><span class=n>TookDamage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Log</span><span class=p>(</span><span class=n>src</span><span class=p>,</span><span class=w> </span><span class=n>m</span><span class=p>);</span>
50
- </span></code></pre></div> <h2 id=4-validation-and-normalization-interceptors>4) Validation and Normalization (Interceptors)<a class=headerlink href=#4-validation-and-normalization-interceptors title="Anchor link to this section">&para;</a></h2> <p>Use interceptors to enforce rules before handlers run.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span><span class=w> </span><span class=c1>// MessageHandler</span>
51
- </span><span id=__span-3-2><a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a>
52
- </span><span id=__span-3-3><a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=kt>var</span><span class=w> </span><span class=n>bus</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>MessageHandler</span><span class=p>.</span><span class=n>MessageBus</span><span class=p>;</span>
53
- </span><span id=__span-3-4><a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterBroadcastInterceptor</span><span class=o>&lt;</span><span class=n>TookDamage</span><span class=o>&gt;</span><span class=p>((</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>TookDamage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span>
54
- </span><span id=__span-3-5><a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=p>{</span>
55
- </span><span id=__span-3-6><a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>m</span><span class=p>.</span><span class=n>amount</span><span class=w> </span><span class=o>&lt;=</span><span class=w> </span><span class=mi>0</span><span class=p>)</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>false</span><span class=p>;</span><span class=w> </span><span class=c1>// cancel</span>
56
- </span><span id=__span-3-7><a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=w> </span><span class=n>m</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>TookDamage</span><span class=p>(</span><span class=n>Math</span><span class=p>.</span><span class=n>Min</span><span class=p>(</span><span class=n>m</span><span class=p>.</span><span class=n>amount</span><span class=p>,</span><span class=w> </span><span class=mi>999</span><span class=p>));</span><span class=w> </span><span class=c1>// clamp</span>
57
- </span><span id=__span-3-8><a id=__codelineno-3-8 name=__codelineno-3-8 href=#__codelineno-3-8></a><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>true</span><span class=p>;</span>
58
- </span><span id=__span-3-9><a id=__codelineno-3-9 name=__codelineno-3-9 href=#__codelineno-3-9></a><span class=p>},</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>0</span><span class=p>);</span>
59
- </span></code></pre></div> <h2 id=5-analyticslogging-post-processors>5) Analytics/Logging (Post-Processors)<a class=headerlink href=#5-analyticslogging-post-processors title="Anchor link to this section">&para;</a></h2> <p>Post-processors run after handlers—ideal for metrics.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterUntargetedPostProcessor</span><span class=o>&lt;</span><span class=n>SceneLoaded</span><span class=o>&gt;</span><span class=p>((</span><span class=k>ref</span><span class=w> </span><span class=n>SceneLoaded</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Metrics</span><span class=p>.</span><span class=n>TrackScene</span><span class=p>(</span><span class=n>m</span><span class=p>.</span><span class=n>buildIndex</span><span class=p>));</span>
60
- </span></code></pre></div> <h2 id=6-local-bus-islands>6) Local Bus Islands<a class=headerlink href=#6-local-bus-islands title="Anchor link to this section">&para;</a></h2> <p><code>MessageHandler.MessageBus</code> is the global bus. For isolation, use your own <code>MessageBus</code> instance and pass it to the token factory.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span>
61
- </span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.MessageBus</span><span class=p>;</span>
62
- </span><span id=__span-5-3><a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a>
63
- </span><span id=__span-5-4><a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a><span class=kt>var</span><span class=w> </span><span class=n>localBus</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>MessageBus</span><span class=p>();</span>
64
- </span><span id=__span-5-5><a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a><span class=kt>var</span><span class=w> </span><span class=n>token</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>MessageRegistrationToken</span><span class=p>.</span><span class=n>Create</span><span class=p>(</span><span class=n>handler</span><span class=p>,</span><span class=w> </span><span class=n>localBus</span><span class=p>);</span>
65
- </span></code></pre></div> <h2 id=7-lifecycle-pattern-in-unity>7) Lifecycle Pattern in Unity<a class=headerlink href=#7-lifecycle-pattern-in-unity title="Anchor link to this section">&para;</a></h2> <ul> <li><strong>Stage registrations in <code>Awake()</code></strong> (preferred) or <code>Start()</code> (only if order-dependent).</li> <li>Call <code>token.Enable()</code> in <code>OnEnable</code> and <code>token.Disable()</code> in <code>OnDisable</code>.</li> <li>Use <code>MessageAwareComponent</code> to avoid boilerplate—it handles all of this automatically.</li> </ul> <p>Why Awake over Start?</p> <ul> <li><code>Awake()</code> runs before any <code>Start()</code> methods, ensuring your handlers are ready early.</li> <li>Other components may emit messages in their <code>Start()</code> methods—registering in <code>Awake()</code> ensures you don't miss them.</li> <li><code>MessageAwareComponent</code> automatically calls <code>RegisterMessageHandlers()</code> in <code>Awake()</code>, following this best practice.</li> </ul> <p>Side‑by‑side: lifecycle</p> <p>Before</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a><span class=k>void</span><span class=w> </span><span class=nf>Awake</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* register */</span><span class=w> </span><span class=p>}</span>
66
- </span><span id=__span-6-2><a id=__codelineno-6-2 name=__codelineno-6-2 href=#__codelineno-6-2></a><span class=k>void</span><span class=w> </span><span class=nf>OnDestroy</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* maybe unregister (often forgotten) */</span><span class=w> </span><span class=p>}</span>
67
- </span></code></pre></div> <p>After (token)</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1 href=#__codelineno-7-1></a><span class=k>void</span><span class=w> </span><span class=nf>Awake</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* stage registrations - PREFERRED */</span><span class=w> </span><span class=p>}</span>
68
- </span><span id=__span-7-2><a id=__codelineno-7-2 name=__codelineno-7-2 href=#__codelineno-7-2></a><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>Enable</span><span class=p>();</span><span class=w> </span><span class=p>}</span>
69
- </span><span id=__span-7-3><a id=__codelineno-7-3 name=__codelineno-7-3 href=#__codelineno-7-3></a><span class=k>void</span><span class=w> </span><span class=nf>OnDisable</span><span class=p>()</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>Disable</span><span class=p>();</span><span class=w> </span><span class=p>}</span>
70
- </span></code></pre></div> <h2 id=8-cross-scene-messaging>8) Cross-Scene Messaging<a class=headerlink href=#8-cross-scene-messaging title="Anchor link to this section">&para;</a></h2> <p>Untargeted messages flow anywhere; targeted/broadcast require a valid <code>InstanceId</code>. For cross-scene, ensure the target/source object exists when you emit.</p> <h2 id=9-bridging-legacy-unity-messaging>9) Bridging Legacy Unity Messaging<a class=headerlink href=#9-bridging-legacy-unity-messaging title="Anchor link to this section">&para;</a></h2> <p><code>ReflexiveMessage</code> mirrors <code>SendMessage*</code> patterns but keeps you in the bus pipeline.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1 href=#__codelineno-8-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span>
71
- </span><span id=__span-8-2><a id=__codelineno-8-2 name=__codelineno-8-2 href=#__codelineno-8-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
72
- </span><span id=__span-8-3><a id=__codelineno-8-3 name=__codelineno-8-3 href=#__codelineno-8-3></a>
73
- </span><span id=__span-8-4><a id=__codelineno-8-4 name=__codelineno-8-4 href=#__codelineno-8-4></a><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>ReflexiveMessage</span><span class=p>(</span><span class=s>&quot;OnHit&quot;</span><span class=p>,</span><span class=w> </span><span class=n>ReflexiveSendMode</span><span class=p>.</span><span class=n>Upwards</span><span class=p>,</span><span class=w> </span><span class=mi>10</span><span class=p>);</span>
74
- </span><span id=__span-8-5><a id=__codelineno-8-5 name=__codelineno-8-5 href=#__codelineno-8-5></a><span class=n>msg</span><span class=p>.</span><span class=n>EmitGameObjectTargeted</span><span class=p>(</span><span class=n>someGameObject</span><span class=p>);</span>
75
- </span></code></pre></div> <h2 id=10-global-accept-all-handlers>10) Global Accept-All Handlers<a class=headerlink href=#10-global-accept-all-handlers title="Anchor link to this section">&para;</a></h2> <p>Use when building tools or inspectors that want to observe everything.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1 href=#__codelineno-9-1></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>token</span><span class=p>.</span><span class=n>RegisterGlobalAcceptAll</span><span class=p>(</span>
76
- </span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2 href=#__codelineno-9-2></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>IUntargetedMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Untargeted {m.MessageType}&quot;</span><span class=p>),</span>
77
- </span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3 href=#__codelineno-9-3></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>target</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>ITargetedMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Targeted {m.MessageType} to {target}&quot;</span><span class=p>),</span>
78
- </span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4 href=#__codelineno-9-4></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>IBroadcastMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;Broadcast {m.MessageType} from {source}&quot;</span><span class=p>)</span>
79
- </span><span id=__span-9-5><a id=__codelineno-9-5 name=__codelineno-9-5 href=#__codelineno-9-5></a><span class=p>);</span>
80
- </span><span id=__span-9-6><a id=__codelineno-9-6 name=__codelineno-9-6 href=#__codelineno-9-6></a>
81
- </span><span id=__span-9-7><a id=__codelineno-9-7 name=__codelineno-9-7 href=#__codelineno-9-7></a><span class=n>Do</span><span class=err>’</span><span class=n>s</span>
82
- </span><span id=__span-9-8><a id=__codelineno-9-8 name=__codelineno-9-8 href=#__codelineno-9-8></a>
83
- </span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9 href=#__codelineno-9-9></a><span class=o>-</span><span class=w> </span><span class=n>Use</span><span class=w> </span><span class=n>global</span><span class=w> </span><span class=n>accept</span><span class=err>‑</span><span class=n>all</span><span class=w> </span><span class=k>in</span><span class=w> </span><span class=n>tooling</span><span class=w> </span><span class=k>and</span><span class=w> </span><span class=n>debug</span><span class=w> </span><span class=n>inspectors</span><span class=p>.</span>
84
- </span><span id=__span-9-10><a id=__codelineno-9-10 name=__codelineno-9-10 href=#__codelineno-9-10></a><span class=o>-</span><span class=w> </span><span class=n>Prefer</span><span class=w> </span><span class=n>specific</span><span class=w> </span><span class=n>registrations</span><span class=w> </span><span class=k>for</span><span class=w> </span><span class=n>gameplay</span><span class=w> </span><span class=n>code</span><span class=w> </span><span class=n>to</span><span class=w> </span><span class=n>avoid</span><span class=w> </span><span class=n>surprises</span><span class=p>.</span>
85
- </span></code></pre></div> <h2 id=11-diagnostics-and-tuning>11) Diagnostics and Tuning<a class=headerlink href=#11-diagnostics-and-tuning title="Anchor link to this section">&para;</a></h2> <ul> <li>Enable <code>IMessageBus.GlobalDiagnosticsMode</code> in Editor or per-token.</li> <li>Adjust <code>IMessageBus.GlobalMessageBufferSize</code> for deeper history (Editor settings UI provided).</li> <li>Wire <code>MessagingDebug.LogFunction</code> to Unity’s console to see warnings/errors.</li> </ul> <h2 id=12-testing>12) Testing<a class=headerlink href=#12-testing title="Anchor link to this section">&para;</a></h2> <ul> <li>Construct messages directly and emit via extension helpers.</li> <li>Use a local <code>MessageBus</code> per test to avoid global state.</li> <li>Wrap handlers to increment counters or assert payloads.</li> </ul> <h2 id=13-real-world-scale-beyond-toy-examples>13) Real-World Scale: Beyond Toy Examples<a class=headerlink href=#13-real-world-scale-beyond-toy-examples title="Anchor link to this section">&para;</a></h2> <p>Most documentation shows simple, small-scale examples. Here's how DxMessaging behaves at production scale.</p> <h3 id=pattern-managing-100-combat-entities>Pattern: Managing 100+ Combat Entities<a class=headerlink href=#pattern-managing-100-combat-entities title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Track damage, healing, status effects for a large battlefield without performance collapse.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-10-1><a id=__codelineno-10-1 name=__codelineno-10-1 href=#__codelineno-10-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
86
- </span><span id=__span-10-2><a id=__codelineno-10-2 name=__codelineno-10-2 href=#__codelineno-10-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
87
- </span><span id=__span-10-3><a id=__codelineno-10-3 name=__codelineno-10-3 href=#__codelineno-10-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
88
- </span><span id=__span-10-4><a id=__codelineno-10-4 name=__codelineno-10-4 href=#__codelineno-10-4></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core</span><span class=p>;</span>
89
- </span><span id=__span-10-5><a id=__codelineno-10-5 name=__codelineno-10-5 href=#__codelineno-10-5></a>
90
- </span><span id=__span-10-6><a id=__codelineno-10-6 name=__codelineno-10-6 href=#__codelineno-10-6></a><span class=c1>// Messages</span>
91
- </span><span id=__span-10-7><a id=__codelineno-10-7 name=__codelineno-10-7 href=#__codelineno-10-7></a><span class=na>[DxBroadcastMessage]</span>
92
- </span><span id=__span-10-8><a id=__codelineno-10-8 name=__codelineno-10-8 href=#__codelineno-10-8></a><span class=na>[DxAutoConstructor]</span>
93
- </span><span id=__span-10-9><a id=__codelineno-10-9 name=__codelineno-10-9 href=#__codelineno-10-9></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>EntityDamaged</span><span class=w> </span><span class=p>{</span>
94
- </span><span id=__span-10-10><a id=__codelineno-10-10 name=__codelineno-10-10 href=#__codelineno-10-10></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
95
- </span><span id=__span-10-11><a id=__codelineno-10-11 name=__codelineno-10-11 href=#__codelineno-10-11></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=n>damageType</span><span class=p>;</span>
96
- </span><span id=__span-10-12><a id=__codelineno-10-12 name=__codelineno-10-12 href=#__codelineno-10-12></a><span class=p>}</span>
97
- </span><span id=__span-10-13><a id=__codelineno-10-13 name=__codelineno-10-13 href=#__codelineno-10-13></a>
98
- </span><span id=__span-10-14><a id=__codelineno-10-14 name=__codelineno-10-14 href=#__codelineno-10-14></a><span class=na>[DxBroadcastMessage]</span>
99
- </span><span id=__span-10-15><a id=__codelineno-10-15 name=__codelineno-10-15 href=#__codelineno-10-15></a><span class=na>[DxAutoConstructor]</span>
100
- </span><span id=__span-10-16><a id=__codelineno-10-16 name=__codelineno-10-16 href=#__codelineno-10-16></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>EntityHealed</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
101
- </span><span id=__span-10-17><a id=__codelineno-10-17 name=__codelineno-10-17 href=#__codelineno-10-17></a>
102
- </span><span id=__span-10-18><a id=__codelineno-10-18 name=__codelineno-10-18 href=#__codelineno-10-18></a><span class=c1>// Entity: Each of 100+ entities emits events</span>
103
- </span><span id=__span-10-19><a id=__codelineno-10-19 name=__codelineno-10-19 href=#__codelineno-10-19></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>CombatEntity</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
104
- </span><span id=__span-10-20><a id=__codelineno-10-20 name=__codelineno-10-20 href=#__codelineno-10-20></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>,</span><span class=w> </span><span class=kt>string</span><span class=w> </span><span class=n>type</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
105
- </span><span id=__span-10-21><a id=__codelineno-10-21 name=__codelineno-10-21 href=#__codelineno-10-21></a><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
106
- </span><span id=__span-10-22><a id=__codelineno-10-22 name=__codelineno-10-22 href=#__codelineno-10-22></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>EntityDamaged</span><span class=p>(</span><span class=n>amount</span><span class=p>,</span><span class=w> </span><span class=n>type</span><span class=p>);</span>
107
- </span><span id=__span-10-23><a id=__codelineno-10-23 name=__codelineno-10-23 href=#__codelineno-10-23></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>EmitGameObjectBroadcast</span><span class=p>(</span><span class=n>gameObject</span><span class=p>);</span>
108
- </span><span id=__span-10-24><a id=__codelineno-10-24 name=__codelineno-10-24 href=#__codelineno-10-24></a><span class=w> </span><span class=p>}</span>
109
- </span><span id=__span-10-25><a id=__codelineno-10-25 name=__codelineno-10-25 href=#__codelineno-10-25></a><span class=p>}</span>
110
- </span><span id=__span-10-26><a id=__codelineno-10-26 name=__codelineno-10-26 href=#__codelineno-10-26></a>
111
- </span><span id=__span-10-27><a id=__codelineno-10-27 name=__codelineno-10-27 href=#__codelineno-10-27></a><span class=c1>// Combat UI: Tracks specific enemy (targeted observation)</span>
112
- </span><span id=__span-10-28><a id=__codelineno-10-28 name=__codelineno-10-28 href=#__codelineno-10-28></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>EnemyHealthBar</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
113
- </span><span id=__span-10-29><a id=__codelineno-10-29 name=__codelineno-10-29 href=#__codelineno-10-29></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>GameObject</span><span class=w> </span><span class=n>trackedEnemy</span><span class=p>;</span>
114
- </span><span id=__span-10-30><a id=__codelineno-10-30 name=__codelineno-10-30 href=#__codelineno-10-30></a>
115
- </span><span id=__span-10-31><a id=__codelineno-10-31 name=__codelineno-10-31 href=#__codelineno-10-31></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
116
- </span><span id=__span-10-32><a id=__codelineno-10-32 name=__codelineno-10-32 href=#__codelineno-10-32></a><span class=w> </span><span class=c1>// Only listens to ONE enemy, not all 100</span>
117
- </span><span id=__span-10-33><a id=__codelineno-10-33 name=__codelineno-10-33 href=#__codelineno-10-33></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterGameObjectBroadcast</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>trackedEnemy</span><span class=p>,</span><span class=w> </span><span class=n>OnDamaged</span><span class=p>);</span>
118
- </span><span id=__span-10-34><a id=__codelineno-10-34 name=__codelineno-10-34 href=#__codelineno-10-34></a><span class=w> </span><span class=p>}</span>
119
- </span><span id=__span-10-35><a id=__codelineno-10-35 name=__codelineno-10-35 href=#__codelineno-10-35></a>
120
- </span><span id=__span-10-36><a id=__codelineno-10-36 name=__codelineno-10-36 href=#__codelineno-10-36></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDamaged</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateBar</span><span class=p>();</span>
121
- </span><span id=__span-10-37><a id=__codelineno-10-37 name=__codelineno-10-37 href=#__codelineno-10-37></a><span class=p>}</span>
122
- </span><span id=__span-10-38><a id=__codelineno-10-38 name=__codelineno-10-38 href=#__codelineno-10-38></a>
123
- </span><span id=__span-10-39><a id=__codelineno-10-39 name=__codelineno-10-39 href=#__codelineno-10-39></a><span class=c1>// Analytics: Observes ALL entities (global observation)</span>
124
- </span><span id=__span-10-40><a id=__codelineno-10-40 name=__codelineno-10-40 href=#__codelineno-10-40></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>CombatAnalytics</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
125
- </span><span id=__span-10-41><a id=__codelineno-10-41 name=__codelineno-10-41 href=#__codelineno-10-41></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=n>Dictionary</span><span class=o>&lt;</span><span class=n>InstanceId</span><span class=p>,</span><span class=w> </span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>totalDamageByEntity</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=p>();</span>
126
- </span><span id=__span-10-42><a id=__codelineno-10-42 name=__codelineno-10-42 href=#__codelineno-10-42></a>
127
- </span><span id=__span-10-43><a id=__codelineno-10-43 name=__codelineno-10-43 href=#__codelineno-10-43></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
128
- </span><span id=__span-10-44><a id=__codelineno-10-44 name=__codelineno-10-44 href=#__codelineno-10-44></a><span class=w> </span><span class=c1>// Listens to all 100+ entities with ONE registration</span>
129
- </span><span id=__span-10-45><a id=__codelineno-10-45 name=__codelineno-10-45 href=#__codelineno-10-45></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnAnyDamage</span><span class=p>);</span>
130
- </span><span id=__span-10-46><a id=__codelineno-10-46 name=__codelineno-10-46 href=#__codelineno-10-46></a><span class=w> </span><span class=p>}</span>
131
- </span><span id=__span-10-47><a id=__codelineno-10-47 name=__codelineno-10-47 href=#__codelineno-10-47></a>
132
- </span><span id=__span-10-48><a id=__codelineno-10-48 name=__codelineno-10-48 href=#__codelineno-10-48></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnAnyDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
133
- </span><span id=__span-10-49><a id=__codelineno-10-49 name=__codelineno-10-49 href=#__codelineno-10-49></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=o>!</span><span class=n>totalDamageByEntity</span><span class=p>.</span><span class=n>ContainsKey</span><span class=p>(</span><span class=n>source</span><span class=p>))</span>
134
- </span><span id=__span-10-50><a id=__codelineno-10-50 name=__codelineno-10-50 href=#__codelineno-10-50></a><span class=w> </span><span class=n>totalDamageByEntity</span><span class=p>[</span><span class=n>source</span><span class=p>]</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
135
- </span><span id=__span-10-51><a id=__codelineno-10-51 name=__codelineno-10-51 href=#__codelineno-10-51></a><span class=w> </span><span class=n>totalDamageByEntity</span><span class=p>[</span><span class=n>source</span><span class=p>]</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=p>;</span>
136
- </span><span id=__span-10-52><a id=__codelineno-10-52 name=__codelineno-10-52 href=#__codelineno-10-52></a><span class=w> </span><span class=p>}</span>
137
- </span><span id=__span-10-53><a id=__codelineno-10-53 name=__codelineno-10-53 href=#__codelineno-10-53></a><span class=p>}</span>
138
- </span></code></pre></div> <h4 id=scale-characteristics>Scale characteristics<a class=headerlink href=#scale-characteristics title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Each entity broadcasts ~10-50 messages/second → No GC allocations (struct messages)</li> <li>✅ Targeted listeners (health bars) only receive relevant messages → O(1) lookup</li> <li>✅ Global listeners (analytics) receive all messages → Single handler, not N handlers</li> <li>✅ Adding/removing entities doesn't break registrations (no manual wiring)</li> </ul> <h5 id=performance-notes>Performance notes<a class=headerlink href=#performance-notes title="Anchor link to this section">&para;</a></h5> <ul> <li>Disable diagnostics in production (<code>IMessageBus.GlobalDiagnosticsMode = false</code>)</li> <li>Use <code>RegisterBroadcastWithoutSource</code> sparingly (it's called for every emit)</li> <li>Profile with Unity Profiler to find hotspots</li> </ul> <h3 id=pattern-cross-scene-persistent-systems>Pattern: Cross-Scene Persistent Systems<a class=headerlink href=#pattern-cross-scene-persistent-systems title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Maintain event flow across scene loads (achievements, save system, analytics).</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-11-1><a id=__codelineno-11-1 name=__codelineno-11-1 href=#__codelineno-11-1></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
139
- </span><span id=__span-11-2><a id=__codelineno-11-2 name=__codelineno-11-2 href=#__codelineno-11-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Unity</span><span class=p>;</span>
140
- </span><span id=__span-11-3><a id=__codelineno-11-3 name=__codelineno-11-3 href=#__codelineno-11-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
141
- </span><span id=__span-11-4><a id=__codelineno-11-4 name=__codelineno-11-4 href=#__codelineno-11-4></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
142
- </span><span id=__span-11-5><a id=__codelineno-11-5 name=__codelineno-11-5 href=#__codelineno-11-5></a>
143
- </span><span id=__span-11-6><a id=__codelineno-11-6 name=__codelineno-11-6 href=#__codelineno-11-6></a><span class=c1>// Persistent singleton that survives scene loads</span>
144
- </span><span id=__span-11-7><a id=__codelineno-11-7 name=__codelineno-11-7 href=#__codelineno-11-7></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>PersistentAchievementSystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
145
- </span><span id=__span-11-8><a id=__codelineno-11-8 name=__codelineno-11-8 href=#__codelineno-11-8></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=k>static</span><span class=w> </span><span class=n>PersistentAchievementSystem</span><span class=w> </span><span class=n>instance</span><span class=p>;</span>
146
- </span><span id=__span-11-9><a id=__codelineno-11-9 name=__codelineno-11-9 href=#__codelineno-11-9></a>
147
- </span><span id=__span-11-10><a id=__codelineno-11-10 name=__codelineno-11-10 href=#__codelineno-11-10></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Awake</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
148
- </span><span id=__span-11-11><a id=__codelineno-11-11 name=__codelineno-11-11 href=#__codelineno-11-11></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>instance</span><span class=w> </span><span class=o>!=</span><span class=w> </span><span class=k>null</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
149
- </span><span id=__span-11-12><a id=__codelineno-11-12 name=__codelineno-11-12 href=#__codelineno-11-12></a><span class=w> </span><span class=n>Destroy</span><span class=p>(</span><span class=n>gameObject</span><span class=p>);</span>
150
- </span><span id=__span-11-13><a id=__codelineno-11-13 name=__codelineno-11-13 href=#__codelineno-11-13></a><span class=w> </span><span class=k>return</span><span class=p>;</span>
151
- </span><span id=__span-11-14><a id=__codelineno-11-14 name=__codelineno-11-14 href=#__codelineno-11-14></a><span class=w> </span><span class=p>}</span>
152
- </span><span id=__span-11-15><a id=__codelineno-11-15 name=__codelineno-11-15 href=#__codelineno-11-15></a><span class=w> </span><span class=n>instance</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>this</span><span class=p>;</span>
153
- </span><span id=__span-11-16><a id=__codelineno-11-16 name=__codelineno-11-16 href=#__codelineno-11-16></a><span class=w> </span><span class=n>DontDestroyOnLoad</span><span class=p>(</span><span class=n>gameObject</span><span class=p>);</span>
154
- </span><span id=__span-11-17><a id=__codelineno-11-17 name=__codelineno-11-17 href=#__codelineno-11-17></a><span class=w> </span><span class=p>}</span>
155
- </span><span id=__span-11-18><a id=__codelineno-11-18 name=__codelineno-11-18 href=#__codelineno-11-18></a>
156
- </span><span id=__span-11-19><a id=__codelineno-11-19 name=__codelineno-11-19 href=#__codelineno-11-19></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
157
- </span><span id=__span-11-20><a id=__codelineno-11-20 name=__codelineno-11-20 href=#__codelineno-11-20></a><span class=w> </span><span class=c1>// Listen to ALL broadcasts from ANY scene</span>
158
- </span><span id=__span-11-21><a id=__codelineno-11-21 name=__codelineno-11-21 href=#__codelineno-11-21></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnAnyDamage</span><span class=p>);</span>
159
- </span><span id=__span-11-22><a id=__codelineno-11-22 name=__codelineno-11-22 href=#__codelineno-11-22></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>LevelCompleted</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnLevelComplete</span><span class=p>);</span>
160
- </span><span id=__span-11-23><a id=__codelineno-11-23 name=__codelineno-11-23 href=#__codelineno-11-23></a><span class=w> </span><span class=p>}</span>
161
- </span><span id=__span-11-24><a id=__codelineno-11-24 name=__codelineno-11-24 href=#__codelineno-11-24></a>
162
- </span><span id=__span-11-25><a id=__codelineno-11-25 name=__codelineno-11-25 href=#__codelineno-11-25></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnAnyDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>src</span><span class=p>,</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
163
- </span><span id=__span-11-26><a id=__codelineno-11-26 name=__codelineno-11-26 href=#__codelineno-11-26></a><span class=w> </span><span class=n>totalDamage</span><span class=w> </span><span class=o>+=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=p>;</span>
164
- </span><span id=__span-11-27><a id=__codelineno-11-27 name=__codelineno-11-27 href=#__codelineno-11-27></a><span class=w> </span><span class=n>CheckAchievements</span><span class=p>();</span>
165
- </span><span id=__span-11-28><a id=__codelineno-11-28 name=__codelineno-11-28 href=#__codelineno-11-28></a><span class=w> </span><span class=p>}</span>
166
- </span><span id=__span-11-29><a id=__codelineno-11-29 name=__codelineno-11-29 href=#__codelineno-11-29></a>
167
- </span><span id=__span-11-30><a id=__codelineno-11-30 name=__codelineno-11-30 href=#__codelineno-11-30></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnLevelComplete</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>LevelCompleted</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
168
- </span><span id=__span-11-31><a id=__codelineno-11-31 name=__codelineno-11-31 href=#__codelineno-11-31></a><span class=w> </span><span class=n>UnlockAchievement</span><span class=p>(</span><span class=s>$&quot;Complete_Level_{msg.levelIndex}&quot;</span><span class=p>);</span>
169
- </span><span id=__span-11-32><a id=__codelineno-11-32 name=__codelineno-11-32 href=#__codelineno-11-32></a><span class=w> </span><span class=p>}</span>
170
- </span><span id=__span-11-33><a id=__codelineno-11-33 name=__codelineno-11-33 href=#__codelineno-11-33></a><span class=p>}</span>
171
- </span><span id=__span-11-34><a id=__codelineno-11-34 name=__codelineno-11-34 href=#__codelineno-11-34></a>
172
- </span><span id=__span-11-35><a id=__codelineno-11-35 name=__codelineno-11-35 href=#__codelineno-11-35></a><span class=c1>// Scene-specific objects emit messages normally</span>
173
- </span><span id=__span-11-36><a id=__codelineno-11-36 name=__codelineno-11-36 href=#__codelineno-11-36></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Boss</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
174
- </span><span id=__span-11-37><a id=__codelineno-11-37 name=__codelineno-11-37 href=#__codelineno-11-37></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Die</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
175
- </span><span id=__span-11-38><a id=__codelineno-11-38 name=__codelineno-11-38 href=#__codelineno-11-38></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>BossDefeated</span><span class=p>(</span><span class=n>bossName</span><span class=p>);</span>
176
- </span><span id=__span-11-39><a id=__codelineno-11-39 name=__codelineno-11-39 href=#__codelineno-11-39></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>EmitGameObjectBroadcast</span><span class=p>(</span><span class=n>gameObject</span><span class=p>);</span>
177
- </span><span id=__span-11-40><a id=__codelineno-11-40 name=__codelineno-11-40 href=#__codelineno-11-40></a><span class=w> </span><span class=c1>// PersistentAchievementSystem hears this even though it&#39;s in DontDestroyOnLoad</span>
178
- </span><span id=__span-11-41><a id=__codelineno-11-41 name=__codelineno-11-41 href=#__codelineno-11-41></a><span class=w> </span><span class=p>}</span>
179
- </span><span id=__span-11-42><a id=__codelineno-11-42 name=__codelineno-11-42 href=#__codelineno-11-42></a><span class=p>}</span>
180
- </span></code></pre></div> <p><strong>Key insight:</strong> Persistent listeners (<code>DontDestroyOnLoad</code>) stay registered across scenes. Scene-specific emitters come/go, but the observer remains.</p> <p><strong>Gotcha:</strong> If you emit <code>Targeted</code> or <code>Broadcast</code> messages, ensure the target/source <code>InstanceId</code> is still valid after scene loads. For cross-scene communication, prefer <code>Untargeted</code> messages.</p> <h3 id=pattern-large-scale-ui-system-20-panels>Pattern: Large-Scale UI System (20+ Panels)<a class=headerlink href=#pattern-large-scale-ui-system-20-panels title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Coordinate 20+ UI panels reacting to game state without tight coupling.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-12-1><a id=__codelineno-12-1 name=__codelineno-12-1 href=#__codelineno-12-1></a><span class=c1>// Game state messages (global)</span>
181
- </span><span id=__span-12-2><a id=__codelineno-12-2 name=__codelineno-12-2 href=#__codelineno-12-2></a><span class=na>[DxUntargetedMessage]</span>
182
- </span><span id=__span-12-3><a id=__codelineno-12-3 name=__codelineno-12-3 href=#__codelineno-12-3></a><span class=na>[DxAutoConstructor]</span>
183
- </span><span id=__span-12-4><a id=__codelineno-12-4 name=__codelineno-12-4 href=#__codelineno-12-4></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>PlayerStatsChanged</span><span class=w> </span><span class=p>{</span>
184
- </span><span id=__span-12-5><a id=__codelineno-12-5 name=__codelineno-12-5 href=#__codelineno-12-5></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=p>;</span>
185
- </span><span id=__span-12-6><a id=__codelineno-12-6 name=__codelineno-12-6 href=#__codelineno-12-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>mana</span><span class=p>;</span>
186
- </span><span id=__span-12-7><a id=__codelineno-12-7 name=__codelineno-12-7 href=#__codelineno-12-7></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>gold</span><span class=p>;</span>
187
- </span><span id=__span-12-8><a id=__codelineno-12-8 name=__codelineno-12-8 href=#__codelineno-12-8></a><span class=p>}</span>
188
- </span><span id=__span-12-9><a id=__codelineno-12-9 name=__codelineno-12-9 href=#__codelineno-12-9></a>
189
- </span><span id=__span-12-10><a id=__codelineno-12-10 name=__codelineno-12-10 href=#__codelineno-12-10></a><span class=na>[DxUntargetedMessage]</span>
190
- </span><span id=__span-12-11><a id=__codelineno-12-11 name=__codelineno-12-11 href=#__codelineno-12-11></a><span class=na>[DxAutoConstructor]</span>
191
- </span><span id=__span-12-12><a id=__codelineno-12-12 name=__codelineno-12-12 href=#__codelineno-12-12></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>InventoryChanged</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>itemCount</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
192
- </span><span id=__span-12-13><a id=__codelineno-12-13 name=__codelineno-12-13 href=#__codelineno-12-13></a>
193
- </span><span id=__span-12-14><a id=__codelineno-12-14 name=__codelineno-12-14 href=#__codelineno-12-14></a><span class=c1>// Each UI panel listens independently</span>
194
- </span><span id=__span-12-15><a id=__codelineno-12-15 name=__codelineno-12-15 href=#__codelineno-12-15></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>HealthPanel</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
195
- </span><span id=__span-12-16><a id=__codelineno-12-16 name=__codelineno-12-16 href=#__codelineno-12-16></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
196
- </span><span id=__span-12-17><a id=__codelineno-12-17 name=__codelineno-12-17 href=#__codelineno-12-17></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>PlayerStatsChanged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnStats</span><span class=p>);</span>
197
- </span><span id=__span-12-18><a id=__codelineno-12-18 name=__codelineno-12-18 href=#__codelineno-12-18></a><span class=w> </span><span class=p>}</span>
198
- </span><span id=__span-12-19><a id=__codelineno-12-19 name=__codelineno-12-19 href=#__codelineno-12-19></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnStats</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>PlayerStatsChanged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateHealth</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>health</span><span class=p>);</span>
199
- </span><span id=__span-12-20><a id=__codelineno-12-20 name=__codelineno-12-20 href=#__codelineno-12-20></a><span class=p>}</span>
200
- </span><span id=__span-12-21><a id=__codelineno-12-21 name=__codelineno-12-21 href=#__codelineno-12-21></a>
201
- </span><span id=__span-12-22><a id=__codelineno-12-22 name=__codelineno-12-22 href=#__codelineno-12-22></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>ManaPanel</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
202
- </span><span id=__span-12-23><a id=__codelineno-12-23 name=__codelineno-12-23 href=#__codelineno-12-23></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
203
- </span><span id=__span-12-24><a id=__codelineno-12-24 name=__codelineno-12-24 href=#__codelineno-12-24></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>PlayerStatsChanged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnStats</span><span class=p>);</span>
204
- </span><span id=__span-12-25><a id=__codelineno-12-25 name=__codelineno-12-25 href=#__codelineno-12-25></a><span class=w> </span><span class=p>}</span>
205
- </span><span id=__span-12-26><a id=__codelineno-12-26 name=__codelineno-12-26 href=#__codelineno-12-26></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnStats</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>PlayerStatsChanged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateMana</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>mana</span><span class=p>);</span>
206
- </span><span id=__span-12-27><a id=__codelineno-12-27 name=__codelineno-12-27 href=#__codelineno-12-27></a><span class=p>}</span>
207
- </span><span id=__span-12-28><a id=__codelineno-12-28 name=__codelineno-12-28 href=#__codelineno-12-28></a>
208
- </span><span id=__span-12-29><a id=__codelineno-12-29 name=__codelineno-12-29 href=#__codelineno-12-29></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GoldPanel</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
209
- </span><span id=__span-12-30><a id=__codelineno-12-30 name=__codelineno-12-30 href=#__codelineno-12-30></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
210
- </span><span id=__span-12-31><a id=__codelineno-12-31 name=__codelineno-12-31 href=#__codelineno-12-31></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>PlayerStatsChanged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnStats</span><span class=p>);</span>
211
- </span><span id=__span-12-32><a id=__codelineno-12-32 name=__codelineno-12-32 href=#__codelineno-12-32></a><span class=w> </span><span class=p>}</span>
212
- </span><span id=__span-12-33><a id=__codelineno-12-33 name=__codelineno-12-33 href=#__codelineno-12-33></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnStats</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>PlayerStatsChanged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateGold</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>gold</span><span class=p>);</span>
213
- </span><span id=__span-12-34><a id=__codelineno-12-34 name=__codelineno-12-34 href=#__codelineno-12-34></a><span class=p>}</span>
214
- </span><span id=__span-12-35><a id=__codelineno-12-35 name=__codelineno-12-35 href=#__codelineno-12-35></a>
215
- </span><span id=__span-12-36><a id=__codelineno-12-36 name=__codelineno-12-36 href=#__codelineno-12-36></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>InventoryPanel</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
216
- </span><span id=__span-12-37><a id=__codelineno-12-37 name=__codelineno-12-37 href=#__codelineno-12-37></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
217
- </span><span id=__span-12-38><a id=__codelineno-12-38 name=__codelineno-12-38 href=#__codelineno-12-38></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>InventoryChanged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnInventory</span><span class=p>);</span>
218
- </span><span id=__span-12-39><a id=__codelineno-12-39 name=__codelineno-12-39 href=#__codelineno-12-39></a><span class=w> </span><span class=p>}</span>
219
- </span><span id=__span-12-40><a id=__codelineno-12-40 name=__codelineno-12-40 href=#__codelineno-12-40></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnInventory</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InventoryChanged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>Refresh</span><span class=p>();</span>
220
- </span><span id=__span-12-41><a id=__codelineno-12-41 name=__codelineno-12-41 href=#__codelineno-12-41></a><span class=p>}</span>
221
- </span><span id=__span-12-42><a id=__codelineno-12-42 name=__codelineno-12-42 href=#__codelineno-12-42></a>
222
- </span><span id=__span-12-43><a id=__codelineno-12-43 name=__codelineno-12-43 href=#__codelineno-12-43></a><span class=c1>// Game systems emit once, all panels update</span>
223
- </span><span id=__span-12-44><a id=__codelineno-12-44 name=__codelineno-12-44 href=#__codelineno-12-44></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>PlayerStats</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span><span class=w> </span><span class=p>{</span>
224
- </span><span id=__span-12-45><a id=__codelineno-12-45 name=__codelineno-12-45 href=#__codelineno-12-45></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>UpdateStats</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
225
- </span><span id=__span-12-46><a id=__codelineno-12-46 name=__codelineno-12-46 href=#__codelineno-12-46></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>PlayerStatsChanged</span><span class=p>(</span><span class=n>health</span><span class=p>,</span><span class=w> </span><span class=n>mana</span><span class=p>,</span><span class=w> </span><span class=n>gold</span><span class=p>);</span>
226
- </span><span id=__span-12-47><a id=__codelineno-12-47 name=__codelineno-12-47 href=#__codelineno-12-47></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span><span class=w> </span><span class=c1>// All 3 panels update automatically</span>
227
- </span><span id=__span-12-48><a id=__codelineno-12-48 name=__codelineno-12-48 href=#__codelineno-12-48></a><span class=w> </span><span class=p>}</span>
228
- </span><span id=__span-12-49><a id=__codelineno-12-49 name=__codelineno-12-49 href=#__codelineno-12-49></a><span class=p>}</span>
229
- </span></code></pre></div> <h4 id=benefits-at-scale>Benefits at scale<a class=headerlink href=#benefits-at-scale title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ Add/remove panels without touching game logic</li> <li>✅ Panels can be enabled/disabled freely (tokens handle lifecycle)</li> <li>✅ Easy to add "observer panels" (e.g., debug overlays) without modifying existing code</li> </ul> <h5 id=anti-pattern-to-avoid>Anti-pattern to avoid<a class=headerlink href=#anti-pattern-to-avoid title="Anchor link to this section">&para;</a></h5> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-13-1><a id=__codelineno-13-1 name=__codelineno-13-1 href=#__codelineno-13-1></a><span class=c1>// ❌ DON&#39;T: Separate message per UI element (too granular)</span>
230
- </span><span id=__span-13-2><a id=__codelineno-13-2 name=__codelineno-13-2 href=#__codelineno-13-2></a><span class=na>[DxUntargetedMessage]</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>HealthChanged</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
231
- </span><span id=__span-13-3><a id=__codelineno-13-3 name=__codelineno-13-3 href=#__codelineno-13-3></a><span class=na>[DxUntargetedMessage]</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>ManaChanged</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>mana</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
232
- </span><span id=__span-13-4><a id=__codelineno-13-4 name=__codelineno-13-4 href=#__codelineno-13-4></a><span class=na>[DxUntargetedMessage]</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>GoldChanged</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>gold</span><span class=p>;</span><span class=w> </span><span class=p>}</span>
233
- </span><span id=__span-13-5><a id=__codelineno-13-5 name=__codelineno-13-5 href=#__codelineno-13-5></a><span class=c1>// This creates 3x message traffic and registration overhead</span>
234
- </span><span id=__span-13-6><a id=__codelineno-13-6 name=__codelineno-13-6 href=#__codelineno-13-6></a>
235
- </span><span id=__span-13-7><a id=__codelineno-13-7 name=__codelineno-13-7 href=#__codelineno-13-7></a><span class=c1>// ✅ DO: Batch related updates into one message</span>
236
- </span><span id=__span-13-8><a id=__codelineno-13-8 name=__codelineno-13-8 href=#__codelineno-13-8></a><span class=na>[DxUntargetedMessage]</span><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>PlayerStatsChanged</span><span class=w> </span><span class=p>{</span>
237
- </span><span id=__span-13-9><a id=__codelineno-13-9 name=__codelineno-13-9 href=#__codelineno-13-9></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>health</span><span class=p>;</span>
238
- </span><span id=__span-13-10><a id=__codelineno-13-10 name=__codelineno-13-10 href=#__codelineno-13-10></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>mana</span><span class=p>;</span>
239
- </span><span id=__span-13-11><a id=__codelineno-13-11 name=__codelineno-13-11 href=#__codelineno-13-11></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>gold</span><span class=p>;</span>
240
- </span><span id=__span-13-12><a id=__codelineno-13-12 name=__codelineno-13-12 href=#__codelineno-13-12></a><span class=p>}</span>
241
- </span></code></pre></div> <h3 id=pattern-priority-ordered-execution-for-complex-systems>Pattern: Priority-Ordered Execution for Complex Systems<a class=headerlink href=#pattern-priority-ordered-execution-for-complex-systems title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Ensure SaveSystem runs before SceneLoader, AudioSystem fades before UI transitions.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-14-1><a id=__codelineno-14-1 name=__codelineno-14-1 href=#__codelineno-14-1></a><span class=na>[DxUntargetedMessage]</span>
242
- </span><span id=__span-14-2><a id=__codelineno-14-2 name=__codelineno-14-2 href=#__codelineno-14-2></a><span class=na>[DxAutoConstructor]</span>
243
- </span><span id=__span-14-3><a id=__codelineno-14-3 name=__codelineno-14-3 href=#__codelineno-14-3></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>GameExit</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
244
- </span><span id=__span-14-4><a id=__codelineno-14-4 name=__codelineno-14-4 href=#__codelineno-14-4></a>
245
- </span><span id=__span-14-5><a id=__codelineno-14-5 name=__codelineno-14-5 href=#__codelineno-14-5></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>SaveSystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
246
- </span><span id=__span-14-6><a id=__codelineno-14-6 name=__codelineno-14-6 href=#__codelineno-14-6></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
247
- </span><span id=__span-14-7><a id=__codelineno-14-7 name=__codelineno-14-7 href=#__codelineno-14-7></a><span class=w> </span><span class=c1>// Priority 0 = runs FIRST</span>
248
- </span><span id=__span-14-8><a id=__codelineno-14-8 name=__codelineno-14-8 href=#__codelineno-14-8></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>GameExit</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnExit</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>0</span><span class=p>);</span>
249
- </span><span id=__span-14-9><a id=__codelineno-14-9 name=__codelineno-14-9 href=#__codelineno-14-9></a><span class=w> </span><span class=p>}</span>
250
- </span><span id=__span-14-10><a id=__codelineno-14-10 name=__codelineno-14-10 href=#__codelineno-14-10></a>
251
- </span><span id=__span-14-11><a id=__codelineno-14-11 name=__codelineno-14-11 href=#__codelineno-14-11></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnExit</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>GameExit</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
252
- </span><span id=__span-14-12><a id=__codelineno-14-12 name=__codelineno-14-12 href=#__codelineno-14-12></a><span class=w> </span><span class=n>SaveGame</span><span class=p>();</span><span class=w> </span><span class=c1>// Must complete before audio fades</span>
253
- </span><span id=__span-14-13><a id=__codelineno-14-13 name=__codelineno-14-13 href=#__codelineno-14-13></a><span class=w> </span><span class=p>}</span>
254
- </span><span id=__span-14-14><a id=__codelineno-14-14 name=__codelineno-14-14 href=#__codelineno-14-14></a><span class=p>}</span>
255
- </span><span id=__span-14-15><a id=__codelineno-14-15 name=__codelineno-14-15 href=#__codelineno-14-15></a>
256
- </span><span id=__span-14-16><a id=__codelineno-14-16 name=__codelineno-14-16 href=#__codelineno-14-16></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AudioSystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
257
- </span><span id=__span-14-17><a id=__codelineno-14-17 name=__codelineno-14-17 href=#__codelineno-14-17></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
258
- </span><span id=__span-14-18><a id=__codelineno-14-18 name=__codelineno-14-18 href=#__codelineno-14-18></a><span class=w> </span><span class=c1>// Priority 5 = runs AFTER SaveSystem</span>
259
- </span><span id=__span-14-19><a id=__codelineno-14-19 name=__codelineno-14-19 href=#__codelineno-14-19></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>GameExit</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnExit</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>5</span><span class=p>);</span>
260
- </span><span id=__span-14-20><a id=__codelineno-14-20 name=__codelineno-14-20 href=#__codelineno-14-20></a><span class=w> </span><span class=p>}</span>
261
- </span><span id=__span-14-21><a id=__codelineno-14-21 name=__codelineno-14-21 href=#__codelineno-14-21></a>
262
- </span><span id=__span-14-22><a id=__codelineno-14-22 name=__codelineno-14-22 href=#__codelineno-14-22></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnExit</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>GameExit</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
263
- </span><span id=__span-14-23><a id=__codelineno-14-23 name=__codelineno-14-23 href=#__codelineno-14-23></a><span class=w> </span><span class=n>FadeOutMusic</span><span class=p>();</span><span class=w> </span><span class=c1>// Runs after save</span>
264
- </span><span id=__span-14-24><a id=__codelineno-14-24 name=__codelineno-14-24 href=#__codelineno-14-24></a><span class=w> </span><span class=p>}</span>
265
- </span><span id=__span-14-25><a id=__codelineno-14-25 name=__codelineno-14-25 href=#__codelineno-14-25></a><span class=p>}</span>
266
- </span><span id=__span-14-26><a id=__codelineno-14-26 name=__codelineno-14-26 href=#__codelineno-14-26></a>
267
- </span><span id=__span-14-27><a id=__codelineno-14-27 name=__codelineno-14-27 href=#__codelineno-14-27></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>UISystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
268
- </span><span id=__span-14-28><a id=__codelineno-14-28 name=__codelineno-14-28 href=#__codelineno-14-28></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
269
- </span><span id=__span-14-29><a id=__codelineno-14-29 name=__codelineno-14-29 href=#__codelineno-14-29></a><span class=w> </span><span class=c1>// Priority 10 = runs LAST</span>
270
- </span><span id=__span-14-30><a id=__codelineno-14-30 name=__codelineno-14-30 href=#__codelineno-14-30></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>GameExit</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnExit</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>10</span><span class=p>);</span>
271
- </span><span id=__span-14-31><a id=__codelineno-14-31 name=__codelineno-14-31 href=#__codelineno-14-31></a><span class=w> </span><span class=p>}</span>
272
- </span><span id=__span-14-32><a id=__codelineno-14-32 name=__codelineno-14-32 href=#__codelineno-14-32></a>
273
- </span><span id=__span-14-33><a id=__codelineno-14-33 name=__codelineno-14-33 href=#__codelineno-14-33></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnExit</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>GameExit</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
274
- </span><span id=__span-14-34><a id=__codelineno-14-34 name=__codelineno-14-34 href=#__codelineno-14-34></a><span class=w> </span><span class=n>ShowExitAnimation</span><span class=p>();</span><span class=w> </span><span class=c1>// Runs after audio fade starts</span>
275
- </span><span id=__span-14-35><a id=__codelineno-14-35 name=__codelineno-14-35 href=#__codelineno-14-35></a><span class=w> </span><span class=p>}</span>
276
- </span><span id=__span-14-36><a id=__codelineno-14-36 name=__codelineno-14-36 href=#__codelineno-14-36></a><span class=p>}</span>
277
- </span><span id=__span-14-37><a id=__codelineno-14-37 name=__codelineno-14-37 href=#__codelineno-14-37></a>
278
- </span><span id=__span-14-38><a id=__codelineno-14-38 name=__codelineno-14-38 href=#__codelineno-14-38></a><span class=c1>// Emit once, all systems execute in priority order</span>
279
- </span><span id=__span-14-39><a id=__codelineno-14-39 name=__codelineno-14-39 href=#__codelineno-14-39></a><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>GameExit</span><span class=p>();</span>
280
- </span><span id=__span-14-40><a id=__codelineno-14-40 name=__codelineno-14-40 href=#__codelineno-14-40></a><span class=n>msg</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span>
281
- </span></code></pre></div> <p><strong>Key insight:</strong> Lower priority numbers run first. Use priority to eliminate race conditions and ensure deterministic ordering.</p> <h4 id=recommended-priority-ranges>Recommended priority ranges<a class=headerlink href=#recommended-priority-ranges title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>-100 to -50:</strong> Critical systems (save, validation)</li> <li><strong>-10 to 0:</strong> Core gameplay logic</li> <li><strong>0 to 10:</strong> UI updates</li> <li><strong>10 to 20:</strong> Visual effects</li> <li><strong>20+:</strong> Analytics, logging, non-critical</li> </ul> <h3 id=pattern-efficient-interception-at-scale>Pattern: Efficient Interception at Scale<a class=headerlink href=#pattern-efficient-interception-at-scale title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Validate 1000s of messages without duplicating logic.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-15-1><a id=__codelineno-15-1 name=__codelineno-15-1 href=#__codelineno-15-1></a><span class=c1>// Single interceptor validates ALL damage</span>
282
- </span><span id=__span-15-2><a id=__codelineno-15-2 name=__codelineno-15-2 href=#__codelineno-15-2></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>DamageValidator</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
283
- </span><span id=__span-15-3><a id=__codelineno-15-3 name=__codelineno-15-3 href=#__codelineno-15-3></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
284
- </span><span id=__span-15-4><a id=__codelineno-15-4 name=__codelineno-15-4 href=#__codelineno-15-4></a><span class=w> </span><span class=c1>// Interceptors run BEFORE handlers</span>
285
- </span><span id=__span-15-5><a id=__codelineno-15-5 name=__codelineno-15-5 href=#__codelineno-15-5></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastInterceptor</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>ValidateDamage</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=o>-</span><span class=mi>100</span><span class=p>);</span>
286
- </span><span id=__span-15-6><a id=__codelineno-15-6 name=__codelineno-15-6 href=#__codelineno-15-6></a><span class=w> </span><span class=p>}</span>
287
- </span><span id=__span-15-7><a id=__codelineno-15-7 name=__codelineno-15-7 href=#__codelineno-15-7></a>
288
- </span><span id=__span-15-8><a id=__codelineno-15-8 name=__codelineno-15-8 href=#__codelineno-15-8></a><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=nf>ValidateDamage</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
289
- </span><span id=__span-15-9><a id=__codelineno-15-9 name=__codelineno-15-9 href=#__codelineno-15-9></a><span class=w> </span><span class=c1>// Validation logic runs once per message, not per handler</span>
290
- </span><span id=__span-15-10><a id=__codelineno-15-10 name=__codelineno-15-10 href=#__codelineno-15-10></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=w> </span><span class=o>&lt;=</span><span class=w> </span><span class=mi>0</span><span class=p>)</span><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>false</span><span class=p>;</span><span class=w> </span><span class=c1>// Cancel invalid</span>
291
- </span><span id=__span-15-11><a id=__codelineno-15-11 name=__codelineno-15-11 href=#__codelineno-15-11></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=w> </span><span class=o>&gt;</span><span class=w> </span><span class=mi>9999</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
292
- </span><span id=__span-15-12><a id=__codelineno-15-12 name=__codelineno-15-12 href=#__codelineno-15-12></a><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>EntityDamaged</span><span class=p>(</span><span class=mi>9999</span><span class=p>,</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>damageType</span><span class=p>);</span><span class=w> </span><span class=c1>// Clamp</span>
293
- </span><span id=__span-15-13><a id=__codelineno-15-13 name=__codelineno-15-13 href=#__codelineno-15-13></a><span class=w> </span><span class=p>}</span>
294
- </span><span id=__span-15-14><a id=__codelineno-15-14 name=__codelineno-15-14 href=#__codelineno-15-14></a><span class=w> </span><span class=k>return</span><span class=w> </span><span class=k>true</span><span class=p>;</span><span class=w> </span><span class=c1>// Allow to proceed to handlers</span>
295
- </span><span id=__span-15-15><a id=__codelineno-15-15 name=__codelineno-15-15 href=#__codelineno-15-15></a><span class=w> </span><span class=p>}</span>
296
- </span><span id=__span-15-16><a id=__codelineno-15-16 name=__codelineno-15-16 href=#__codelineno-15-16></a><span class=p>}</span>
297
- </span><span id=__span-15-17><a id=__codelineno-15-17 name=__codelineno-15-17 href=#__codelineno-15-17></a>
298
- </span><span id=__span-15-18><a id=__codelineno-15-18 name=__codelineno-15-18 href=#__codelineno-15-18></a><span class=c1>// Handlers can trust data is valid (no duplicate checks needed)</span>
299
- </span><span id=__span-15-19><a id=__codelineno-15-19 name=__codelineno-15-19 href=#__codelineno-15-19></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>CombatEntity</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
300
- </span><span id=__span-15-20><a id=__codelineno-15-20 name=__codelineno-15-20 href=#__codelineno-15-20></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
301
- </span><span id=__span-15-21><a id=__codelineno-15-21 name=__codelineno-15-21 href=#__codelineno-15-21></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterComponentBroadcast</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=k>this</span><span class=p>,</span><span class=w> </span><span class=n>OnDamaged</span><span class=p>);</span>
302
- </span><span id=__span-15-22><a id=__codelineno-15-22 name=__codelineno-15-22 href=#__codelineno-15-22></a><span class=w> </span><span class=p>}</span>
303
- </span><span id=__span-15-23><a id=__codelineno-15-23 name=__codelineno-15-23 href=#__codelineno-15-23></a>
304
- </span><span id=__span-15-24><a id=__codelineno-15-24 name=__codelineno-15-24 href=#__codelineno-15-24></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDamaged</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
305
- </span><span id=__span-15-25><a id=__codelineno-15-25 name=__codelineno-15-25 href=#__codelineno-15-25></a><span class=w> </span><span class=c1>// No need to validate - interceptor already did it</span>
306
- </span><span id=__span-15-26><a id=__codelineno-15-26 name=__codelineno-15-26 href=#__codelineno-15-26></a><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=p>;</span>
307
- </span><span id=__span-15-27><a id=__codelineno-15-27 name=__codelineno-15-27 href=#__codelineno-15-27></a><span class=w> </span><span class=p>}</span>
308
- </span><span id=__span-15-28><a id=__codelineno-15-28 name=__codelineno-15-28 href=#__codelineno-15-28></a><span class=p>}</span>
309
- </span></code></pre></div> <p><strong>Scale benefit:</strong> Validation runs O(1) per message, not O(N) per handler. For 100 handlers, this saves 99 validation calls per message.</p> <h3 id=pattern-post-processing-for-analytics-at-scale>Pattern: Post-Processing for Analytics at Scale<a class=headerlink href=#pattern-post-processing-for-analytics-at-scale title="Anchor link to this section">&para;</a></h3> <p><strong>Challenge:</strong> Track metrics without polluting gameplay code.</p> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-16-1><a id=__codelineno-16-1 name=__codelineno-16-1 href=#__codelineno-16-1></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameAnalytics</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
310
- </span><span id=__span-16-2><a id=__codelineno-16-2 name=__codelineno-16-2 href=#__codelineno-16-2></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
311
- </span><span id=__span-16-3><a id=__codelineno-16-3 name=__codelineno-16-3 href=#__codelineno-16-3></a><span class=w> </span><span class=c1>// Post-processors run AFTER all handlers</span>
312
- </span><span id=__span-16-4><a id=__codelineno-16-4 name=__codelineno-16-4 href=#__codelineno-16-4></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSourcePostProcessor</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>LogDamage</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>100</span><span class=p>);</span>
313
- </span><span id=__span-16-5><a id=__codelineno-16-5 name=__codelineno-16-5 href=#__codelineno-16-5></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargetedPostProcessor</span><span class=o>&lt;</span><span class=n>LevelCompleted</span><span class=o>&gt;</span><span class=p>(</span><span class=n>LogLevelComplete</span><span class=p>,</span><span class=w> </span><span class=n>priority</span><span class=p>:</span><span class=w> </span><span class=mi>100</span><span class=p>);</span>
314
- </span><span id=__span-16-6><a id=__codelineno-16-6 name=__codelineno-16-6 href=#__codelineno-16-6></a><span class=w> </span><span class=p>}</span>
315
- </span><span id=__span-16-7><a id=__codelineno-16-7 name=__codelineno-16-7 href=#__codelineno-16-7></a>
316
- </span><span id=__span-16-8><a id=__codelineno-16-8 name=__codelineno-16-8 href=#__codelineno-16-8></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LogDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=n>EntityDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
317
- </span><span id=__span-16-9><a id=__codelineno-16-9 name=__codelineno-16-9 href=#__codelineno-16-9></a><span class=w> </span><span class=c1>// Analytics code is completely isolated from gameplay</span>
318
- </span><span id=__span-16-10><a id=__codelineno-16-10 name=__codelineno-16-10 href=#__codelineno-16-10></a><span class=w> </span><span class=n>SendAnalyticsEvent</span><span class=p>(</span><span class=s>&quot;damage_dealt&quot;</span><span class=p>,</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=p>{</span>
319
- </span><span id=__span-16-11><a id=__codelineno-16-11 name=__codelineno-16-11 href=#__codelineno-16-11></a><span class=w> </span><span class=n>source</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>source</span><span class=p>.</span><span class=n>ToString</span><span class=p>(),</span>
320
- </span><span id=__span-16-12><a id=__codelineno-16-12 name=__codelineno-16-12 href=#__codelineno-16-12></a><span class=w> </span><span class=n>amount</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>amount</span><span class=p>,</span>
321
- </span><span id=__span-16-13><a id=__codelineno-16-13 name=__codelineno-16-13 href=#__codelineno-16-13></a><span class=w> </span><span class=n>type</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>damageType</span>
322
- </span><span id=__span-16-14><a id=__codelineno-16-14 name=__codelineno-16-14 href=#__codelineno-16-14></a><span class=w> </span><span class=p>});</span>
323
- </span><span id=__span-16-15><a id=__codelineno-16-15 name=__codelineno-16-15 href=#__codelineno-16-15></a><span class=w> </span><span class=p>}</span>
324
- </span><span id=__span-16-16><a id=__codelineno-16-16 name=__codelineno-16-16 href=#__codelineno-16-16></a>
325
- </span><span id=__span-16-17><a id=__codelineno-16-17 name=__codelineno-16-17 href=#__codelineno-16-17></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>LogLevelComplete</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>LevelCompleted</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
326
- </span><span id=__span-16-18><a id=__codelineno-16-18 name=__codelineno-16-18 href=#__codelineno-16-18></a><span class=w> </span><span class=n>SendAnalyticsEvent</span><span class=p>(</span><span class=s>&quot;level_complete&quot;</span><span class=p>,</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=n>level</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>levelIndex</span><span class=w> </span><span class=p>});</span>
327
- </span><span id=__span-16-19><a id=__codelineno-16-19 name=__codelineno-16-19 href=#__codelineno-16-19></a><span class=w> </span><span class=p>}</span>
328
- </span><span id=__span-16-20><a id=__codelineno-16-20 name=__codelineno-16-20 href=#__codelineno-16-20></a><span class=p>}</span>
329
- </span></code></pre></div> <p><strong>Key insight:</strong> Post-processors let you add analytics, logging, and telemetry WITHOUT touching existing handlers. Add/remove analytics system without modifying game logic.</p> <h3 id=performance-optimization-patterns-at-scale>Performance Optimization Patterns at Scale<a class=headerlink href=#performance-optimization-patterns-at-scale title="Anchor link to this section">&para;</a></h3> <h4 id=optimization-1-disable-diagnostics-in-builds>Optimization 1: Disable Diagnostics in Builds<a class=headerlink href=#optimization-1-disable-diagnostics-in-builds title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-17-1><a id=__codelineno-17-1 name=__codelineno-17-1 href=#__codelineno-17-1></a><span class=cp>#if UNITY_EDITOR</span>
330
- </span><span id=__span-17-2><a id=__codelineno-17-2 name=__codelineno-17-2 href=#__codelineno-17-2></a><span class=n>IMessageBus</span><span class=p>.</span><span class=n>GlobalDiagnosticsMode</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>true</span><span class=p>;</span>
331
- </span><span id=__span-17-3><a id=__codelineno-17-3 name=__codelineno-17-3 href=#__codelineno-17-3></a><span class=n>IMessageBus</span><span class=p>.</span><span class=n>GlobalMessageBufferSize</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>100</span><span class=p>;</span><span class=w> </span><span class=c1>// Keep history for debugging</span>
332
- </span><span id=__span-17-4><a id=__codelineno-17-4 name=__codelineno-17-4 href=#__codelineno-17-4></a><span class=cp>#else</span>
333
- </span><span id=__span-17-5><a id=__codelineno-17-5 name=__codelineno-17-5 href=#__codelineno-17-5></a><span class=n>IMessageBus</span><span class=p>.</span><span class=n>GlobalDiagnosticsMode</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>false</span><span class=p>;</span><span class=w> </span><span class=c1>// Production builds</span>
334
- </span><span id=__span-17-6><a id=__codelineno-17-6 name=__codelineno-17-6 href=#__codelineno-17-6></a><span class=cp>#endif</span>
335
- </span></code></pre></div> <p><strong>Impact:</strong> Diagnostics adds ~5-10% overhead per message. Disable in production.</p> <h4 id=optimization-2-use-specific-registrations-over-globalacceptall>Optimization 2: Use Specific Registrations Over GlobalAcceptAll<a class=headerlink href=#optimization-2-use-specific-registrations-over-globalacceptall title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-18-1><a id=__codelineno-18-1 name=__codelineno-18-1 href=#__codelineno-18-1></a><span class=c1>// ❌ SLOW: Receives ALL messages, even irrelevant ones</span>
336
- </span><span id=__span-18-2><a id=__codelineno-18-2 name=__codelineno-18-2 href=#__codelineno-18-2></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterGlobalAcceptAll</span><span class=p>(</span>
337
- </span><span id=__span-18-3><a id=__codelineno-18-3 name=__codelineno-18-3 href=#__codelineno-18-3></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>IUntargetedMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* called for every untargeted */</span><span class=w> </span><span class=p>},</span>
338
- </span><span id=__span-18-4><a id=__codelineno-18-4 name=__codelineno-18-4 href=#__codelineno-18-4></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>t</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>ITargetedMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* called for every targeted */</span><span class=w> </span><span class=p>},</span>
339
- </span><span id=__span-18-5><a id=__codelineno-18-5 name=__codelineno-18-5 href=#__codelineno-18-5></a><span class=w> </span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>InstanceId</span><span class=w> </span><span class=n>s</span><span class=p>,</span><span class=w> </span><span class=k>ref</span><span class=w> </span><span class=n>IBroadcastMessage</span><span class=w> </span><span class=n>m</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=cm>/* called for every broadcast */</span><span class=w> </span><span class=p>}</span>
340
- </span><span id=__span-18-6><a id=__codelineno-18-6 name=__codelineno-18-6 href=#__codelineno-18-6></a><span class=p>);</span>
341
- </span><span id=__span-18-7><a id=__codelineno-18-7 name=__codelineno-18-7 href=#__codelineno-18-7></a>
342
- </span><span id=__span-18-8><a id=__codelineno-18-8 name=__codelineno-18-8 href=#__codelineno-18-8></a><span class=c1>// ✅ FAST: Only receives relevant messages</span>
343
- </span><span id=__span-18-9><a id=__codelineno-18-9 name=__codelineno-18-9 href=#__codelineno-18-9></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>EntityDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnDamage</span><span class=p>);</span>
344
- </span><span id=__span-18-10><a id=__codelineno-18-10 name=__codelineno-18-10 href=#__codelineno-18-10></a><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>LevelCompleted</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnLevelComplete</span><span class=p>);</span>
345
- </span></code></pre></div> <p><strong>Impact:</strong> Specific registrations use type-indexed lookups (O(1)). GlobalAcceptAll checks every message (O(N)).</p> <h4 id=optimization-3-batch-message-emissions>Optimization 3: Batch Message Emissions<a class=headerlink href=#optimization-3-batch-message-emissions title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-19-1><a id=__codelineno-19-1 name=__codelineno-19-1 href=#__codelineno-19-1></a><span class=c1>// ❌ WASTEFUL: Emit after every tiny change</span>
346
- </span><span id=__span-19-2><a id=__codelineno-19-2 name=__codelineno-19-2 href=#__codelineno-19-2></a><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
347
- </span><span id=__span-19-3><a id=__codelineno-19-3 name=__codelineno-19-3 href=#__codelineno-19-3></a><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
348
- </span><span id=__span-19-4><a id=__codelineno-19-4 name=__codelineno-19-4 href=#__codelineno-19-4></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>HealthChanged</span><span class=p>(</span><span class=n>health</span><span class=p>);</span>
349
- </span><span id=__span-19-5><a id=__codelineno-19-5 name=__codelineno-19-5 href=#__codelineno-19-5></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span><span class=w> </span><span class=c1>// Emits every frame</span>
350
- </span><span id=__span-19-6><a id=__codelineno-19-6 name=__codelineno-19-6 href=#__codelineno-19-6></a><span class=p>}</span>
351
- </span><span id=__span-19-7><a id=__codelineno-19-7 name=__codelineno-19-7 href=#__codelineno-19-7></a>
352
- </span><span id=__span-19-8><a id=__codelineno-19-8 name=__codelineno-19-8 href=#__codelineno-19-8></a><span class=c1>// ✅ EFFICIENT: Batch updates, emit once per frame</span>
353
- </span><span id=__span-19-9><a id=__codelineno-19-9 name=__codelineno-19-9 href=#__codelineno-19-9></a><span class=k>private</span><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=n>healthDirty</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>false</span><span class=p>;</span>
354
- </span><span id=__span-19-10><a id=__codelineno-19-10 name=__codelineno-19-10 href=#__codelineno-19-10></a>
355
- </span><span id=__span-19-11><a id=__codelineno-19-11 name=__codelineno-19-11 href=#__codelineno-19-11></a><span class=k>void</span><span class=w> </span><span class=nf>TakeDamage</span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
356
- </span><span id=__span-19-12><a id=__codelineno-19-12 name=__codelineno-19-12 href=#__codelineno-19-12></a><span class=w> </span><span class=n>health</span><span class=w> </span><span class=o>-=</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
357
- </span><span id=__span-19-13><a id=__codelineno-19-13 name=__codelineno-19-13 href=#__codelineno-19-13></a><span class=w> </span><span class=n>healthDirty</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>true</span><span class=p>;</span>
358
- </span><span id=__span-19-14><a id=__codelineno-19-14 name=__codelineno-19-14 href=#__codelineno-19-14></a><span class=p>}</span>
359
- </span><span id=__span-19-15><a id=__codelineno-19-15 name=__codelineno-19-15 href=#__codelineno-19-15></a>
360
- </span><span id=__span-19-16><a id=__codelineno-19-16 name=__codelineno-19-16 href=#__codelineno-19-16></a><span class=k>void</span><span class=w> </span><span class=nf>LateUpdate</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
361
- </span><span id=__span-19-17><a id=__codelineno-19-17 name=__codelineno-19-17 href=#__codelineno-19-17></a><span class=w> </span><span class=k>if</span><span class=w> </span><span class=p>(</span><span class=n>healthDirty</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
362
- </span><span id=__span-19-18><a id=__codelineno-19-18 name=__codelineno-19-18 href=#__codelineno-19-18></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>HealthChanged</span><span class=p>(</span><span class=n>health</span><span class=p>);</span>
363
- </span><span id=__span-19-19><a id=__codelineno-19-19 name=__codelineno-19-19 href=#__codelineno-19-19></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span><span class=w> </span><span class=c1>// Emits once per frame max</span>
364
- </span><span id=__span-19-20><a id=__codelineno-19-20 name=__codelineno-19-20 href=#__codelineno-19-20></a><span class=w> </span><span class=n>healthDirty</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>false</span><span class=p>;</span>
365
- </span><span id=__span-19-21><a id=__codelineno-19-21 name=__codelineno-19-21 href=#__codelineno-19-21></a><span class=w> </span><span class=p>}</span>
366
- </span><span id=__span-19-22><a id=__codelineno-19-22 name=__codelineno-19-22 href=#__codelineno-19-22></a><span class=p>}</span>
367
- </span></code></pre></div> <p><strong>Impact:</strong> Reduces message traffic by 10-100x in high-frequency scenarios.</p> <h3 id=scaling-guidelines>Scaling Guidelines<a class=headerlink href=#scaling-guidelines title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Entity Count</th> <th>Message Rate</th> <th>Recommendations</th> </tr> </thead> <tbody> <tr> <td>1-10</td> <td>Any</td> <td>Default settings fine</td> </tr> <tr> <td>10-50</td> <td>&lt;1000/sec</td> <td>Disable diagnostics in builds</td> </tr> <tr> <td>50-100</td> <td>&lt;5000/sec</td> <td>Batch emissions, avoid GlobalAcceptAll</td> </tr> <tr> <td>100-500</td> <td>&lt;10k/sec</td> <td>Use local buses for subsystems, profile carefully</td> </tr> <tr> <td>500+</td> <td>&lt;20k/sec</td> <td>Consider ECS or native code for hot paths</td> </tr> </tbody> </table> <p><strong>Rule of thumb:</strong> If you're emitting &gt;20,000 messages/second, you're likely using DxMessaging for something better suited to ECS or direct method calls.</p> <h3 id=real-world-production-example-battle-royale-game>Real-World Production Example: Battle Royale Game<a class=headerlink href=#real-world-production-example-battle-royale-game title="Anchor link to this section">&para;</a></h3> <p><strong>Scenario:</strong> 100 players, each with health/armor/weapons. UI needs to show:</p> <ul> <li>Your health/armor</li> <li>Teammate health (4 players)</li> <li>Kill feed (all 100 players)</li> <li>Match stats (damage dealt, kills, etc.)</li> </ul> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-20-1><a id=__codelineno-20-1 name=__codelineno-20-1 href=#__codelineno-20-1></a><span class=c1>// Messages</span>
368
- </span><span id=__span-20-2><a id=__codelineno-20-2 name=__codelineno-20-2 href=#__codelineno-20-2></a><span class=na>[DxBroadcastMessage]</span>
369
- </span><span id=__span-20-3><a id=__codelineno-20-3 name=__codelineno-20-3 href=#__codelineno-20-3></a><span class=na>[DxAutoConstructor]</span>
370
- </span><span id=__span-20-4><a id=__codelineno-20-4 name=__codelineno-20-4 href=#__codelineno-20-4></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>PlayerDamaged</span><span class=w> </span><span class=p>{</span>
371
- </span><span id=__span-20-5><a id=__codelineno-20-5 name=__codelineno-20-5 href=#__codelineno-20-5></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>playerId</span><span class=p>;</span>
372
- </span><span id=__span-20-6><a id=__codelineno-20-6 name=__codelineno-20-6 href=#__codelineno-20-6></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>newHealth</span><span class=p>;</span>
373
- </span><span id=__span-20-7><a id=__codelineno-20-7 name=__codelineno-20-7 href=#__codelineno-20-7></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>newArmor</span><span class=p>;</span>
374
- </span><span id=__span-20-8><a id=__codelineno-20-8 name=__codelineno-20-8 href=#__codelineno-20-8></a><span class=p>}</span>
375
- </span><span id=__span-20-9><a id=__codelineno-20-9 name=__codelineno-20-9 href=#__codelineno-20-9></a>
376
- </span><span id=__span-20-10><a id=__codelineno-20-10 name=__codelineno-20-10 href=#__codelineno-20-10></a><span class=na>[DxBroadcastMessage]</span>
377
- </span><span id=__span-20-11><a id=__codelineno-20-11 name=__codelineno-20-11 href=#__codelineno-20-11></a><span class=na>[DxAutoConstructor]</span>
378
- </span><span id=__span-20-12><a id=__codelineno-20-12 name=__codelineno-20-12 href=#__codelineno-20-12></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>PlayerKilled</span><span class=w> </span><span class=p>{</span>
379
- </span><span id=__span-20-13><a id=__codelineno-20-13 name=__codelineno-20-13 href=#__codelineno-20-13></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>victimId</span><span class=p>;</span>
380
- </span><span id=__span-20-14><a id=__codelineno-20-14 name=__codelineno-20-14 href=#__codelineno-20-14></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>killerId</span><span class=p>;</span>
381
- </span><span id=__span-20-15><a id=__codelineno-20-15 name=__codelineno-20-15 href=#__codelineno-20-15></a><span class=p>}</span>
382
- </span><span id=__span-20-16><a id=__codelineno-20-16 name=__codelineno-20-16 href=#__codelineno-20-16></a>
383
- </span><span id=__span-20-17><a id=__codelineno-20-17 name=__codelineno-20-17 href=#__codelineno-20-17></a><span class=c1>// YOUR health bar (targeted observation)</span>
384
- </span><span id=__span-20-18><a id=__codelineno-20-18 name=__codelineno-20-18 href=#__codelineno-20-18></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>SelfHealthUI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
385
- </span><span id=__span-20-19><a id=__codelineno-20-19 name=__codelineno-20-19 href=#__codelineno-20-19></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>GameObject</span><span class=w> </span><span class=n>localPlayerObject</span><span class=p>;</span>
386
- </span><span id=__span-20-20><a id=__codelineno-20-20 name=__codelineno-20-20 href=#__codelineno-20-20></a>
387
- </span><span id=__span-20-21><a id=__codelineno-20-21 name=__codelineno-20-21 href=#__codelineno-20-21></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
388
- </span><span id=__span-20-22><a id=__codelineno-20-22 name=__codelineno-20-22 href=#__codelineno-20-22></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterGameObjectBroadcast</span><span class=o>&lt;</span><span class=n>PlayerDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>localPlayerObject</span><span class=p>,</span><span class=w> </span><span class=n>OnDamage</span><span class=p>);</span>
389
- </span><span id=__span-20-23><a id=__codelineno-20-23 name=__codelineno-20-23 href=#__codelineno-20-23></a><span class=w> </span><span class=p>}</span>
390
- </span><span id=__span-20-24><a id=__codelineno-20-24 name=__codelineno-20-24 href=#__codelineno-20-24></a>
391
- </span><span id=__span-20-25><a id=__codelineno-20-25 name=__codelineno-20-25 href=#__codelineno-20-25></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDamage</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>PlayerDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateHealthBar</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>newHealth</span><span class=p>,</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>newArmor</span><span class=p>);</span>
392
- </span><span id=__span-20-26><a id=__codelineno-20-26 name=__codelineno-20-26 href=#__codelineno-20-26></a><span class=p>}</span>
393
- </span><span id=__span-20-27><a id=__codelineno-20-27 name=__codelineno-20-27 href=#__codelineno-20-27></a>
394
- </span><span id=__span-20-28><a id=__codelineno-20-28 name=__codelineno-20-28 href=#__codelineno-20-28></a><span class=c1>// TEAMMATE health bars (selective observation)</span>
395
- </span><span id=__span-20-29><a id=__codelineno-20-29 name=__codelineno-20-29 href=#__codelineno-20-29></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>TeamHealthUI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
396
- </span><span id=__span-20-30><a id=__codelineno-20-30 name=__codelineno-20-30 href=#__codelineno-20-30></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>List</span><span class=o>&lt;</span><span class=n>GameObject</span><span class=o>&gt;</span><span class=w> </span><span class=n>teammateObjects</span><span class=p>;</span>
397
- </span><span id=__span-20-31><a id=__codelineno-20-31 name=__codelineno-20-31 href=#__codelineno-20-31></a>
398
- </span><span id=__span-20-32><a id=__codelineno-20-32 name=__codelineno-20-32 href=#__codelineno-20-32></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
399
- </span><span id=__span-20-33><a id=__codelineno-20-33 name=__codelineno-20-33 href=#__codelineno-20-33></a><span class=w> </span><span class=k>foreach</span><span class=w> </span><span class=p>(</span><span class=kt>var</span><span class=w> </span><span class=n>teammate</span><span class=w> </span><span class=k>in</span><span class=w> </span><span class=n>teammateObjects</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
400
- </span><span id=__span-20-34><a id=__codelineno-20-34 name=__codelineno-20-34 href=#__codelineno-20-34></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterGameObjectBroadcast</span><span class=o>&lt;</span><span class=n>PlayerDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>teammate</span><span class=p>,</span><span class=w> </span><span class=n>OnTeammateDamage</span><span class=p>);</span>
401
- </span><span id=__span-20-35><a id=__codelineno-20-35 name=__codelineno-20-35 href=#__codelineno-20-35></a><span class=w> </span><span class=p>}</span>
402
- </span><span id=__span-20-36><a id=__codelineno-20-36 name=__codelineno-20-36 href=#__codelineno-20-36></a><span class=w> </span><span class=p>}</span>
403
- </span><span id=__span-20-37><a id=__codelineno-20-37 name=__codelineno-20-37 href=#__codelineno-20-37></a>
404
- </span><span id=__span-20-38><a id=__codelineno-20-38 name=__codelineno-20-38 href=#__codelineno-20-38></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnTeammateDamage</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>PlayerDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>UpdateTeammateBar</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>playerId</span><span class=p>,</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>newHealth</span><span class=p>);</span>
405
- </span><span id=__span-20-39><a id=__codelineno-20-39 name=__codelineno-20-39 href=#__codelineno-20-39></a><span class=p>}</span>
406
- </span><span id=__span-20-40><a id=__codelineno-20-40 name=__codelineno-20-40 href=#__codelineno-20-40></a>
407
- </span><span id=__span-20-41><a id=__codelineno-20-41 name=__codelineno-20-41 href=#__codelineno-20-41></a><span class=c1>// KILL FEED (global observation)</span>
408
- </span><span id=__span-20-42><a id=__codelineno-20-42 name=__codelineno-20-42 href=#__codelineno-20-42></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>KillFeedUI</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
409
- </span><span id=__span-20-43><a id=__codelineno-20-43 name=__codelineno-20-43 href=#__codelineno-20-43></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
410
- </span><span id=__span-20-44><a id=__codelineno-20-44 name=__codelineno-20-44 href=#__codelineno-20-44></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>PlayerKilled</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnAnyKill</span><span class=p>);</span>
411
- </span><span id=__span-20-45><a id=__codelineno-20-45 name=__codelineno-20-45 href=#__codelineno-20-45></a><span class=w> </span><span class=p>}</span>
412
- </span><span id=__span-20-46><a id=__codelineno-20-46 name=__codelineno-20-46 href=#__codelineno-20-46></a>
413
- </span><span id=__span-20-47><a id=__codelineno-20-47 name=__codelineno-20-47 href=#__codelineno-20-47></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnAnyKill</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=n>PlayerKilled</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
414
- </span><span id=__span-20-48><a id=__codelineno-20-48 name=__codelineno-20-48 href=#__codelineno-20-48></a><span class=w> </span><span class=n>ShowKillFeedEntry</span><span class=p>(</span><span class=n>msg</span><span class=p>.</span><span class=n>killerId</span><span class=p>,</span><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>victimId</span><span class=p>);</span>
415
- </span><span id=__span-20-49><a id=__codelineno-20-49 name=__codelineno-20-49 href=#__codelineno-20-49></a><span class=w> </span><span class=p>}</span>
416
- </span><span id=__span-20-50><a id=__codelineno-20-50 name=__codelineno-20-50 href=#__codelineno-20-50></a><span class=p>}</span>
417
- </span><span id=__span-20-51><a id=__codelineno-20-51 name=__codelineno-20-51 href=#__codelineno-20-51></a>
418
- </span><span id=__span-20-52><a id=__codelineno-20-52 name=__codelineno-20-52 href=#__codelineno-20-52></a><span class=c1>// MATCH STATS (analytics)</span>
419
- </span><span id=__span-20-53><a id=__codelineno-20-53 name=__codelineno-20-53 href=#__codelineno-20-53></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>MatchStats</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span><span class=w> </span><span class=p>{</span>
420
- </span><span id=__span-20-54><a id=__codelineno-20-54 name=__codelineno-20-54 href=#__codelineno-20-54></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>Dictionary</span><span class=o>&lt;</span><span class=kt>int</span><span class=p>,</span><span class=w> </span><span class=kt>int</span><span class=o>&gt;</span><span class=w> </span><span class=n>damageByPlayer</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=p>();</span>
421
- </span><span id=__span-20-55><a id=__codelineno-20-55 name=__codelineno-20-55 href=#__codelineno-20-55></a>
422
- </span><span id=__span-20-56><a id=__codelineno-20-56 name=__codelineno-20-56 href=#__codelineno-20-56></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span><span class=w> </span><span class=p>{</span>
423
- </span><span id=__span-20-57><a id=__codelineno-20-57 name=__codelineno-20-57 href=#__codelineno-20-57></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSourcePostProcessor</span><span class=o>&lt;</span><span class=n>PlayerDamaged</span><span class=o>&gt;</span><span class=p>(</span><span class=n>TrackDamage</span><span class=p>);</span>
424
- </span><span id=__span-20-58><a id=__codelineno-20-58 name=__codelineno-20-58 href=#__codelineno-20-58></a><span class=w> </span><span class=p>}</span>
425
- </span><span id=__span-20-59><a id=__codelineno-20-59 name=__codelineno-20-59 href=#__codelineno-20-59></a>
426
- </span><span id=__span-20-60><a id=__codelineno-20-60 name=__codelineno-20-60 href=#__codelineno-20-60></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>TrackDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=n>PlayerDamaged</span><span class=w> </span><span class=n>msg</span><span class=p>)</span><span class=w> </span><span class=p>{</span>
427
- </span><span id=__span-20-61><a id=__codelineno-20-61 name=__codelineno-20-61 href=#__codelineno-20-61></a><span class=w> </span><span class=c1>// Track for post-game stats</span>
428
- </span><span id=__span-20-62><a id=__codelineno-20-62 name=__codelineno-20-62 href=#__codelineno-20-62></a><span class=w> </span><span class=p>}</span>
429
- </span><span id=__span-20-63><a id=__codelineno-20-63 name=__codelineno-20-63 href=#__codelineno-20-63></a><span class=p>}</span>
430
- </span></code></pre></div> <h4 id=key-insights>Key insights<a class=headerlink href=#key-insights title="Anchor link to this section">&para;</a></h4> <ul> <li>Self health UI: 1 registration, receives ~10 messages/sec</li> <li>Team health UI: 4 registrations, receives ~40 messages/sec</li> <li>Kill feed UI: 1 registration, receives ALL kills (~5 messages/sec)</li> <li>Match stats: Post-processor, doesn't affect gameplay latency</li> </ul> <p><strong>Total:</strong> ~100 players × 10 damage/sec = 1000 messages/sec. DxMessaging handles this with negligible overhead (~0.06ms/frame).</p> <hr> <p><strong>Summary:</strong> DxMessaging scales from small prototypes to large production games. Use targeted observation for specific entities, global observation for analytics, and post-processors for metrics. Disable diagnostics in production and batch emissions for optimal performance.</p> <hr> <h2 id=14-compatibility-with-scriptable-object-architecture-soa>14) Compatibility with Scriptable Object Architecture (SOA)<a class=headerlink href=#14-compatibility-with-scriptable-object-architecture-soa title="Anchor link to this section">&para;</a></h2> <p><strong>Note:</strong> Scriptable Object Architecture (SOA) is a debated pattern in the Unity community. It has both proponents who value its designer-friendly workflow and critics who raise concerns about scalability and maintainability. See <a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-ScriptableObject Architecture</a> for one perspective on the criticisms. Teams should evaluate SOA based on their specific needs. Alternatives include dependency injection (Zenject, VContainer), reactive systems (UniRx), or messaging systems (DxMessaging, MessagePipe).</p> <p>That said, if your project uses or requires SOA, DxMessaging can work alongside it.</p> <h3 id=what-is-scriptable-object-architecture>What is Scriptable Object Architecture?<a class=headerlink href=#what-is-scriptable-object-architecture title="Anchor link to this section">&para;</a></h3> <p><strong>SOA Background:</strong> Popularized by Ryan Hipple's <a href="https://www.youtube.com/watch?v=raQ3iHhE_Kk">Unite Austin 2017 talk</a>, SOA uses ScriptableObject assets as:</p> <ol> <li><strong>Shared Variables</strong> - <code>FloatVariable</code>, <code>IntVariable</code>, etc. (ScriptableObject assets that hold runtime state)</li> <li><strong>Event Channels</strong> - <code>GameEvent</code> + <code>GameEventListener</code> pattern (designer-created events)</li> <li><strong>Runtime Sets</strong> - Collections of active game objects (e.g., all enemies)</li> </ol> <p><strong>Core idea:</strong> Systems communicate through serialized SO assets instead of direct references.</p> <h4 id=key-resources>Key resources<a class=headerlink href=#key-resources title="Anchor link to this section">&para;</a></h4> <ul> <li><a href="https://www.youtube.com/watch?v=raQ3iHhE_Kk">Unite 2017 Talk by Ryan Hipple</a></li> <li><a href=https://unity.com/how-to/architect-game-code-scriptable-objects>Official Unity Guide</a></li> <li><a href=https://github.com/roboryantron/Unite2017>Reference Implementation</a></li> <li><a href=https://github.com/DanielEverland/ScriptableObject-Architecture>Community Package</a></li> </ul> <h3 id=why-soa-is-controversial>Why SOA is Controversial<a class=headerlink href=#why-soa-is-controversial title="Anchor link to this section">&para;</a></h3> <p>From <a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-ScriptableObject Architecture</a>, key criticisms include:</p> <ol> <li><strong>Wrong Purpose</strong> - ScriptableObjects are designed for immutable design data, not runtime mutable state</li> <li><strong>Redundant Complexity</strong> - Standard C# objects achieve the same goals without SO restrictions</li> <li><strong>Inspector Dependency</strong> - Binds architecture to Unity's GUI, complicating debugging and maintenance</li> <li><strong>Limited Scalability</strong> - Runtime-created variables undermine the pattern; managing numerous assets becomes unwieldy</li> <li><strong>Domain Reload Issues</strong> - Disabled domain reloading causes ScriptableObjects to retain values unpredictably</li> <li><strong>Testability Concerns</strong> - SO assets persist between tests, requiring manual cleanup</li> </ol> <h4 id=recommended-alternatives>Recommended alternatives<a class=headerlink href=#recommended-alternatives title="Anchor link to this section">&para;</a></h4> <ul> <li><strong>Dependency Injection</strong> - Zenject, VContainer, Reflex (see <a href=../../integrations/ >DxMessaging DI Integrations</a>)</li> <li><strong>Reactive Systems</strong> - UniRx, UniTask</li> <li><strong>Messaging</strong> - DxMessaging (this framework), MessagePipe</li> <li><strong>Configuration Data</strong> - Spreadsheet-based solutions (e.g., BakingSheet)</li> </ul> <p>Use ScriptableObjects for their intended purpose: <strong>immutable design-time data</strong> (configs, balance tables, prefab references).</p> <h3 id=can-dxmessaging-work-with-soa>Can DxMessaging Work with SOA?<a class=headerlink href=#can-dxmessaging-work-with-soa title="Anchor link to this section">&para;</a></h3> <p><strong>Yes, but with caveats.</strong> DxMessaging and SOA solve similar problems (decoupling, communication) with different philosophies:</p> <table> <thead> <tr> <th>Aspect</th> <th>SOA</th> <th>DxMessaging</th> </tr> </thead> <tbody> <tr> <td><strong>Paradigm</strong></td> <td>Asset-based, persistent state</td> <td>Runtime message passing, transient</td> </tr> <tr> <td><strong>Designer-Centric</strong></td> <td>✅ High (create events in Inspector)</td> <td>❌ Low (code-driven)</td> </tr> <tr> <td><strong>Type Safety</strong></td> <td>⚠️ Mixed (SO refs typed, but UnityEvent inspector wiring loses compile-time safety)</td> <td>✅ Strong (compile-time validation)</td> </tr> <tr> <td><strong>Lifecycle</strong></td> <td>⚠️ Manual (SO assets persist)</td> <td>✅ Automatic (tokens clean up)</td> </tr> <tr> <td><strong>Debugging</strong></td> <td>⚠️ Inspector-dependent</td> <td>✅ Built-in diagnostics</td> </tr> <tr> <td><strong>Performance</strong></td> <td>⚠️ List iteration, UnityAction overhead</td> <td>✅ Zero-allocation structs</td> </tr> <tr> <td><strong>Use Case</strong></td> <td>Shared state, designer-driven configs</td> <td>Event-driven communication, runtime logic</td> </tr> <tr> <td><strong>Testability</strong></td> <td>⚠️ Requires SO asset cleanup</td> <td>✅ Isolated buses per test</td> </tr> </tbody> </table> <p><strong>Summary:</strong> For new projects, evaluate DxMessaging, DI frameworks, or other messaging approaches based on your needs. If you have existing SOA code, the patterns below show coexistence strategies.</p> <h3 id=pattern-overview>Pattern Overview<a class=headerlink href=#pattern-overview title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Pattern</th> <th>What it shows</th> <th>When to use</th> <th>SOA involvement</th> </tr> </thead> <tbody> <tr> <td><strong>A</strong></td> <td>SOA Events (GameEvent) forwarding to DxMessaging</td> <td>Designer-created event assets, modern code downstream</td> <td>✅ Yes - SOA Event pattern</td> </tr> <tr> <td><strong>B</strong></td> <td>ScriptableObjects for configs + DxMessaging for events</td> <td>New projects / best practice</td> <td>❌ No - proper SO usage only</td> </tr> </tbody> </table> <h3 id=pattern-a-soa--dxmessaging-event-forwarding>Pattern A: SOA → DxMessaging (Event Forwarding)<a class=headerlink href=#pattern-a-soa--dxmessaging-event-forwarding title="Anchor link to this section">&para;</a></h3> <p><strong>Use case:</strong> Designer-created SOA events, but you want DxMessaging benefits downstream.</p> <p><strong>Strategy:</strong> SOA GameEventListener forwards to DxMessaging.</p> <blockquote> <p><strong>This uses the SOA GameEvent pattern:</strong> If you're NOT using designer-created GameEvent assets with <code>Raise()</code>/listener management, you don't need this pattern. For immutable config data, see Pattern B instead.</p> </blockquote> <h4 id=example-scene-transitions>Example: Scene Transitions<a class=headerlink href=#example-scene-transitions title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-21-1><a id=__codelineno-21-1 name=__codelineno-21-1 href=#__codelineno-21-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
431
- </span><span id=__span-21-2><a id=__codelineno-21-2 name=__codelineno-21-2 href=#__codelineno-21-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
432
- </span><span id=__span-21-3><a id=__codelineno-21-3 name=__codelineno-21-3 href=#__codelineno-21-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Extensions</span><span class=p>;</span>
433
- </span><span id=__span-21-4><a id=__codelineno-21-4 name=__codelineno-21-4 href=#__codelineno-21-4></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
434
- </span><span id=__span-21-5><a id=__codelineno-21-5 name=__codelineno-21-5 href=#__codelineno-21-5></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine.Events</span><span class=p>;</span>
435
- </span><span id=__span-21-6><a id=__codelineno-21-6 name=__codelineno-21-6 href=#__codelineno-21-6></a>
436
- </span><span id=__span-21-7><a id=__codelineno-21-7 name=__codelineno-21-7 href=#__codelineno-21-7></a><span class=c1>// Traditional SOA event</span>
437
- </span><span id=__span-21-8><a id=__codelineno-21-8 name=__codelineno-21-8 href=#__codelineno-21-8></a><span class=na>[CreateAssetMenu(menuName = &quot;Events/Game Event&quot;)]</span>
438
- </span><span id=__span-21-9><a id=__codelineno-21-9 name=__codelineno-21-9 href=#__codelineno-21-9></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>GameEvent</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>ScriptableObject</span>
439
- </span><span id=__span-21-10><a id=__codelineno-21-10 name=__codelineno-21-10 href=#__codelineno-21-10></a><span class=p>{</span>
440
- </span><span id=__span-21-11><a id=__codelineno-21-11 name=__codelineno-21-11 href=#__codelineno-21-11></a><span class=w> </span><span class=k>private</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=n>List</span><span class=o>&lt;</span><span class=n>UnityAction</span><span class=o>&gt;</span><span class=w> </span><span class=n>listeners</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=p>();</span>
441
- </span><span id=__span-21-12><a id=__codelineno-21-12 name=__codelineno-21-12 href=#__codelineno-21-12></a>
442
- </span><span id=__span-21-13><a id=__codelineno-21-13 name=__codelineno-21-13 href=#__codelineno-21-13></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Raise</span><span class=p>()</span>
443
- </span><span id=__span-21-14><a id=__codelineno-21-14 name=__codelineno-21-14 href=#__codelineno-21-14></a><span class=w> </span><span class=p>{</span>
444
- </span><span id=__span-21-15><a id=__codelineno-21-15 name=__codelineno-21-15 href=#__codelineno-21-15></a><span class=w> </span><span class=k>for</span><span class=w> </span><span class=p>(</span><span class=kt>int</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>listeners</span><span class=p>.</span><span class=n>Count</span><span class=w> </span><span class=o>-</span><span class=w> </span><span class=mi>1</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=w> </span><span class=o>&gt;=</span><span class=w> </span><span class=mi>0</span><span class=p>;</span><span class=w> </span><span class=n>i</span><span class=o>--</span><span class=p>)</span>
445
- </span><span id=__span-21-16><a id=__codelineno-21-16 name=__codelineno-21-16 href=#__codelineno-21-16></a><span class=w> </span><span class=n>listeners</span><span class=p>[</span><span class=n>i</span><span class=p>]</span><span class=o>?.</span><span class=n>Invoke</span><span class=p>();</span>
446
- </span><span id=__span-21-17><a id=__codelineno-21-17 name=__codelineno-21-17 href=#__codelineno-21-17></a><span class=w> </span><span class=p>}</span>
447
- </span><span id=__span-21-18><a id=__codelineno-21-18 name=__codelineno-21-18 href=#__codelineno-21-18></a>
448
- </span><span id=__span-21-19><a id=__codelineno-21-19 name=__codelineno-21-19 href=#__codelineno-21-19></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterListener</span><span class=p>(</span><span class=n>UnityAction</span><span class=w> </span><span class=n>listener</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>listeners</span><span class=p>.</span><span class=n>Add</span><span class=p>(</span><span class=n>listener</span><span class=p>);</span>
449
- </span><span id=__span-21-20><a id=__codelineno-21-20 name=__codelineno-21-20 href=#__codelineno-21-20></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>UnregisterListener</span><span class=p>(</span><span class=n>UnityAction</span><span class=w> </span><span class=n>listener</span><span class=p>)</span><span class=w> </span><span class=o>=&gt;</span><span class=w> </span><span class=n>listeners</span><span class=p>.</span><span class=n>Remove</span><span class=p>(</span><span class=n>listener</span><span class=p>);</span>
450
- </span><span id=__span-21-21><a id=__codelineno-21-21 name=__codelineno-21-21 href=#__codelineno-21-21></a><span class=p>}</span>
451
- </span><span id=__span-21-22><a id=__codelineno-21-22 name=__codelineno-21-22 href=#__codelineno-21-22></a>
452
- </span><span id=__span-21-23><a id=__codelineno-21-23 name=__codelineno-21-23 href=#__codelineno-21-23></a><span class=c1>// DxMessaging message (modern, type-safe)</span>
453
- </span><span id=__span-21-24><a id=__codelineno-21-24 name=__codelineno-21-24 href=#__codelineno-21-24></a><span class=na>[DxUntargetedMessage]</span>
454
- </span><span id=__span-21-25><a id=__codelineno-21-25 name=__codelineno-21-25 href=#__codelineno-21-25></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>SceneTransitionRequested</span><span class=w> </span><span class=p>{</span><span class=w> </span><span class=p>}</span>
455
- </span><span id=__span-21-26><a id=__codelineno-21-26 name=__codelineno-21-26 href=#__codelineno-21-26></a>
456
- </span><span id=__span-21-27><a id=__codelineno-21-27 name=__codelineno-21-27 href=#__codelineno-21-27></a><span class=c1>// Bridge: SOA Event → DxMessaging</span>
457
- </span><span id=__span-21-28><a id=__codelineno-21-28 name=__codelineno-21-28 href=#__codelineno-21-28></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>SOAEventBridge</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MonoBehaviour</span>
458
- </span><span id=__span-21-29><a id=__codelineno-21-29 name=__codelineno-21-29 href=#__codelineno-21-29></a><span class=p>{</span>
459
- </span><span id=__span-21-30><a id=__codelineno-21-30 name=__codelineno-21-30 href=#__codelineno-21-30></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>GameEvent</span><span class=w> </span><span class=n>onSceneTransitionSO</span><span class=p>;</span><span class=w> </span><span class=c1>// Designer-created asset</span>
460
- </span><span id=__span-21-31><a id=__codelineno-21-31 name=__codelineno-21-31 href=#__codelineno-21-31></a>
461
- </span><span id=__span-21-32><a id=__codelineno-21-32 name=__codelineno-21-32 href=#__codelineno-21-32></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnEnable</span><span class=p>()</span>
462
- </span><span id=__span-21-33><a id=__codelineno-21-33 name=__codelineno-21-33 href=#__codelineno-21-33></a><span class=w> </span><span class=p>{</span>
463
- </span><span id=__span-21-34><a id=__codelineno-21-34 name=__codelineno-21-34 href=#__codelineno-21-34></a><span class=w> </span><span class=n>onSceneTransitionSO</span><span class=p>.</span><span class=n>RegisterListener</span><span class=p>(</span><span class=n>OnSOAEvent</span><span class=p>);</span>
464
- </span><span id=__span-21-35><a id=__codelineno-21-35 name=__codelineno-21-35 href=#__codelineno-21-35></a><span class=w> </span><span class=p>}</span>
465
- </span><span id=__span-21-36><a id=__codelineno-21-36 name=__codelineno-21-36 href=#__codelineno-21-36></a>
466
- </span><span id=__span-21-37><a id=__codelineno-21-37 name=__codelineno-21-37 href=#__codelineno-21-37></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDisable</span><span class=p>()</span>
467
- </span><span id=__span-21-38><a id=__codelineno-21-38 name=__codelineno-21-38 href=#__codelineno-21-38></a><span class=w> </span><span class=p>{</span>
468
- </span><span id=__span-21-39><a id=__codelineno-21-39 name=__codelineno-21-39 href=#__codelineno-21-39></a><span class=w> </span><span class=n>onSceneTransitionSO</span><span class=p>.</span><span class=n>UnregisterListener</span><span class=p>(</span><span class=n>OnSOAEvent</span><span class=p>);</span>
469
- </span><span id=__span-21-40><a id=__codelineno-21-40 name=__codelineno-21-40 href=#__codelineno-21-40></a><span class=w> </span><span class=p>}</span>
470
- </span><span id=__span-21-41><a id=__codelineno-21-41 name=__codelineno-21-41 href=#__codelineno-21-41></a>
471
- </span><span id=__span-21-42><a id=__codelineno-21-42 name=__codelineno-21-42 href=#__codelineno-21-42></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnSOAEvent</span><span class=p>()</span>
472
- </span><span id=__span-21-43><a id=__codelineno-21-43 name=__codelineno-21-43 href=#__codelineno-21-43></a><span class=w> </span><span class=p>{</span>
473
- </span><span id=__span-21-44><a id=__codelineno-21-44 name=__codelineno-21-44 href=#__codelineno-21-44></a><span class=w> </span><span class=c1>// Forward to DxMessaging</span>
474
- </span><span id=__span-21-45><a id=__codelineno-21-45 name=__codelineno-21-45 href=#__codelineno-21-45></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>message</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>SceneTransitionRequested</span><span class=p>();</span>
475
- </span><span id=__span-21-46><a id=__codelineno-21-46 name=__codelineno-21-46 href=#__codelineno-21-46></a><span class=w> </span><span class=n>message</span><span class=p>.</span><span class=n>Emit</span><span class=p>();</span>
476
- </span><span id=__span-21-47><a id=__codelineno-21-47 name=__codelineno-21-47 href=#__codelineno-21-47></a><span class=w> </span><span class=p>}</span>
477
- </span><span id=__span-21-48><a id=__codelineno-21-48 name=__codelineno-21-48 href=#__codelineno-21-48></a><span class=p>}</span>
478
- </span><span id=__span-21-49><a id=__codelineno-21-49 name=__codelineno-21-49 href=#__codelineno-21-49></a>
479
- </span><span id=__span-21-50><a id=__codelineno-21-50 name=__codelineno-21-50 href=#__codelineno-21-50></a><span class=c1>// Modern DxMessaging listeners (no SO dependency)</span>
480
- </span><span id=__span-21-51><a id=__codelineno-21-51 name=__codelineno-21-51 href=#__codelineno-21-51></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>AudioSystem</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span>
481
- </span><span id=__span-21-52><a id=__codelineno-21-52 name=__codelineno-21-52 href=#__codelineno-21-52></a><span class=p>{</span>
482
- </span><span id=__span-21-53><a id=__codelineno-21-53 name=__codelineno-21-53 href=#__codelineno-21-53></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span>
483
- </span><span id=__span-21-54><a id=__codelineno-21-54 name=__codelineno-21-54 href=#__codelineno-21-54></a><span class=w> </span><span class=p>{</span>
484
- </span><span id=__span-21-55><a id=__codelineno-21-55 name=__codelineno-21-55 href=#__codelineno-21-55></a><span class=w> </span><span class=k>base</span><span class=p>.</span><span class=n>RegisterMessageHandlers</span><span class=p>();</span>
485
- </span><span id=__span-21-56><a id=__codelineno-21-56 name=__codelineno-21-56 href=#__codelineno-21-56></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterUntargeted</span><span class=o>&lt;</span><span class=n>SceneTransitionRequested</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnTransition</span><span class=p>);</span>
486
- </span><span id=__span-21-57><a id=__codelineno-21-57 name=__codelineno-21-57 href=#__codelineno-21-57></a><span class=w> </span><span class=p>}</span>
487
- </span><span id=__span-21-58><a id=__codelineno-21-58 name=__codelineno-21-58 href=#__codelineno-21-58></a>
488
- </span><span id=__span-21-59><a id=__codelineno-21-59 name=__codelineno-21-59 href=#__codelineno-21-59></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnTransition</span><span class=p>(</span><span class=k>ref</span><span class=w> </span><span class=n>SceneTransitionRequested</span><span class=w> </span><span class=n>msg</span><span class=p>)</span>
489
- </span><span id=__span-21-60><a id=__codelineno-21-60 name=__codelineno-21-60 href=#__codelineno-21-60></a><span class=w> </span><span class=p>{</span>
490
- </span><span id=__span-21-61><a id=__codelineno-21-61 name=__codelineno-21-61 href=#__codelineno-21-61></a><span class=w> </span><span class=n>FadeOutMusic</span><span class=p>();</span><span class=w> </span><span class=c1>// Type-safe, debuggable via DxMessaging Inspector</span>
491
- </span><span id=__span-21-62><a id=__codelineno-21-62 name=__codelineno-21-62 href=#__codelineno-21-62></a><span class=w> </span><span class=p>}</span>
492
- </span><span id=__span-21-63><a id=__codelineno-21-63 name=__codelineno-21-63 href=#__codelineno-21-63></a><span class=p>}</span>
493
- </span></code></pre></div> <h5 id=benefits>Benefits<a class=headerlink href=#benefits title="Anchor link to this section">&para;</a></h5> <ul> <li>✅ Designers create events in Inspector (SOA workflow preserved)</li> <li>✅ Code uses DxMessaging (type-safe, lifecycle-safe)</li> </ul> <h6 id=drawbacks>Drawbacks<a class=headerlink href=#drawbacks title="Anchor link to this section">&para;</a></h6> <ul> <li>⚠️ Bridge boilerplate for each SOA event</li> <li>⚠️ Double registration (SOA listener + DxMessaging handler)</li> </ul> <h3 id=pattern-b-proper-scriptableobject-usage-recommended>Pattern B: Proper ScriptableObject Usage (Recommended)<a class=headerlink href=#pattern-b-proper-scriptableobject-usage-recommended title="Anchor link to this section">&para;</a></h3> <p><strong>Use case:</strong> ScriptableObjects for immutable config data, DxMessaging for runtime events.</p> <p><strong>Strategy:</strong> Use each tool for its intended purpose; avoid bridging.</p> <blockquote> <p><strong>Important:</strong> This pattern uses ScriptableObjects CORRECTLY (immutable design data), NOT as SOA (mutable runtime state). This is standard Unity best practice, not SOA. If you're only using SOs for config data like this, you don't need SOA patterns at all.</p> </blockquote> <h4 id=example-combat-with-designer-tunable-data>Example: Combat with Designer-Tunable Data<a class=headerlink href=#example-combat-with-designer-tunable-data title="Anchor link to this section">&para;</a></h4> <div class="language-csharp highlight"><span class=filename>C#</span><pre><span></span><code><span id=__span-22-1><a id=__codelineno-22-1 name=__codelineno-22-1 href=#__codelineno-22-1></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Messages</span><span class=p>;</span>
494
- </span><span id=__span-22-2><a id=__codelineno-22-2 name=__codelineno-22-2 href=#__codelineno-22-2></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Core.Attributes</span><span class=p>;</span>
495
- </span><span id=__span-22-3><a id=__codelineno-22-3 name=__codelineno-22-3 href=#__codelineno-22-3></a><span class=k>using</span><span class=w> </span><span class=nn>DxMessaging.Unity</span><span class=p>;</span>
496
- </span><span id=__span-22-4><a id=__codelineno-22-4 name=__codelineno-22-4 href=#__codelineno-22-4></a><span class=k>using</span><span class=w> </span><span class=nn>UnityEngine</span><span class=p>;</span>
497
- </span><span id=__span-22-5><a id=__codelineno-22-5 name=__codelineno-22-5 href=#__codelineno-22-5></a>
498
- </span><span id=__span-22-6><a id=__codelineno-22-6 name=__codelineno-22-6 href=#__codelineno-22-6></a><span class=c1>// ScriptableObject: Designer-tunable balance data (immutable at runtime)</span>
499
- </span><span id=__span-22-7><a id=__codelineno-22-7 name=__codelineno-22-7 href=#__codelineno-22-7></a><span class=c1>// This is CORRECT SO usage, NOT SOA</span>
500
- </span><span id=__span-22-8><a id=__codelineno-22-8 name=__codelineno-22-8 href=#__codelineno-22-8></a><span class=na>[CreateAssetMenu(menuName = &quot;Config/Weapon Stats&quot;)]</span>
501
- </span><span id=__span-22-9><a id=__codelineno-22-9 name=__codelineno-22-9 href=#__codelineno-22-9></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>WeaponStats</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>ScriptableObject</span>
502
- </span><span id=__span-22-10><a id=__codelineno-22-10 name=__codelineno-22-10 href=#__codelineno-22-10></a><span class=p>{</span>
503
- </span><span id=__span-22-11><a id=__codelineno-22-11 name=__codelineno-22-11 href=#__codelineno-22-11></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>baseDamage</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mi>10</span><span class=p>;</span><span class=w> </span><span class=c1>// Designer tweaks in Inspector</span>
504
- </span><span id=__span-22-12><a id=__codelineno-22-12 name=__codelineno-22-12 href=#__codelineno-22-12></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=kt>float</span><span class=w> </span><span class=n>critMultiplier</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=mf>2f</span><span class=p>;</span>
505
- </span><span id=__span-22-13><a id=__codelineno-22-13 name=__codelineno-22-13 href=#__codelineno-22-13></a><span class=p>}</span>
506
- </span><span id=__span-22-14><a id=__codelineno-22-14 name=__codelineno-22-14 href=#__codelineno-22-14></a>
507
- </span><span id=__span-22-15><a id=__codelineno-22-15 name=__codelineno-22-15 href=#__codelineno-22-15></a><span class=c1>// DxMessaging: Runtime event (code-driven)</span>
508
- </span><span id=__span-22-16><a id=__codelineno-22-16 name=__codelineno-22-16 href=#__codelineno-22-16></a><span class=na>[DxBroadcastMessage]</span>
509
- </span><span id=__span-22-17><a id=__codelineno-22-17 name=__codelineno-22-17 href=#__codelineno-22-17></a><span class=na>[DxAutoConstructor]</span>
510
- </span><span id=__span-22-18><a id=__codelineno-22-18 name=__codelineno-22-18 href=#__codelineno-22-18></a><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=k>partial</span><span class=w> </span><span class=k>struct</span><span class=w> </span><span class=nc>DamageDealt</span>
511
- </span><span id=__span-22-19><a id=__codelineno-22-19 name=__codelineno-22-19 href=#__codelineno-22-19></a><span class=p>{</span>
512
- </span><span id=__span-22-20><a id=__codelineno-22-20 name=__codelineno-22-20 href=#__codelineno-22-20></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>amount</span><span class=p>;</span>
513
- </span><span id=__span-22-21><a id=__codelineno-22-21 name=__codelineno-22-21 href=#__codelineno-22-21></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>readonly</span><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=n>wasCrit</span><span class=p>;</span>
514
- </span><span id=__span-22-22><a id=__codelineno-22-22 name=__codelineno-22-22 href=#__codelineno-22-22></a><span class=p>}</span>
515
- </span><span id=__span-22-23><a id=__codelineno-22-23 name=__codelineno-22-23 href=#__codelineno-22-23></a>
516
- </span><span id=__span-22-24><a id=__codelineno-22-24 name=__codelineno-22-24 href=#__codelineno-22-24></a><span class=c1>// Combat system: Reads immutable SO data, emits DxMessaging events</span>
517
- </span><span id=__span-22-25><a id=__codelineno-22-25 name=__codelineno-22-25 href=#__codelineno-22-25></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>Weapon</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span>
518
- </span><span id=__span-22-26><a id=__codelineno-22-26 name=__codelineno-22-26 href=#__codelineno-22-26></a><span class=p>{</span>
519
- </span><span id=__span-22-27><a id=__codelineno-22-27 name=__codelineno-22-27 href=#__codelineno-22-27></a><span class=w> </span><span class=na>[SerializeField]</span><span class=w> </span><span class=k>private</span><span class=w> </span><span class=n>WeaponStats</span><span class=w> </span><span class=n>stats</span><span class=p>;</span><span class=w> </span><span class=c1>// Immutable config (correct SO usage)</span>
520
- </span><span id=__span-22-28><a id=__codelineno-22-28 name=__codelineno-22-28 href=#__codelineno-22-28></a>
521
- </span><span id=__span-22-29><a id=__codelineno-22-29 name=__codelineno-22-29 href=#__codelineno-22-29></a><span class=w> </span><span class=k>public</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>Fire</span><span class=p>()</span>
522
- </span><span id=__span-22-30><a id=__codelineno-22-30 name=__codelineno-22-30 href=#__codelineno-22-30></a><span class=w> </span><span class=p>{</span>
523
- </span><span id=__span-22-31><a id=__codelineno-22-31 name=__codelineno-22-31 href=#__codelineno-22-31></a><span class=w> </span><span class=kt>bool</span><span class=w> </span><span class=n>crit</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Random</span><span class=p>.</span><span class=k>value</span><span class=w> </span><span class=o>&lt;</span><span class=w> </span><span class=mf>0.1f</span><span class=p>;</span>
524
- </span><span id=__span-22-32><a id=__codelineno-22-32 name=__codelineno-22-32 href=#__codelineno-22-32></a><span class=w> </span><span class=kt>int</span><span class=w> </span><span class=n>damage</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Mathf</span><span class=p>.</span><span class=n>RoundToInt</span><span class=p>(</span><span class=n>stats</span><span class=p>.</span><span class=n>baseDamage</span><span class=w> </span><span class=o>*</span><span class=w> </span><span class=p>(</span><span class=n>crit</span><span class=w> </span><span class=o>?</span><span class=w> </span><span class=n>stats</span><span class=p>.</span><span class=n>critMultiplier</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=mf>1f</span><span class=p>));</span>
525
- </span><span id=__span-22-33><a id=__codelineno-22-33 name=__codelineno-22-33 href=#__codelineno-22-33></a>
526
- </span><span id=__span-22-34><a id=__codelineno-22-34 name=__codelineno-22-34 href=#__codelineno-22-34></a><span class=w> </span><span class=kt>var</span><span class=w> </span><span class=n>msg</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=k>new</span><span class=w> </span><span class=n>DamageDealt</span><span class=p>(</span><span class=n>damage</span><span class=p>,</span><span class=w> </span><span class=n>crit</span><span class=p>);</span>
527
- </span><span id=__span-22-35><a id=__codelineno-22-35 name=__codelineno-22-35 href=#__codelineno-22-35></a><span class=w> </span><span class=n>msg</span><span class=p>.</span><span class=n>EmitComponentBroadcast</span><span class=p>(</span><span class=k>this</span><span class=p>);</span><span class=w> </span><span class=c1>// Runtime event via DxMessaging</span>
528
- </span><span id=__span-22-36><a id=__codelineno-22-36 name=__codelineno-22-36 href=#__codelineno-22-36></a><span class=w> </span><span class=p>}</span>
529
- </span><span id=__span-22-37><a id=__codelineno-22-37 name=__codelineno-22-37 href=#__codelineno-22-37></a><span class=p>}</span>
530
- </span><span id=__span-22-38><a id=__codelineno-22-38 name=__codelineno-22-38 href=#__codelineno-22-38></a>
531
- </span><span id=__span-22-39><a id=__codelineno-22-39 name=__codelineno-22-39 href=#__codelineno-22-39></a><span class=c1>// Analytics: Pure DxMessaging (no SOA dependency)</span>
532
- </span><span id=__span-22-40><a id=__codelineno-22-40 name=__codelineno-22-40 href=#__codelineno-22-40></a><span class=k>public</span><span class=w> </span><span class=k>class</span><span class=w> </span><span class=nc>CombatAnalytics</span><span class=w> </span><span class=p>:</span><span class=w> </span><span class=n>MessageAwareComponent</span>
533
- </span><span id=__span-22-41><a id=__codelineno-22-41 name=__codelineno-22-41 href=#__codelineno-22-41></a><span class=p>{</span>
534
- </span><span id=__span-22-42><a id=__codelineno-22-42 name=__codelineno-22-42 href=#__codelineno-22-42></a><span class=w> </span><span class=k>protected</span><span class=w> </span><span class=k>override</span><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>RegisterMessageHandlers</span><span class=p>()</span>
535
- </span><span id=__span-22-43><a id=__codelineno-22-43 name=__codelineno-22-43 href=#__codelineno-22-43></a><span class=w> </span><span class=p>{</span>
536
- </span><span id=__span-22-44><a id=__codelineno-22-44 name=__codelineno-22-44 href=#__codelineno-22-44></a><span class=w> </span><span class=k>base</span><span class=p>.</span><span class=n>RegisterMessageHandlers</span><span class=p>();</span>
537
- </span><span id=__span-22-45><a id=__codelineno-22-45 name=__codelineno-22-45 href=#__codelineno-22-45></a><span class=w> </span><span class=n>_</span><span class=w> </span><span class=o>=</span><span class=w> </span><span class=n>Token</span><span class=p>.</span><span class=n>RegisterBroadcastWithoutSource</span><span class=o>&lt;</span><span class=n>DamageDealt</span><span class=o>&gt;</span><span class=p>(</span><span class=n>OnDamage</span><span class=p>);</span>
538
- </span><span id=__span-22-46><a id=__codelineno-22-46 name=__codelineno-22-46 href=#__codelineno-22-46></a><span class=w> </span><span class=p>}</span>
539
- </span><span id=__span-22-47><a id=__codelineno-22-47 name=__codelineno-22-47 href=#__codelineno-22-47></a>
540
- </span><span id=__span-22-48><a id=__codelineno-22-48 name=__codelineno-22-48 href=#__codelineno-22-48></a><span class=w> </span><span class=k>void</span><span class=w> </span><span class=nf>OnDamage</span><span class=p>(</span><span class=n>InstanceId</span><span class=w> </span><span class=n>source</span><span class=p>,</span><span class=w> </span><span class=n>DamageDealt</span><span class=w> </span><span class=n>msg</span><span class=p>)</span>
541
- </span><span id=__span-22-49><a id=__codelineno-22-49 name=__codelineno-22-49 href=#__codelineno-22-49></a><span class=w> </span><span class=p>{</span>
542
- </span><span id=__span-22-50><a id=__codelineno-22-50 name=__codelineno-22-50 href=#__codelineno-22-50></a><span class=w> </span><span class=n>Debug</span><span class=p>.</span><span class=n>Log</span><span class=p>(</span><span class=s>$&quot;{source} dealt {msg.amount} damage (crit: {msg.wasCrit})&quot;</span><span class=p>);</span>
543
- </span><span id=__span-22-51><a id=__codelineno-22-51 name=__codelineno-22-51 href=#__codelineno-22-51></a><span class=w> </span><span class=p>}</span>
544
- </span><span id=__span-22-52><a id=__codelineno-22-52 name=__codelineno-22-52 href=#__codelineno-22-52></a><span class=p>}</span>
545
- </span></code></pre></div> <h5 id=benefits_1>Benefits<a class=headerlink href=#benefits_1 title="Anchor link to this section">&para;</a></h5> <ul> <li>✅ <strong>Best of both worlds</strong> - ScriptableObjects for static configs, DxMessaging for runtime events</li> <li>✅ No bridging overhead</li> <li>✅ Uses each system correctly: SOs for their intended purpose (immutable design data), messaging for runtime communication</li> <li>✅ This is NOT SOA - it's proper Unity architecture</li> </ul> <h6 id=this-pattern-separates-concerns-clearly>This pattern separates concerns clearly<a class=headerlink href=#this-pattern-separates-concerns-clearly title="Anchor link to this section">&para;</a></h6> <h3 id=when-to-use-each-pattern>When to Use Each Pattern<a class=headerlink href=#when-to-use-each-pattern title="Anchor link to this section">&para;</a></h3> <table> <thead> <tr> <th>Pattern</th> <th>Use When</th> <th>Complexity</th> <th>Performance</th> </tr> </thead> <tbody> <tr> <td><strong>A: SOA → DxMessaging</strong></td> <td>Designers create SOA events, modern code uses messaging</td> <td>Medium</td> <td>⚠️ Medium</td> </tr> <tr> <td><strong>B: Proper SO Usage</strong></td> <td>Immutable configs only, messaging for events</td> <td>Low</td> <td>✅ Good</td> </tr> <tr> <td><strong>None (Pure DxMessaging)</strong></td> <td>Greenfield project or full SOA migration</td> <td>Lowest</td> <td>✅ Best</td> </tr> </tbody> </table> <h3 id=migration-path-soa--dxmessaging>Migration Path: SOA → DxMessaging<a class=headerlink href=#migration-path-soa--dxmessaging title="Anchor link to this section">&para;</a></h3> <p>If you're moving away from SOA:</p> <ol> <li><strong>Phase 1:</strong> Identify SOA event usage (GameEvent/GameEventListener patterns)</li> <li><strong>Phase 2:</strong> Create equivalent DxMessaging messages (Untargeted/Broadcast)</li> <li><strong>Phase 3:</strong> Add bridges (Pattern A or B) to maintain compatibility</li> <li><strong>Phase 4:</strong> Migrate listeners to DxMessaging incrementally</li> <li><strong>Phase 5:</strong> Remove bridges and SOA assets once all references gone</li> </ol> <p>For SOA variables:</p> <ol> <li>Convert read-only SO configs → Keep as-is (correct SO usage) or move to JSON/ScriptableObjects for data</li> <li>Convert mutable SO variables → DxMessaging messages or DI-injected services</li> <li>Convert RuntimeSets → DxMessaging global observers (<code>RegisterBroadcastWithoutSource</code>)</li> </ol> <h3 id=final-recommendations>Final Recommendations<a class=headerlink href=#final-recommendations title="Anchor link to this section">&para;</a></h3> <h4 id=if-youre-using-soa>If you're using SOA<a class=headerlink href=#if-youre-using-soa title="Anchor link to this section">&para;</a></h4> <ul> <li>✅ <strong>Do:</strong> Use Pattern B (Proper SO Usage) - SOs for immutable configs ONLY, DxMessaging for runtime events</li> <li>✅ <strong>Do:</strong> Use Pattern A to bridge existing SOA GameEvent assets to DxMessaging during migration</li> <li>✅ <strong>Do:</strong> Read <a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-ScriptableObject Architecture</a> to understand risks</li> <li>✅ <strong>Do:</strong> Consider gradual migration to DxMessaging or DI frameworks</li> <li>❌ <strong>Don't:</strong> Use SOs for mutable runtime state (health, scores, etc.)</li> <li>❌ <strong>Don't:</strong> Create new SOA event assets—use DxMessaging messages instead</li> </ul> <h5 id=if-youre-starting-fresh>If you're starting fresh<a class=headerlink href=#if-youre-starting-fresh title="Anchor link to this section">&para;</a></h5> <ul> <li>✅ <strong>Do:</strong> Use DxMessaging for all messaging/events</li> <li>✅ <strong>Do:</strong> Use ScriptableObjects ONLY for immutable design data (weapon stats, level configs)</li> <li>✅ <strong>Do:</strong> Consider DI frameworks (Zenject/VContainer) for service dependencies</li> <li>❌ <strong>Don't:</strong> Adopt SOA's GameEvent/Variable patterns—they're superseded by better tools</li> </ul> <h6 id=resources>Resources<a class=headerlink href=#resources title="Anchor link to this section">&para;</a></h6> <ul> <li><a href=https://github.com/cathei/AntiScriptableObjectArchitecture>Anti-ScriptableObject Architecture</a> - Detailed critique</li> <li><a href="https://www.youtube.com/watch?v=raQ3iHhE_Kk">Ryan Hipple Unite 2017 Talk</a> - Original SOA presentation</li> <li><a href=https://unity.com/how-to/architect-game-code-scriptable-objects>Unity Official Guide</a> - Unity's perspective</li> <li><a href=../../integrations/ >DxMessaging DI Integrations</a> - Better alternatives for dependency management</li> <li><a href=https://github.com/modesttree/Zenject>Zenject</a> - Recommended DI framework</li> <li><a href=https://github.com/hadashiA/VContainer>VContainer</a> - Lightweight DI alternative</li> </ul> <hr> <h2 id=related-documentation>Related Documentation<a class=headerlink href=#related-documentation title="Anchor link to this section">&para;</a></h2> <h3 id=learn-the-basics-first>Learn the Basics First?<a class=headerlink href=#learn-the-basics-first title="Anchor link to this section">&para;</a></h3> <ul> <li>→ <a href=../../getting-started/getting-started/ >Getting Started</a> (10 min) — Complete introduction</li> <li>→ <a href=../../concepts/message-types/ >Message Types</a> (10 min) — When to use what</li> <li>→ <a href=../../getting-started/visual-guide/ >Visual Guide</a> (5 min) — Beginner-friendly pictures</li> </ul> <h3 id=try-real-examples>Try Real Examples<a class=headerlink href=#try-real-examples title="Anchor link to this section">&para;</a></h3> <ul> <li>→ <a href=https://github.com/wallstop/DxMessaging/blob/master/Samples~/Mini%20Combat/README.md>Mini Combat sample</a> — Working combat example</li> <li>→ <a href=https://github.com/wallstop/DxMessaging/blob/master/Samples~/UI%20Buttons%20%2B%20Inspector/README.md>UI Buttons + Inspector sample</a> — Interactive diagnostics</li> <li>→ <a href=../../examples/end-to-end/ >End-to-End Example</a> — Complete feature walkthrough</li> </ul> <h3 id=deep-dives>Deep Dives<a class=headerlink href=#deep-dives title="Anchor link to this section">&para;</a></h3> <ul> <li>→ <a href=../../concepts/interceptors-and-ordering/ >Interceptors &amp; Ordering</a> — Control execution flow</li> <li>→ <a href=../../architecture/design-and-architecture/ >Design &amp; Architecture</a> — Internals and optimizations</li> <li>→ <a href=../../architecture/performance/ >Performance</a> — Benchmarks and tuning</li> </ul> <h3 id=reference>Reference<a class=headerlink href=#reference title="Anchor link to this section">&para;</a></h3> <ul> <li>→ <a href=../../reference/quick-reference/ >Quick Reference</a> — Cheat sheet</li> <li>→ <a href=../../reference/reference/ >API Reference</a> — Complete API</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-timeago" title="January 27, 2026 04:59:07 UTC"><span class=timeago datetime=2026-01-27T04:59:07+00:00 locale=en></span></span><span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="January 27, 2026 04:59:07 UTC">2026-01-27</span> </span> </aside> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../../concepts/interceptors-and-ordering/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Interceptors & Ordering"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Interceptors & Ordering </div> </div> </a> <a href=../unity-integration/ class="md-footer__link md-footer__link--next" aria-label="Next: Unity Integration"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> Unity Integration </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2017-2026 Wallstop Studios </div> </div> <div class=md-social> <a href=https://github.com/wallstop target=_blank rel=noopener title="Wallstop Studios on GitHub" class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"annotate": null, "base": "../..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.indexes", "navigation.instant", "navigation.instant.prefetch", "navigation.instant.progress", "navigation.path", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script> <script src=../../assets/javascripts/bundle.79ae519e.min.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> <script src=https://unpkg.com/mermaid@11/dist/mermaid.min.js></script> <script src=../../javascripts/mermaid-config.js></script> <script src=../../javascripts/csharp-highlight.js></script> </body> </html>