com.wallstop-studios.dxmessaging 3.2.0 → 3.2.1

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 (61) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/Editor/Analyzers/DxMessagingConsoleHarvester.cs +8 -8
  3. package/Editor/CustomEditors/MessageAwareComponentFallbackEditor.cs +171 -13
  4. package/Editor/CustomEditors/MessageAwareComponentInspectorOverlay.cs +391 -96
  5. package/Editor/CustomEditors/MessageAwareComponentInspectorView.cs +279 -0
  6. package/Editor/CustomEditors/MessageAwareComponentInspectorView.cs.meta +11 -0
  7. package/Editor/DxMessagingEditorPalette.cs +66 -0
  8. package/Editor/DxMessagingEditorPalette.cs.meta +11 -0
  9. package/Editor/DxMessagingEditorTheme.cs +200 -0
  10. package/Editor/DxMessagingEditorTheme.cs.meta +11 -0
  11. package/Editor/Icons/dxmessaging-icon-256.png +0 -0
  12. package/Editor/Icons/dxmessaging-icon-256.png.meta +156 -0
  13. package/Editor/Icons/dxmessaging-icon-32.png +0 -0
  14. package/Editor/Icons/dxmessaging-icon-32.png.meta +156 -0
  15. package/Editor/Icons/dxmessaging-icon-48.png +0 -0
  16. package/Editor/Icons/dxmessaging-icon-48.png.meta +156 -0
  17. package/Editor/Icons.meta +8 -0
  18. package/Editor/Settings/DxMessagingSettingsProvider.cs +368 -33
  19. package/Editor/Testing/MessagingComponentEditorHarness.cs +11 -4
  20. package/Editor/Theme/DxMessagingTheme.uss +255 -0
  21. package/Editor/Theme/DxMessagingTheme.uss.meta +11 -0
  22. package/Editor/Theme/DxTokens.uss +90 -0
  23. package/Editor/Theme/DxTokens.uss.meta +11 -0
  24. package/Editor/Theme.meta +8 -0
  25. package/Editor/Windows/DxMessagingFlowGraphWindow.cs +5513 -0
  26. package/Editor/Windows/DxMessagingFlowGraphWindow.cs.meta +11 -0
  27. package/Editor/Windows/DxMessagingMessageMonitorWindow.cs +2288 -0
  28. package/Editor/Windows/DxMessagingMessageMonitorWindow.cs.meta +11 -0
  29. package/Editor/Windows.meta +8 -0
  30. package/README.md +84 -35
  31. package/Runtime/AssemblyInfo.cs +1 -0
  32. package/Runtime/Core/Diagnostics/MessageEmissionData.cs +29 -1
  33. package/Runtime/Core/Extensions/MessageExtensions.cs +4 -5
  34. package/Runtime/Core/Helper/MessageCache.cs +56 -23
  35. package/Runtime/Core/Internal/FlatDispatch.cs +32 -0
  36. package/Runtime/Core/Internal/TypedSlots.cs +3 -7
  37. package/Runtime/Core/MessageBus/MessageBus.cs +577 -142
  38. package/Runtime/Core/MessageBus/RegistrationLog.cs +25 -12
  39. package/Runtime/Core/MessageHandler.cs +774 -786
  40. package/Runtime/Core/MessageRegistrationHandle.cs +19 -5
  41. package/Runtime/Core/MessageRegistrationToken.cs +1080 -520
  42. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingExerciser.cs +173 -0
  43. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingExerciser.cs.meta +11 -0
  44. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingExerciser.unity +424 -0
  45. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingExerciser.unity.meta +7 -0
  46. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingReceiver.cs +185 -0
  47. package/Samples~/Diagnostics Tooling Exerciser/DiagnosticsToolingReceiver.cs.meta +11 -0
  48. package/Samples~/Diagnostics Tooling Exerciser/Messages.cs +46 -0
  49. package/Samples~/Diagnostics Tooling Exerciser/Messages.cs.meta +11 -0
  50. package/Samples~/Diagnostics Tooling Exerciser/README.md +53 -0
  51. package/Samples~/Diagnostics Tooling Exerciser/README.md.meta +7 -0
  52. package/Samples~/Diagnostics Tooling Exerciser/WallstopStudios.DxMessaging.DiagnosticsToolingExerciser.Sample.asmdef +13 -0
  53. package/Samples~/Diagnostics Tooling Exerciser/WallstopStudios.DxMessaging.DiagnosticsToolingExerciser.Sample.asmdef.meta +7 -0
  54. package/Samples~/Diagnostics Tooling Exerciser.meta +8 -0
  55. package/Samples~/Mini Combat/README.md +1 -1
  56. package/Samples~/Mini Combat/Walkthrough.md +3 -3
  57. package/docs/images/DxMessaging-banner.svg +79 -0
  58. package/docs/images/DxMessaging-banner.svg.meta +53 -0
  59. package/docs/images.meta +8 -0
  60. package/docs.meta +8 -0
  61. package/package.json +13 -4
@@ -0,0 +1,255 @@
1
+ /* ============================================================
2
+ * DxMessaging Theme Components (built on DxTokens.uss)
3
+ * Reusable USS classes for editor tooling. Load AFTER DxTokens.uss.
4
+ *
5
+ * FONTS: Unity editor UI uses the built-in font by default. To use
6
+ * the brand fonts, import the TTFs (see README) and uncomment the
7
+ * -unity-font-definition lines below.
8
+ * ============================================================ */
9
+
10
+ /* .dx-brand-font { -unity-font-definition: url("/Packages/com.wallstop-studios.dxmessaging/Editor/Fonts/SpaceGrotesk-Bold.ttf"); } */
11
+ /* .dx-mono { -unity-font-definition: url("/Packages/com.wallstop-studios.dxmessaging/Editor/Fonts/JetBrainsMono-Regular.ttf"); } */
12
+
13
+ /* ---------- window shell ---------- */
14
+ .dx-window {
15
+ flex-grow: 1;
16
+ background-color: var(--dx-tool-window);
17
+ color: var(--dx-text);
18
+ font-size: 12px;
19
+ }
20
+
21
+ /* ---------- toolbar ---------- */
22
+ .dx-toolbar {
23
+ flex-direction: row;
24
+ align-items: center;
25
+ height: 40px;
26
+ padding-left: 8px;
27
+ padding-right: 8px;
28
+ background-color: var(--dx-tool-toolbar);
29
+ border-bottom-width: 1px;
30
+ border-bottom-color: var(--dx-tool-border-soft);
31
+ }
32
+ .dx-sep {
33
+ width: 1px;
34
+ height: 20px;
35
+ margin-left: 4px;
36
+ margin-right: 4px;
37
+ background-color: var(--dx-tool-btn-border);
38
+ }
39
+ .dx-tool-btn {
40
+ height: 26px;
41
+ min-width: 26px;
42
+ padding-left: 8px;
43
+ padding-right: 8px;
44
+ margin-right: 6px;
45
+ align-items: center;
46
+ justify-content: center;
47
+ background-color: var(--dx-tool-btn);
48
+ border-width: 1px;
49
+ border-color: var(--dx-tool-btn-border);
50
+ border-radius: var(--dx-r-btn);
51
+ color: var(--dx-text);
52
+ }
53
+ .dx-tool-btn:hover { background-color: var(--dx-tool-btn-hover); }
54
+
55
+ /* record toggle */
56
+ .dx-record {
57
+ flex-direction: row;
58
+ align-items: center;
59
+ height: 26px;
60
+ padding-left: 10px;
61
+ padding-right: 11px;
62
+ margin-right: 6px;
63
+ background-color: var(--dx-tool-btn);
64
+ border-width: 1px;
65
+ border-color: var(--dx-tool-btn-border);
66
+ border-radius: var(--dx-r-btn);
67
+ color: var(--dx-text);
68
+ }
69
+ .dx-record > .unity-toggle__input { display: none; }
70
+ .dx-record:checked { border-color: var(--dx-record); }
71
+
72
+ /* search */
73
+ .dx-search {
74
+ width: 260px;
75
+ margin-left: 2px;
76
+ margin-right: 2px;
77
+ }
78
+
79
+ /* ---------- taxonomy chips (U / T / B) ---------- */
80
+ .dx-chip {
81
+ width: 22px;
82
+ height: 20px;
83
+ margin-right: 6px;
84
+ border-radius: var(--dx-r-chip);
85
+ -unity-text-align: middle-center;
86
+ -unity-font-style: bold;
87
+ font-size: 10px;
88
+ color: #0d1117;
89
+ }
90
+ .dx-chip--u { background-color: var(--dx-untargeted); }
91
+ .dx-chip--t { background-color: var(--dx-targeted); }
92
+ .dx-chip--b { background-color: var(--dx-broadcast); }
93
+ .dx-filter { opacity: 0.45; }
94
+ .dx-filter:checked { opacity: 1; }
95
+
96
+ /* taxonomy dots */
97
+ .dx-dot { width: 7px; height: 7px; border-radius: 4px; margin-right: 6px; }
98
+ .dx-dot--u { background-color: var(--dx-untargeted); }
99
+ .dx-dot--t { background-color: var(--dx-targeted); }
100
+ .dx-dot--b { background-color: var(--dx-broadcast); }
101
+
102
+ /* type badge in detail header */
103
+ .dx-typebadge {
104
+ padding-left: 8px;
105
+ padding-right: 8px;
106
+ padding-top: 3px;
107
+ padding-bottom: 3px;
108
+ border-radius: var(--dx-r-chip);
109
+ -unity-font-style: bold;
110
+ font-size: 10px;
111
+ color: #0d1117;
112
+ }
113
+ .dx-typebadge--u { background-color: var(--dx-untargeted); }
114
+ .dx-typebadge--t { background-color: var(--dx-targeted); }
115
+ .dx-typebadge--b { background-color: var(--dx-broadcast); }
116
+
117
+ /* ---------- list ---------- */
118
+ .dx-list-header {
119
+ flex-direction: row;
120
+ align-items: center;
121
+ height: 26px;
122
+ background-color: var(--dx-tool-header);
123
+ border-bottom-width: 1px;
124
+ border-bottom-color: var(--dx-tool-border-soft);
125
+ color: var(--dx-text-muted);
126
+ font-size: 9px;
127
+ -unity-font-style: bold;
128
+ }
129
+ .dx-col-time { width: 78px; padding-left: 14px; }
130
+ .dx-col-type { width: 110px; }
131
+ .dx-col-msg { flex-grow: 1; flex-shrink: 1; }
132
+ .dx-col-route { width: 210px; }
133
+ .dx-col-count { width: 36px; -unity-text-align: middle-center; }
134
+
135
+ .dx-row {
136
+ flex-direction: row;
137
+ align-items: center;
138
+ height: 28px;
139
+ background-color: var(--dx-tool-row-a);
140
+ }
141
+ .dx-row--alt { background-color: var(--dx-tool-row-b); }
142
+ .dx-row__time { width: 78px; padding-left: 14px; color: var(--dx-text-muted); font-size: 10px; }
143
+ .dx-row__type { width: 110px; flex-direction: row; align-items: center; }
144
+ .dx-row__msg { flex-grow: 1; flex-shrink: 1; color: var(--dx-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
145
+ .dx-row__route { width: 210px; color: var(--dx-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
146
+ .dx-row__count { width: 36px; -unity-text-align: middle-center; color: var(--dx-text-muted); font-size: 10px; }
147
+
148
+ .unity-collection-view__item--selected .dx-row,
149
+ .unity-list-view__item--selected .dx-row { background-color: var(--dx-tool-selected); }
150
+ .unity-collection-view__item--selected .dx-row__msg,
151
+ .unity-list-view__item--selected .dx-row__msg { color: #ffffff; -unity-font-style: bold; }
152
+ .unity-collection-view__item--selected .dx-row__time,
153
+ .unity-collection-view__item--selected .dx-row__route,
154
+ .unity-collection-view__item--selected .dx-row__count { color: #d5e3f0; }
155
+
156
+ /* ---------- detail pane ---------- */
157
+ .dx-detail { background-color: #2f2f2f; padding-left: 14px; padding-right: 14px; padding-top: 12px; padding-bottom: 12px; }
158
+ .dx-theme.dx-light .dx-detail { background-color: #efeadf; }
159
+
160
+ .dx-detail__head { flex-direction: row; align-items: center; margin-bottom: 10px; }
161
+ .dx-detail__title { -unity-font-style: bold; font-size: 16px; color: var(--dx-text); margin-left: 9px; }
162
+ .dx-detail__frame { color: var(--dx-text-muted); font-size: 10px; }
163
+
164
+ .dx-card {
165
+ background-color: var(--dx-tool-card);
166
+ border-width: 1px;
167
+ border-color: var(--dx-tool-card-border);
168
+ border-radius: var(--dx-r-card);
169
+ padding-left: 11px;
170
+ padding-right: 11px;
171
+ padding-top: 9px;
172
+ padding-bottom: 9px;
173
+ margin-bottom: 8px;
174
+ }
175
+ .dx-card__label {
176
+ font-size: 9px;
177
+ letter-spacing: 0.6px;
178
+ color: var(--dx-text-muted);
179
+ -unity-font-style: bold;
180
+ margin-bottom: 6px;
181
+ }
182
+ .dx-kv { flex-direction: row; align-items: center; margin-bottom: 3px; }
183
+ .dx-kv__k { width: 74px; color: var(--dx-text-muted); font-size: 11px; }
184
+ .dx-kv__v { flex-grow: 1; color: var(--dx-text-dim); font-size: 11px; }
185
+ .dx-prio { padding-left: 6px; padding-right: 6px; border-radius: 4px; background-color: var(--dx-accent-soft); color: #0d1117; -unity-font-style: bold; font-size: 9px; }
186
+
187
+ /* ---------- buttons ---------- */
188
+ .dx-btn-accent {
189
+ background-color: var(--dx-accent);
190
+ color: var(--dx-accent-ink);
191
+ -unity-font-style: bold;
192
+ border-width: 0;
193
+ border-radius: var(--dx-r-btn);
194
+ padding-left: 12px;
195
+ padding-right: 12px;
196
+ padding-top: 7px;
197
+ padding-bottom: 7px;
198
+ }
199
+ .dx-btn-accent:hover { background-color: var(--dx-accent-soft); }
200
+ .dx-btn-ghost {
201
+ background-color: var(--dx-tool-btn);
202
+ border-width: 1px;
203
+ border-color: var(--dx-tool-btn-border);
204
+ border-radius: var(--dx-r-btn);
205
+ color: var(--dx-text);
206
+ padding-left: 12px;
207
+ padding-right: 12px;
208
+ padding-top: 7px;
209
+ padding-bottom: 7px;
210
+ }
211
+ .dx-btn-ghost:hover { background-color: var(--dx-tool-btn-hover); }
212
+
213
+ /* ---------- footer ---------- */
214
+ .dx-footer {
215
+ flex-direction: row;
216
+ align-items: center;
217
+ height: 28px;
218
+ padding-left: 14px;
219
+ padding-right: 14px;
220
+ background-color: var(--dx-tool-header);
221
+ border-top-width: 1px;
222
+ border-top-color: var(--dx-tool-border-soft);
223
+ color: var(--dx-text-muted);
224
+ font-size: 10px;
225
+ }
226
+ .dx-footer__stat { margin-right: 18px; flex-direction: row; }
227
+ .dx-footer__num { color: var(--dx-text-dim); margin-right: 4px; }
228
+
229
+ /* ---------- empty state (the one place the mark appears in a tool) ---------- */
230
+ .dx-empty { flex-grow: 1; align-items: center; justify-content: center; }
231
+ .dx-empty__title { font-size: 13px; -unity-font-style: bold; color: var(--dx-text); margin-top: 12px; }
232
+ .dx-empty__body { font-size: 11px; color: var(--dx-text-muted); margin-top: 6px; white-space: normal; max-width: 260px; -unity-text-align: middle-center; }
233
+
234
+ /* ---------- admonitions (contained complete border) ---------- */
235
+ .dx-admonition { border-width: 1px; border-radius: 8px; padding: 10px 12px; margin-top: 10px; }
236
+ .dx-admonition__title { -unity-font-style: bold; font-size: 12px; margin-bottom: 5px; }
237
+ .dx-note { background-color: rgba(127, 166, 216, 0.06); border-color: rgba(127, 166, 216, 0.35); }
238
+ .dx-note .dx-admonition__title { color: var(--dx-untargeted); }
239
+ .dx-tip { background-color: rgba(127, 184, 138, 0.06); border-color: rgba(127, 184, 138, 0.35); }
240
+ .dx-tip .dx-admonition__title { color: var(--dx-broadcast); }
241
+ .dx-warning { background-color: rgba(244, 168, 54, 0.07); border-color: rgba(244, 168, 54, 0.40); }
242
+ .dx-warning .dx-admonition__title { color: var(--dx-accent); }
243
+ .dx-danger { background-color: rgba(236, 70, 97, 0.07); border-color: rgba(236, 70, 97, 0.40); }
244
+ .dx-danger .dx-admonition__title { color: var(--dx-targeted); }
245
+
246
+ /* ---------- inspector section (DxMessaging region in a component) ---------- */
247
+ .dx-inspector { border-width: 1px; border-color: var(--dx-brand-border); border-radius: var(--dx-r-card); margin-top: 6px; overflow: hidden; }
248
+ .dx-inspector__head { flex-direction: row; align-items: center; background-color: var(--dx-panel); padding: 7px 11px; border-bottom-width: 1px; border-bottom-color: var(--dx-brand-border); }
249
+ .dx-inspector__title { color: var(--dx-accent-soft); -unity-font-style: bold; font-size: 11px; margin-left: 8px; }
250
+ .dx-inspector__meta { color: var(--dx-text-faint); font-size: 10px; }
251
+ .dx-sub { flex-direction: row; align-items: center; padding: 3px 0; }
252
+ .dx-sub__name { flex-grow: 1; color: var(--dx-text-dim); font-size: 12px; }
253
+ .dx-sub__meta { color: var(--dx-text-muted); font-size: 10px; margin-right: 8px; }
254
+ .dx-sub__live { width: 7px; height: 7px; border-radius: 4px; background-color: var(--dx-ok); }
255
+ .dx-sub__idle { width: 7px; height: 7px; border-radius: 4px; background-color: #4a4a4a; }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: b87d09dc4b8308f626e87e7dafec3e14
3
+ ScriptedImporter:
4
+ internalIDToNameTable: []
5
+ externalObjects: {}
6
+ serializedVersion: 2
7
+ userData:
8
+ assetBundleName:
9
+ assetBundleVariant:
10
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
11
+ disableValidation: 0
@@ -0,0 +1,90 @@
1
+ /* ============================================================
2
+ * DxMessaging Design Tokens
3
+ * Apply to an editor root via DxMessagingEditorTheme.Apply(root)
4
+ * in C#. The helper adds ".dx-theme" plus the editor-skin class.
5
+ * Every value below is a var() consumed by DxMessagingTheme.uss.
6
+ * ============================================================ */
7
+
8
+ .dx-theme {
9
+ /* ---- Brand accent: amber (the DxMessaging hue) ---- */
10
+ --dx-accent: #f4a836;
11
+ --dx-accent-soft: #ffd48e;
12
+ --dx-accent-ink: #0d1117; /* text/glyph sitting on amber */
13
+
14
+ /* ---- Message taxonomy: one hue per type ---- */
15
+ --dx-untargeted: #7fa6d8; /* blue */
16
+ --dx-targeted: #ec4661; /* ember */
17
+ --dx-broadcast: #7fb88a; /* green */
18
+ --dx-untargeted-text: #a9c4e2; /* readable on dark rows */
19
+ --dx-targeted-text: #f4c3cc;
20
+ --dx-broadcast-text: #a8d3b2;
21
+
22
+ /* ---- Semantic ---- */
23
+ --dx-record: #e5484d;
24
+ --dx-ok: #7fb88a;
25
+
26
+ /* ---- Brand surfaces (docs / branded chrome) ---- */
27
+ --dx-ink: #0d1117;
28
+ --dx-panel: #11161d;
29
+ --dx-brand-border: #232c38;
30
+
31
+ /* ---- Native editor grays (dark skin) ---- */
32
+ --dx-tool-window: #333333;
33
+ --dx-tool-tabstrip: #282828;
34
+ --dx-tool-toolbar: #383838;
35
+ --dx-tool-field: #2c2c2c;
36
+ --dx-tool-card: #282828;
37
+ --dx-tool-card-border: #222222;
38
+ --dx-tool-border: #191919;
39
+ --dx-tool-border-soft: #262626;
40
+ --dx-tool-header: #303030;
41
+ --dx-tool-row-a: #373737;
42
+ --dx-tool-row-b: #343434;
43
+ --dx-tool-selected: #2c5d87;
44
+ --dx-tool-btn: #424242;
45
+ --dx-tool-btn-hover: #4a4a4a;
46
+ --dx-tool-btn-border: #2a2a2a;
47
+
48
+ /* ---- Text ---- */
49
+ --dx-text: #e2e2e2;
50
+ --dx-text-dim: #d8d8d8;
51
+ --dx-text-muted: #8f8f8f;
52
+ --dx-text-faint: #6b7480;
53
+
54
+ /* ---- Radii ---- */
55
+ --dx-r-chip: 5px;
56
+ --dx-r-btn: 6px;
57
+ --dx-r-card: 7px;
58
+ --dx-r-window: 9px;
59
+ }
60
+
61
+ /* ---- Light editor skin: "Press" paper ---- */
62
+ .dx-theme.dx-light {
63
+ --dx-accent: #b07d1f;
64
+ --dx-accent-ink: #ffffff;
65
+
66
+ --dx-untargeted-text: #35536f;
67
+ --dx-targeted-text: #a3283b;
68
+ --dx-broadcast-text: #33684a;
69
+
70
+ --dx-tool-window: #f4f1ea;
71
+ --dx-tool-tabstrip: #ece7db;
72
+ --dx-tool-toolbar: #efeadf;
73
+ --dx-tool-field: #ffffff;
74
+ --dx-tool-card: #faf8f3;
75
+ --dx-tool-card-border: #e4dfd1;
76
+ --dx-tool-border: #d9d3c4;
77
+ --dx-tool-border-soft: #e4dfd1;
78
+ --dx-tool-header: #ece7db;
79
+ --dx-tool-row-a: #faf8f3;
80
+ --dx-tool-row-b: #f1ede3;
81
+ --dx-tool-selected: #dfeaf5;
82
+ --dx-tool-btn: #ffffff;
83
+ --dx-tool-btn-hover: #f3efe6;
84
+ --dx-tool-btn-border: #d9d3c4;
85
+
86
+ --dx-text: #1b1813;
87
+ --dx-text-dim: #46423a;
88
+ --dx-text-muted: #6b6559;
89
+ --dx-text-faint: #9a948a;
90
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: f838070a2c9e501cc68bfed2bf6027a6
3
+ ScriptedImporter:
4
+ internalIDToNameTable: []
5
+ externalObjects: {}
6
+ serializedVersion: 2
7
+ userData:
8
+ assetBundleName:
9
+ assetBundleVariant:
10
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
11
+ disableValidation: 0
@@ -0,0 +1,8 @@
1
+ fileFormatVersion: 2
2
+ guid: 378089c446a6ccc7b0a5731ad77720dc
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant: