@datamoc/mw_games 0.7.7 → 0.7.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 (205) hide show
  1. package/CHANGELOG.md +183 -3
  2. package/README.md +28 -7
  3. package/dist/actors/Shop.d.ts.map +1 -1
  4. package/dist/actors/Shop.js +4 -1
  5. package/dist/actors/Shop.js.map +1 -1
  6. package/dist/ai/Heuristics.d.ts +8 -0
  7. package/dist/ai/Heuristics.d.ts.map +1 -1
  8. package/dist/ai/Heuristics.js.map +1 -1
  9. package/dist/ai/index.d.ts +2 -2
  10. package/dist/ai/index.d.ts.map +1 -1
  11. package/dist/ai/index.js +1 -1
  12. package/dist/ai/index.js.map +1 -1
  13. package/dist/ai/lua.d.ts +21 -0
  14. package/dist/ai/lua.d.ts.map +1 -1
  15. package/dist/ai/lua.js +21 -0
  16. package/dist/ai/lua.js.map +1 -1
  17. package/dist/ai/score.d.ts +36 -0
  18. package/dist/ai/score.d.ts.map +1 -1
  19. package/dist/ai/score.js +26 -0
  20. package/dist/ai/score.js.map +1 -1
  21. package/dist/assets/index.d.ts +1 -1
  22. package/dist/assets/index.d.ts.map +1 -1
  23. package/dist/assets/index.js +1 -1
  24. package/dist/assets/index.js.map +1 -1
  25. package/dist/assets/loader.d.ts.map +1 -1
  26. package/dist/assets/loader.js +10 -1
  27. package/dist/assets/loader.js.map +1 -1
  28. package/dist/assets/paths.d.ts +23 -0
  29. package/dist/assets/paths.d.ts.map +1 -1
  30. package/dist/assets/paths.js +29 -0
  31. package/dist/assets/paths.js.map +1 -1
  32. package/dist/battle/BattleStats.d.ts.map +1 -1
  33. package/dist/battle/BattleStats.js.map +1 -1
  34. package/dist/board/Classics.d.ts.map +1 -1
  35. package/dist/board/Classics.js +51 -39
  36. package/dist/board/Classics.js.map +1 -1
  37. package/dist/board/HexSkirmish.d.ts.map +1 -1
  38. package/dist/board/HexSkirmish.js +69 -20
  39. package/dist/board/HexSkirmish.js.map +1 -1
  40. package/dist/board/Tactics.d.ts +7 -0
  41. package/dist/board/Tactics.d.ts.map +1 -1
  42. package/dist/board/Tactics.js +2 -2
  43. package/dist/board/Tactics.js.map +1 -1
  44. package/dist/core/Achievements.d.ts.map +1 -1
  45. package/dist/core/Achievements.js +3 -1
  46. package/dist/core/Achievements.js.map +1 -1
  47. package/dist/core/Math.d.ts +14 -0
  48. package/dist/core/Math.d.ts.map +1 -0
  49. package/dist/core/Math.js +16 -0
  50. package/dist/core/Math.js.map +1 -0
  51. package/dist/core/index.d.ts +1 -0
  52. package/dist/core/index.d.ts.map +1 -1
  53. package/dist/core/index.js +1 -0
  54. package/dist/core/index.js.map +1 -1
  55. package/dist/mw_games.global.js +102 -102
  56. package/dist/mwl/actors.d.ts +46 -2
  57. package/dist/mwl/actors.d.ts.map +1 -1
  58. package/dist/mwl/actors.js +46 -2
  59. package/dist/mwl/actors.js.map +1 -1
  60. package/dist/mwl/carryover.d.ts +7 -0
  61. package/dist/mwl/carryover.d.ts.map +1 -1
  62. package/dist/mwl/carryover.js +7 -0
  63. package/dist/mwl/carryover.js.map +1 -1
  64. package/dist/mwl/catalog.d.ts +21 -1
  65. package/dist/mwl/catalog.d.ts.map +1 -1
  66. package/dist/mwl/catalog.js +0 -0
  67. package/dist/mwl/catalog.js.map +1 -1
  68. package/dist/mwl/compiler.d.ts +70 -3
  69. package/dist/mwl/compiler.d.ts.map +1 -1
  70. package/dist/mwl/compiler.js +70 -3
  71. package/dist/mwl/compiler.js.map +1 -1
  72. package/dist/mwl/conditions.d.ts +10 -1
  73. package/dist/mwl/conditions.d.ts.map +1 -1
  74. package/dist/mwl/conditions.js +10 -1
  75. package/dist/mwl/conditions.js.map +1 -1
  76. package/dist/mwl/content.d.ts +15 -0
  77. package/dist/mwl/content.d.ts.map +1 -1
  78. package/dist/mwl/content.js +13 -0
  79. package/dist/mwl/content.js.map +1 -1
  80. package/dist/mwl/expression.d.ts +21 -0
  81. package/dist/mwl/expression.d.ts.map +1 -1
  82. package/dist/mwl/expression.js +21 -0
  83. package/dist/mwl/expression.js.map +1 -1
  84. package/dist/mwl/fengari.d.ts +12 -1
  85. package/dist/mwl/fengari.d.ts.map +1 -1
  86. package/dist/mwl/fengari.js +12 -1
  87. package/dist/mwl/fengari.js.map +1 -1
  88. package/dist/mwl/grammar.d.ts +45 -1
  89. package/dist/mwl/grammar.d.ts.map +1 -1
  90. package/dist/mwl/grammar.js +45 -1
  91. package/dist/mwl/grammar.js.map +1 -1
  92. package/dist/mwl/hooks.d.ts +45 -1
  93. package/dist/mwl/hooks.d.ts.map +1 -1
  94. package/dist/mwl/hooks.js +45 -1
  95. package/dist/mwl/hooks.js.map +1 -1
  96. package/dist/mwl/index.d.ts +1 -1
  97. package/dist/mwl/index.d.ts.map +1 -1
  98. package/dist/mwl/index.js +1 -1
  99. package/dist/mwl/index.js.map +1 -1
  100. package/dist/mwl/persistence.d.ts +32 -0
  101. package/dist/mwl/persistence.d.ts.map +1 -1
  102. package/dist/mwl/persistence.js +32 -0
  103. package/dist/mwl/persistence.js.map +1 -1
  104. package/dist/mwl/readers.d.ts +24 -2
  105. package/dist/mwl/readers.d.ts.map +1 -1
  106. package/dist/mwl/readers.js +27 -4
  107. package/dist/mwl/readers.js.map +1 -1
  108. package/dist/mwl/report.d.ts +21 -2
  109. package/dist/mwl/report.d.ts.map +1 -1
  110. package/dist/mwl/report.js +21 -2
  111. package/dist/mwl/report.js.map +1 -1
  112. package/dist/mwl/runtime.d.ts +72 -0
  113. package/dist/mwl/runtime.d.ts.map +1 -1
  114. package/dist/mwl/runtime.js +274 -70
  115. package/dist/mwl/runtime.js.map +1 -1
  116. package/dist/mwl/schema.d.ts +57 -1
  117. package/dist/mwl/schema.d.ts.map +1 -1
  118. package/dist/mwl/schema.js +99 -9
  119. package/dist/mwl/schema.js.map +1 -1
  120. package/dist/mwl/scripts.d.ts +12 -1
  121. package/dist/mwl/scripts.d.ts.map +1 -1
  122. package/dist/mwl/scripts.js +12 -1
  123. package/dist/mwl/scripts.js.map +1 -1
  124. package/dist/mwl/utils.d.ts +2 -0
  125. package/dist/mwl/utils.d.ts.map +1 -1
  126. package/dist/mwl/utils.js +4 -1
  127. package/dist/mwl/utils.js.map +1 -1
  128. package/dist/rpg/Collision.d.ts.map +1 -1
  129. package/dist/rpg/Collision.js +1 -3
  130. package/dist/rpg/Collision.js.map +1 -1
  131. package/dist/rpg/GameState.d.ts +2 -2
  132. package/dist/rpg/GameState.js +2 -2
  133. package/dist/two-d/pixi-interop.d.ts +28 -10
  134. package/dist/two-d/pixi-interop.d.ts.map +1 -1
  135. package/dist/two-d/pixi-interop.js +36 -10
  136. package/dist/two-d/pixi-interop.js.map +1 -1
  137. package/dist/two-d/render/Camera.d.ts +11 -0
  138. package/dist/two-d/render/Camera.d.ts.map +1 -1
  139. package/dist/two-d/render/Camera.js +14 -3
  140. package/dist/two-d/render/Camera.js.map +1 -1
  141. package/dist/two-d/render/ColorTransformBatcher.d.ts +7 -1
  142. package/dist/two-d/render/ColorTransformBatcher.d.ts.map +1 -1
  143. package/dist/two-d/render/ColorTransformBatcher.js +10 -1
  144. package/dist/two-d/render/ColorTransformBatcher.js.map +1 -1
  145. package/dist/two-d/render/ImageModifiers.d.ts +40 -0
  146. package/dist/two-d/render/ImageModifiers.d.ts.map +1 -1
  147. package/dist/two-d/render/ImageModifiers.js +67 -4
  148. package/dist/two-d/render/ImageModifiers.js.map +1 -1
  149. package/dist/two-d/render/PaletteRemap.d.ts.map +1 -1
  150. package/dist/two-d/render/PaletteRemap.js +12 -1
  151. package/dist/two-d/render/PaletteRemap.js.map +1 -1
  152. package/dist/two-d/render/Projectile.d.ts +16 -0
  153. package/dist/two-d/render/Projectile.d.ts.map +1 -1
  154. package/dist/two-d/render/Projectile.js +14 -0
  155. package/dist/two-d/render/Projectile.js.map +1 -1
  156. package/dist/two-d/render/ScreenEffects.d.ts +42 -4
  157. package/dist/two-d/render/ScreenEffects.d.ts.map +1 -1
  158. package/dist/two-d/render/ScreenEffects.js +64 -9
  159. package/dist/two-d/render/ScreenEffects.js.map +1 -1
  160. package/dist/two-d/render/Shape2D.d.ts +22 -2
  161. package/dist/two-d/render/Shape2D.d.ts.map +1 -1
  162. package/dist/two-d/render/Shape2D.js +31 -2
  163. package/dist/two-d/render/Shape2D.js.map +1 -1
  164. package/dist/two-d/render/StatusVisuals.d.ts +41 -23
  165. package/dist/two-d/render/StatusVisuals.d.ts.map +1 -1
  166. package/dist/two-d/render/StatusVisuals.js +65 -26
  167. package/dist/two-d/render/StatusVisuals.js.map +1 -1
  168. package/dist/two-d/render/TerrainGraphics.d.ts.map +1 -1
  169. package/dist/two-d/render/TerrainGraphics.js.map +1 -1
  170. package/dist/two-d/render/TerrainGraphicsLayer.d.ts +55 -0
  171. package/dist/two-d/render/TerrainGraphicsLayer.d.ts.map +1 -0
  172. package/dist/two-d/render/TerrainGraphicsLayer.js +54 -0
  173. package/dist/two-d/render/TerrainGraphicsLayer.js.map +1 -0
  174. package/dist/two-d/render/TintedSprite.js +2 -2
  175. package/dist/two-d/render/TintedSprite.js.map +1 -1
  176. package/dist/two-d/render/index.d.ts +5 -3
  177. package/dist/two-d/render/index.d.ts.map +1 -1
  178. package/dist/two-d/render/index.js +3 -2
  179. package/dist/two-d/render/index.js.map +1 -1
  180. package/dist/two-d/ui/ListView.d.ts +9 -0
  181. package/dist/two-d/ui/ListView.d.ts.map +1 -1
  182. package/dist/two-d/ui/ListView.js +16 -6
  183. package/dist/two-d/ui/ListView.js.map +1 -1
  184. package/dist/two-d/ui/MarkupText.d.ts +66 -0
  185. package/dist/two-d/ui/MarkupText.d.ts.map +1 -0
  186. package/dist/two-d/ui/MarkupText.js +156 -0
  187. package/dist/two-d/ui/MarkupText.js.map +1 -0
  188. package/dist/two-d/ui/RichLabel.d.ts +7 -1
  189. package/dist/two-d/ui/RichLabel.d.ts.map +1 -1
  190. package/dist/two-d/ui/RichLabel.js +20 -9
  191. package/dist/two-d/ui/RichLabel.js.map +1 -1
  192. package/dist/two-d/ui/index.d.ts +4 -2
  193. package/dist/two-d/ui/index.d.ts.map +1 -1
  194. package/dist/two-d/ui/index.js +2 -1
  195. package/dist/two-d/ui/index.js.map +1 -1
  196. package/dist/two-d/ui/markup.d.ts +63 -1
  197. package/dist/two-d/ui/markup.d.ts.map +1 -1
  198. package/dist/two-d/ui/markup.js +69 -4
  199. package/dist/two-d/ui/markup.js.map +1 -1
  200. package/dist/version.d.ts +1 -1
  201. package/dist/version.js +1 -1
  202. package/package.json +5 -1
  203. package/tools/classic-html.d.mts +6 -0
  204. package/tools/classic-html.mjs +61 -0
  205. package/tools/mwl.mjs +12 -0
@@ -29,6 +29,20 @@ import { reducedMotion } from '../../core/Motion.js';
29
29
  *
30
30
  * effects.setTint(0x336633, 0.3); // held green cast while poisoned
31
31
  * ```
32
+ *
33
+ * `sequence` chains steps end to end, driven by the same `update(dt)` - `isBusy` stays true
34
+ * and `update` keeps returning false across every step boundary, only returning true once the
35
+ * whole sequence finishes, so a caller still needs no `await` for the genre-standard
36
+ * hold-then-fade-back transition `fadeOut`/`fadeIn`/`flash` alone cannot express:
37
+ *
38
+ * ```ts
39
+ * effects.sequence([
40
+ * { kind: 'fadeOut', duration: 0.3 },
41
+ * { kind: 'hold', duration: 0.5 }, // the new area loads while the screen is covered
42
+ * { kind: 'fadeIn', duration: 0.3 },
43
+ * ]);
44
+ * while (!effects.update(1 / 60)) continue; // drives every step, one frame at a time
45
+ * ```
32
46
  */
33
47
  export class ScreenEffects extends Container {
34
48
  constructor(options = {}) {
@@ -40,6 +54,8 @@ export class ScreenEffects extends Container {
40
54
  /** alpha the current phase starts from and drives towards */
41
55
  this.fromAlpha = 0;
42
56
  this.toAlpha = 0;
57
+ /** steps still to run once the current one finishes, for `sequence` */
58
+ this.queue = [];
43
59
  this.defaultColor = options.color ?? 0x000000;
44
60
  this.viewWidth = options.width ?? 0;
45
61
  this.viewHeight = options.height ?? 0;
@@ -91,23 +107,64 @@ export class ScreenEffects extends Container {
91
107
  flash(duration, color, peak = 1) {
92
108
  this.begin('flash', duration, 0, peak, color);
93
109
  }
110
+ /**
111
+ * Runs `steps` end to end - fade, hold, flash, in any order and count - driven by the
112
+ * same `update(dt)` as a single call: `isBusy` stays true and `update` keeps returning
113
+ * false at every step boundary, only returning true once the last step finishes. See this
114
+ * class's own doc comment for the hold-then-fade-back example this exists for. Replaces
115
+ * anything currently running or queued, the same as any other call here.
116
+ */
117
+ sequence(steps) {
118
+ this.queue = steps.slice(1);
119
+ if (steps.length === 0) {
120
+ this.phase = 'idle';
121
+ return;
122
+ }
123
+ this.beginStep(steps[0]);
124
+ }
94
125
  /**
95
126
  * Holds a colour at a fixed opacity until changed - a poisoned green cast, an underwater
96
- * blue. Cancels any running fade or flash, since those drive the same one overlay.
127
+ * blue. Cancels any running fade, flash or sequence, since those drive the same one overlay.
97
128
  */
98
129
  setTint(color, alpha) {
130
+ this.queue = [];
99
131
  this.phase = 'idle';
100
132
  this.elapsed = 0;
101
133
  this.overlay.tint = color;
102
134
  this.overlay.alpha = Math.max(0, Math.min(1, alpha));
103
135
  }
104
- /** clears the overlay outright, running effect and held tint alike */
136
+ /** clears the overlay outright, running effect, sequence and held tint alike */
105
137
  clear() {
138
+ this.queue = [];
106
139
  this.phase = 'idle';
107
140
  this.elapsed = 0;
108
141
  this.overlay.alpha = 0;
109
142
  this.overlay.tint = this.defaultColor;
110
143
  }
144
+ /** @returns true if this step completed instantly (a non-positive duration) and the next one, if any, already started */
145
+ beginStep(step) {
146
+ switch (step.kind) {
147
+ case 'fadeOut':
148
+ return this.begin('fadeOut', step.duration, this.overlay.alpha, 1, step.color);
149
+ case 'fadeIn':
150
+ return this.begin('fadeIn', step.duration, this.overlay.alpha, 0, step.color);
151
+ case 'flash':
152
+ return this.begin('flash', step.duration, 0, step.peak ?? 1, step.color);
153
+ case 'hold':
154
+ //no explicit colour keeps whatever tint the previous step left, rather than
155
+ //begin()'s usual fall back to the default colour
156
+ return this.begin('hold', step.duration, this.overlay.alpha, this.overlay.alpha, step.color ?? this.overlay.tint);
157
+ }
158
+ }
159
+ /** starts the next queued step, or goes idle when the queue is empty; @returns true once idle */
160
+ advance() {
161
+ const next = this.queue.shift();
162
+ if (next)
163
+ return this.beginStep(next);
164
+ this.phase = 'idle';
165
+ return true;
166
+ }
167
+ /** @returns true if `phase` is idle once this call returns (an instant cut may cascade through several queued steps) */
111
168
  begin(phase, duration, from, to, color) {
112
169
  //reduced motion turns a fade or flash into the instant cut a non-positive duration is
113
170
  if (reducedMotion())
@@ -120,13 +177,13 @@ export class ScreenEffects extends Container {
120
177
  //a non-positive duration is an instant cut, applied now rather than a frame later
121
178
  if (!(duration > 0)) {
122
179
  this.overlay.alpha = phase === 'flash' ? 0 : to;
123
- this.phase = 'idle';
124
- return;
180
+ return this.advance();
125
181
  }
126
182
  this.phase = phase;
127
183
  this.overlay.alpha = phase === 'flash' ? 0 : from;
184
+ return false;
128
185
  }
129
- /** @returns true on the single frame the running effect completes */
186
+ /** @returns true on the single frame the running effect (or the whole `sequence`) completes */
130
187
  update(dt) {
131
188
  if (this.phase === 'idle')
132
189
  return false;
@@ -134,8 +191,7 @@ export class ScreenEffects extends Container {
134
191
  //trigger, so finish it at once rather than letting the running one play out
135
192
  if (reducedMotion()) {
136
193
  this.overlay.alpha = this.phase === 'flash' ? 0 : this.toAlpha;
137
- this.phase = 'idle';
138
- return true;
194
+ return this.advance();
139
195
  }
140
196
  this.elapsed += dt;
141
197
  const t = Math.min(1, this.elapsed / this.duration);
@@ -150,8 +206,7 @@ export class ScreenEffects extends Container {
150
206
  }
151
207
  if (t >= 1) {
152
208
  this.overlay.alpha = this.phase === 'flash' ? 0 : this.toAlpha;
153
- this.phase = 'idle';
154
- return true;
209
+ return this.advance();
155
210
  }
156
211
  return false;
157
212
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenEffects.js","sourceRoot":"","sources":["../../../src/two-d/render/ScreenEffects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScreenEffects.js","sourceRoot":"","sources":["../../../src/two-d/render/ScreenEffects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAuBrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IAkB3C,YAAY,OAAO,GAAyB,EAAE;QAC7C,KAAK,EAAE,CAAC;QAlBQ,YAAO,GAAG,IAAI,QAAQ,EAAE,CAAC;QAMlC,UAAK,GAAsB,MAAM,CAAC;QAClC,YAAO,GAAG,CAAC,CAAC;QACZ,aAAQ,GAAG,CAAC,CAAC;QAErB,6DAA6D;QACrD,cAAS,GAAG,CAAC,CAAC;QACd,YAAO,GAAG,CAAC,CAAC;QAEpB,uEAAuE;QAC/D,UAAK,GAAuB,EAAE,CAAC;QAItC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,oFAAoF;IACpF,WAAW,CAAC,KAAa,EAAE,MAAc;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAEO,MAAM;QACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,CAAC;IACF,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,wFAAwF;IACxF,OAAO,CAAC,QAAgB,EAAE,KAAc;QACvC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,QAAgB,EAAE,KAAc;QACtC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAgB,EAAE,KAAc,EAAE,IAAI,GAAG,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,KAAkC;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,KAAa,EAAE,KAAa;QACnC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,gFAAgF;IAChF,KAAK;QACJ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,yHAAyH;IACjH,SAAS,CAAC,IAAsB;QACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACb,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAChF,KAAK,QAAQ;gBACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/E,KAAK,OAAO;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1E,KAAK,MAAM;gBACV,4EAA4E;gBAC5E,iDAAiD;gBACjD,OAAO,IAAI,CAAC,KAAK,CAChB,MAAM,EACN,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAC/B,CAAC;QACJ,CAAC;IACF,CAAC;IAED,iGAAiG;IACzF,OAAO;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,wHAAwH;IAChH,KAAK,CAAC,KAAwB,EAAE,QAAgB,EAAE,IAAY,EAAE,EAAU,EAAE,KAAc;QACjG,sFAAsF;QACtF,IAAI,aAAa,EAAE;YAAE,QAAQ,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,kFAAkF;QAClF,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,+FAA+F;IAC/F,MAAM,CAAC,EAAU;QAChB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAExC,gFAAgF;QAChF,4EAA4E;QAC5E,IAAI,aAAa,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC5B,oEAAoE;YACpE,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3C,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC/E,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;YAC/D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
@@ -2,8 +2,10 @@ import { Container, Graphics, Text, TilingSprite, FillGradient, Sprite } from 'p
2
2
  /**
3
3
  * A plain grouping container under an MWG-owned name, for the common "just group some
4
4
  * children" need `Scene2D.stage` itself covers for the whole scene - a sub-layer inside it
5
- * (a HUD strip, a creature layer, a popup stack) still needs its own constructible class,
6
- * and `Container2D` (`Types2D.ts`) is a type alias, not something a game can `new`.
5
+ * (a HUD strip, a creature layer, a popup stack) still needs its own constructible class.
6
+ * `Container2D` (`Types2D.ts`) is itself a value re-export of the same underlying class, so
7
+ * `new Container2D()` also works; `Node2D` exists as the name this module and its own doc
8
+ * comments actually use, so a game reads one name rather than two for the same thing.
7
9
  *
8
10
  * A bare re-export under this name, deliberately: Pixi's own `Container` already does
9
11
  * everything this needs, so the point is not to add behaviour but to give a game a name it
@@ -21,6 +23,24 @@ import { Container, Graphics, Text, TilingSprite, FillGradient, Sprite } from 'p
21
23
  */
22
24
  export declare class Node2D extends Container {
23
25
  }
26
+ /**
27
+ * Creates one labeled `Node2D` per name, attached to `parent` in the order given, and returns
28
+ * them keyed by name. A game with a dozen conventionally-ordered layers (terrain, units, effects,
29
+ * UI, ...) otherwise hand-wires each one and adds them in the right order everywhere; this is that
30
+ * boilerplate once. The names and their order stay the caller's own convention - nothing here
31
+ * decides what a layer is called or which should draw on top.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { Node2D, createLayers, Sprite2D } from '@datamoc/mw_games/two-d/render';
36
+ *
37
+ * const stage = new Node2D();
38
+ * const layers = createLayers(stage, ['terrain', 'units', 'effects', 'ui']);
39
+ * layers.units.addChild(new Sprite2D());
40
+ * console.log(layers.effects.label); // 'effects'
41
+ * ```
42
+ */
43
+ export declare function createLayers(parent: Container, names: readonly string[]): Record<string, Node2D>;
24
44
  /**
25
45
  * Vector drawing - rectangles, circles, polygons, lines - under an MWG-owned name.
26
46
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Shape2D.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/Shape2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,MAAO,SAAQ,SAAS;CAAG;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,OAAQ,SAAQ,QAAQ;CAAG;AAExC;;;;;;;;;;;;;GAaG;AACH,qBAAa,MAAO,SAAQ,IAAI;CAAG;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAS,SAAQ,MAAM;CAAG;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAY,SAAQ,YAAY;CAAG;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,qBAAe,CAAC"}
1
+ {"version":3,"file":"Shape2D.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/Shape2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,MAAO,SAAQ,SAAS;CAAG;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAShG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,OAAQ,SAAQ,QAAQ;CAAG;AAExC;;;;;;;;;;;;;GAaG;AACH,qBAAa,MAAO,SAAQ,IAAI;CAAG;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,QAAS,SAAQ,MAAM;CAAG;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAY,SAAQ,YAAY;CAAG;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,qBAAe,CAAC"}
@@ -2,8 +2,10 @@ import { Container, Graphics, Text, TilingSprite, FillGradient, Sprite } from 'p
2
2
  /**
3
3
  * A plain grouping container under an MWG-owned name, for the common "just group some
4
4
  * children" need `Scene2D.stage` itself covers for the whole scene - a sub-layer inside it
5
- * (a HUD strip, a creature layer, a popup stack) still needs its own constructible class,
6
- * and `Container2D` (`Types2D.ts`) is a type alias, not something a game can `new`.
5
+ * (a HUD strip, a creature layer, a popup stack) still needs its own constructible class.
6
+ * `Container2D` (`Types2D.ts`) is itself a value re-export of the same underlying class, so
7
+ * `new Container2D()` also works; `Node2D` exists as the name this module and its own doc
8
+ * comments actually use, so a game reads one name rather than two for the same thing.
7
9
  *
8
10
  * A bare re-export under this name, deliberately: Pixi's own `Container` already does
9
11
  * everything this needs, so the point is not to add behaviour but to give a game a name it
@@ -21,6 +23,33 @@ import { Container, Graphics, Text, TilingSprite, FillGradient, Sprite } from 'p
21
23
  */
22
24
  export class Node2D extends Container {
23
25
  }
26
+ /**
27
+ * Creates one labeled `Node2D` per name, attached to `parent` in the order given, and returns
28
+ * them keyed by name. A game with a dozen conventionally-ordered layers (terrain, units, effects,
29
+ * UI, ...) otherwise hand-wires each one and adds them in the right order everywhere; this is that
30
+ * boilerplate once. The names and their order stay the caller's own convention - nothing here
31
+ * decides what a layer is called or which should draw on top.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { Node2D, createLayers, Sprite2D } from '@datamoc/mw_games/two-d/render';
36
+ *
37
+ * const stage = new Node2D();
38
+ * const layers = createLayers(stage, ['terrain', 'units', 'effects', 'ui']);
39
+ * layers.units.addChild(new Sprite2D());
40
+ * console.log(layers.effects.label); // 'effects'
41
+ * ```
42
+ */
43
+ export function createLayers(parent, names) {
44
+ const layers = {};
45
+ for (const name of names) {
46
+ const layer = new Node2D();
47
+ layer.label = name;
48
+ parent.addChild(layer);
49
+ layers[name] = layer;
50
+ }
51
+ return layers;
52
+ }
24
53
  /**
25
54
  * Vector drawing - rectangles, circles, polygons, lines - under an MWG-owned name.
26
55
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Shape2D.js","sourceRoot":"","sources":["../../../src/two-d/render/Shape2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,MAAO,SAAQ,SAAS;CAAG;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,OAAQ,SAAQ,QAAQ;CAAG;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,MAAO,SAAQ,IAAI;CAAG;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAS,SAAQ,MAAM;CAAG;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"Shape2D.js","sourceRoot":"","sources":["../../../src/two-d/render/Shape2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,MAAO,SAAQ,SAAS;CAAG;AAExC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiB,EAAE,KAAwB;IACvE,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,OAAQ,SAAQ,QAAQ;CAAG;AAExC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,MAAO,SAAQ,IAAI;CAAG;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAS,SAAQ,MAAM;CAAG;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;CAAG;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC"}
@@ -1,33 +1,37 @@
1
1
  export interface TintTarget {
2
- lerpTint(color: number, strength: number): void;
3
- resetColor(): void;
2
+ /** the packed additive colour, the same field `TintedSprite.colorAdd` is */
3
+ colorAdd: number;
4
4
  }
5
5
  export interface StatusVisualStyle {
6
- /** colour to pull the sprite towards while this status is active */
6
+ /** colour this status contributes on top of every other active one */
7
7
  color: number;
8
- /** 0..1, how far towards `color` at full intensity; defaults to 0.5 */
8
+ /** 0..1, how strongly this status's colour contributes at full intensity; defaults to 0.5 */
9
9
  strength?: number;
10
- /** cycles per second the strength oscillates between 0 and `strength`; omit for a steady tint */
10
+ /** cycles per second the strength oscillates between 0 and `strength`; omit for a steady contribution */
11
11
  pulseRate?: number;
12
12
  }
13
13
  export interface StatusVisualsOptions {
14
- /** which status wins when more than one is active - key order is priority, first to last */
14
+ /** each active status's own contribution; no ordering meaning, since every active one composes */
15
15
  styles: Record<string, StatusVisualStyle>;
16
16
  }
17
17
  /**
18
- * Turns a set of active status-effect names into one tint on a sprite, so a game's own
19
- * `actors.applyStatusEffect` handles - which know nothing about rendering - can drive what a
20
- * character looks like without either side importing the other. `styles`' key order is the
21
- * priority: with both `poisoned` and `burning` active, whichever is declared first wins, the
22
- * same "declaration order decides" rule `rpg.activePage` uses for map events.
18
+ * Turns a set of active status-effect names into one additive colour on a sprite, so a game's
19
+ * own `actors.applyStatusEffect` handles - which know nothing about rendering - can drive what
20
+ * a character looks like without either side importing the other.
23
21
  *
24
- * `target` is any object shaped like `TintedSprite`'s own `lerpTint`/`resetColor` - duck-typed
25
- * the way `Projectile` takes a plain `{x, y}` rather than a real Pixi `Sprite`, so this is
26
- * fully testable without Pixi and works on any sprite subclass that exposes the same two
27
- * methods. A `pulseRate` status flickers between its style's `strength` and zero rather than
28
- * holding steady. This owns none of the sprite's other colour state; a caller mixing in an
29
- * unrelated `tint` write (a damage flash, standing in shade) will fight this the same way two
30
- * direct writers to any shared field would.
22
+ * Every active status composes over the additive channel (`TintedSprite.colorAdd`) rather than
23
+ * one winning by declaration order: poisoned-and-burning sums both colours (each channel
24
+ * clamped to 1, so an oversaturated combination clips rather than wrapping), instead of only
25
+ * the first-declared style showing. This class never touches the multiply `tint`, so a
26
+ * sprite's own identity tint (a team colour, say) rides underneath untouched - the composition
27
+ * this class's own earlier version could not do, because writing both halves of `lerpTint` per
28
+ * update meant the last status checked always overwrote whatever tint a caller had set. A
29
+ * one-shot `flash` (a damage hit, a heal glow) layers its own decaying contribution on top of
30
+ * whatever statuses are active, rather than needing a caller to juggle a separate colour write.
31
+ *
32
+ * `target` is any object shaped like `TintedSprite`'s own `colorAdd` field - duck-typed the way
33
+ * `Projectile` takes a plain `{x, y}` rather than a real Pixi `Sprite`, so this is fully
34
+ * testable without Pixi and works on any sprite subclass that exposes the same field.
31
35
  *
32
36
  * @example
33
37
  * ```ts
@@ -35,6 +39,7 @@ export interface StatusVisualsOptions {
35
39
  *
36
40
  * declare const ratTexture: Texture2D;
37
41
  * const rat = new TintedSprite(ratTexture);
42
+ * rat.tint = 0x8080ff; // a team colour, untouched by anything below
38
43
  *
39
44
  * const visuals = new StatusVisuals(rat, {
40
45
  * styles: {
@@ -44,25 +49,38 @@ export interface StatusVisualsOptions {
44
49
  * });
45
50
  *
46
51
  * visuals.set('poisoned', true);
47
- * visuals.update(1 / 60); // tints rat towards green
52
+ * visuals.set('burning', true);
53
+ * visuals.update(1 / 60); // both colours composed into rat.colorAdd; rat.tint is untouched
48
54
  * console.log(visuals.has('poisoned')); // true
49
55
  *
56
+ * visuals.flash(0xffffff, 0.8, 0.2); // a bright hit-flash, decaying over 0.2s
57
+ * visuals.update(1 / 60);
58
+ *
50
59
  * visuals.set('poisoned', false);
51
- * visuals.update(1 / 60); // no status left active: resets rat's colour
60
+ * visuals.set('burning', false);
61
+ * visuals.update(1 / 60); // no status or flash left active: colorAdd back to 0
52
62
  * ```
53
63
  */
54
64
  export declare class StatusVisuals {
55
65
  private target;
56
66
  private styles;
57
- /** `styles`' own key order, computed once rather than every `update()` - a per-frame call */
58
- private priority;
59
67
  private active;
60
68
  private elapsed;
69
+ private flashColor;
70
+ private flashStrength;
71
+ private flashDuration;
72
+ private flashRemaining;
61
73
  constructor(target: TintTarget, options: StatusVisualsOptions);
62
74
  /** marks `kind` active or inactive; a `kind` with no matching style is tracked but never shown */
63
75
  set(kind: string, active: boolean): void;
64
76
  has(kind: string): boolean;
65
- /** advances any pulsing style and repaints the sprite from the current active set */
77
+ /**
78
+ * Layers a transient additive pulse on top of whatever statuses are active, linearly
79
+ * decaying `strength` to zero over `duration` seconds - a damage hit or a heal glow that
80
+ * needs no status of its own and no caller-managed timer.
81
+ */
82
+ flash(color: number, strength: number, duration: number): void;
83
+ /** advances any pulsing style and the flash decay, and repaints the sprite's additive channel */
66
84
  update(dt: number): void;
67
85
  }
68
86
  //# sourceMappingURL=StatusVisuals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusVisuals.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/StatusVisuals.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,UAAU,IAAI,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,4FAA4F;IAC5F,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAoC;IAClD,6FAA6F;IAC7F,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAK;IAEpB,YAAY,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAI5D;IAED,kGAAkG;IAClG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAGvC;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzB;IAED,qFAAqF;IACrF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAgBvB;CACD"}
1
+ {"version":3,"file":"StatusVisuals.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/StatusVisuals.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IAC1B,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IACjC,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACpC,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,cAAc,CAAK;IAE3B,YAAY,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,oBAAoB,EAG5D;IAED,kGAAkG;IAClG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAGvC;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzB;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK7D;IAED,iGAAiG;IACjG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CA6BvB;CACD"}
@@ -1,17 +1,22 @@
1
+ import { packColorAdd } from './ColorTransformBatcher.js';
1
2
  /**
2
- * Turns a set of active status-effect names into one tint on a sprite, so a game's own
3
- * `actors.applyStatusEffect` handles - which know nothing about rendering - can drive what a
4
- * character looks like without either side importing the other. `styles`' key order is the
5
- * priority: with both `poisoned` and `burning` active, whichever is declared first wins, the
6
- * same "declaration order decides" rule `rpg.activePage` uses for map events.
3
+ * Turns a set of active status-effect names into one additive colour on a sprite, so a game's
4
+ * own `actors.applyStatusEffect` handles - which know nothing about rendering - can drive what
5
+ * a character looks like without either side importing the other.
7
6
  *
8
- * `target` is any object shaped like `TintedSprite`'s own `lerpTint`/`resetColor` - duck-typed
9
- * the way `Projectile` takes a plain `{x, y}` rather than a real Pixi `Sprite`, so this is
10
- * fully testable without Pixi and works on any sprite subclass that exposes the same two
11
- * methods. A `pulseRate` status flickers between its style's `strength` and zero rather than
12
- * holding steady. This owns none of the sprite's other colour state; a caller mixing in an
13
- * unrelated `tint` write (a damage flash, standing in shade) will fight this the same way two
14
- * direct writers to any shared field would.
7
+ * Every active status composes over the additive channel (`TintedSprite.colorAdd`) rather than
8
+ * one winning by declaration order: poisoned-and-burning sums both colours (each channel
9
+ * clamped to 1, so an oversaturated combination clips rather than wrapping), instead of only
10
+ * the first-declared style showing. This class never touches the multiply `tint`, so a
11
+ * sprite's own identity tint (a team colour, say) rides underneath untouched - the composition
12
+ * this class's own earlier version could not do, because writing both halves of `lerpTint` per
13
+ * update meant the last status checked always overwrote whatever tint a caller had set. A
14
+ * one-shot `flash` (a damage hit, a heal glow) layers its own decaying contribution on top of
15
+ * whatever statuses are active, rather than needing a caller to juggle a separate colour write.
16
+ *
17
+ * `target` is any object shaped like `TintedSprite`'s own `colorAdd` field - duck-typed the way
18
+ * `Projectile` takes a plain `{x, y}` rather than a real Pixi `Sprite`, so this is fully
19
+ * testable without Pixi and works on any sprite subclass that exposes the same field.
15
20
  *
16
21
  * @example
17
22
  * ```ts
@@ -19,6 +24,7 @@
19
24
  *
20
25
  * declare const ratTexture: Texture2D;
21
26
  * const rat = new TintedSprite(ratTexture);
27
+ * rat.tint = 0x8080ff; // a team colour, untouched by anything below
22
28
  *
23
29
  * const visuals = new StatusVisuals(rat, {
24
30
  * styles: {
@@ -28,20 +34,28 @@
28
34
  * });
29
35
  *
30
36
  * visuals.set('poisoned', true);
31
- * visuals.update(1 / 60); // tints rat towards green
37
+ * visuals.set('burning', true);
38
+ * visuals.update(1 / 60); // both colours composed into rat.colorAdd; rat.tint is untouched
32
39
  * console.log(visuals.has('poisoned')); // true
33
40
  *
41
+ * visuals.flash(0xffffff, 0.8, 0.2); // a bright hit-flash, decaying over 0.2s
42
+ * visuals.update(1 / 60);
43
+ *
34
44
  * visuals.set('poisoned', false);
35
- * visuals.update(1 / 60); // no status left active: resets rat's colour
45
+ * visuals.set('burning', false);
46
+ * visuals.update(1 / 60); // no status or flash left active: colorAdd back to 0
36
47
  * ```
37
48
  */
38
49
  export class StatusVisuals {
39
50
  constructor(target, options) {
40
51
  this.active = new Set();
41
52
  this.elapsed = 0;
53
+ this.flashColor = 0;
54
+ this.flashStrength = 0;
55
+ this.flashDuration = 0;
56
+ this.flashRemaining = 0;
42
57
  this.target = target;
43
58
  this.styles = options.styles;
44
- this.priority = Object.keys(options.styles);
45
59
  }
46
60
  /** marks `kind` active or inactive; a `kind` with no matching style is tracked but never shown */
47
61
  set(kind, active) {
@@ -53,20 +67,45 @@ export class StatusVisuals {
53
67
  has(kind) {
54
68
  return this.active.has(kind);
55
69
  }
56
- /** advances any pulsing style and repaints the sprite from the current active set */
70
+ /**
71
+ * Layers a transient additive pulse on top of whatever statuses are active, linearly
72
+ * decaying `strength` to zero over `duration` seconds - a damage hit or a heal glow that
73
+ * needs no status of its own and no caller-managed timer.
74
+ */
75
+ flash(color, strength, duration) {
76
+ this.flashColor = color;
77
+ this.flashStrength = strength;
78
+ this.flashDuration = Math.max(duration, 1e-6);
79
+ this.flashRemaining = this.flashDuration;
80
+ }
81
+ /** advances any pulsing style and the flash decay, and repaints the sprite's additive channel */
57
82
  update(dt) {
58
83
  this.elapsed += dt;
59
- const kind = this.priority.find((k) => this.active.has(k));
60
- if (kind === undefined) {
61
- this.target.resetColor();
62
- return;
84
+ if (this.flashRemaining > 0)
85
+ this.flashRemaining = Math.max(0, this.flashRemaining - dt);
86
+ let r = 0;
87
+ let g = 0;
88
+ let b = 0;
89
+ for (const kind of this.active) {
90
+ const style = this.styles[kind];
91
+ if (!style)
92
+ continue;
93
+ const peak = style.strength ?? 0.5;
94
+ const strength = style.pulseRate
95
+ ? peak * (0.5 + 0.5 * Math.sin(this.elapsed * style.pulseRate * Math.PI * 2))
96
+ : peak;
97
+ r += (((style.color >> 16) & 0xff) / 255) * strength;
98
+ g += (((style.color >> 8) & 0xff) / 255) * strength;
99
+ b += ((style.color & 0xff) / 255) * strength;
100
+ }
101
+ if (this.flashRemaining > 0) {
102
+ const flashT = this.flashRemaining / this.flashDuration;
103
+ const flashStrength = this.flashStrength * flashT;
104
+ r += (((this.flashColor >> 16) & 0xff) / 255) * flashStrength;
105
+ g += (((this.flashColor >> 8) & 0xff) / 255) * flashStrength;
106
+ b += ((this.flashColor & 0xff) / 255) * flashStrength;
63
107
  }
64
- const style = this.styles[kind];
65
- const peak = style.strength ?? 0.5;
66
- const strength = style.pulseRate
67
- ? peak * (0.5 + 0.5 * Math.sin(this.elapsed * style.pulseRate * Math.PI * 2))
68
- : peak;
69
- this.target.lerpTint(style.color, strength);
108
+ this.target.colorAdd = packColorAdd(Math.min(1, r), Math.min(1, g), Math.min(1, b));
70
109
  }
71
110
  }
72
111
  //# sourceMappingURL=StatusVisuals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusVisuals.js","sourceRoot":"","sources":["../../../src/two-d/render/StatusVisuals.ts"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,OAAO,aAAa;IAQzB,YAAY,MAAkB,EAAE,OAA6B;QAHrD,WAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QAC3B,YAAO,GAAG,CAAC,CAAC;QAGnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,kGAAkG;IAClG,GAAG,CAAC,IAAY,EAAE,MAAe;QAChC,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,qFAAqF;IACrF,MAAM,CAAC,EAAU;QAChB,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YACzB,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS;YAC/B,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7E,CAAC,CAAC,IAAI,CAAC;QAER,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;CACD"}
1
+ {"version":3,"file":"StatusVisuals.js","sourceRoot":"","sources":["../../../src/two-d/render/StatusVisuals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainGraphics.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TerrainGraphics.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainGraphics.js","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TerrainGraphics.js","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Node2D } from './Shape2D.ts';
2
+ import type { Texture2D } from './Types2D.ts';
3
+ import type { TerrainPlacement } from './TerrainGraphics.ts';
4
+ export interface TerrainGraphicsLayerOptions {
5
+ /** the placements `resolveTerrainGraphics` produced, or any list of the same shape */
6
+ readonly placements: readonly TerrainPlacement[];
7
+ /**
8
+ * Where a placement lands, in pixels: its anchor cell (`x`, `y`) plus the rule image's own
9
+ * offset (`dx`, `dy`), both in the unit the rules were authored in. A square or isometric grid
10
+ * projects the sum of the two; a hex grid, whose offsets are axial, projects the cell and the
11
+ * offset separately - which is why the layer is handed the whole placement rather than only a
12
+ * cell, and why the projection belongs to the caller.
13
+ */
14
+ readonly project: (x: number, y: number, dx: number, dy: number) => {
15
+ x: number;
16
+ y: number;
17
+ };
18
+ /** how an image path becomes a texture; defaults to the asset resolver with a `Texture.EMPTY` fallback */
19
+ readonly resolveImage?: (path: string) => Texture2D;
20
+ }
21
+ /**
22
+ * Draws the placements `resolveTerrainGraphics` resolves - the renderer half of `[terrain_graphics]`
23
+ * that the rule pass deliberately leaves to a caller.
24
+ *
25
+ * It is one `Sprite2D` per placement, added in `layer` order (a stable sort, so placements sharing a
26
+ * layer keep the order the rule pass emitted, which is its row-major walk). That is what makes a
27
+ * rule's multi-cell art *one rule's images at their own offsets* rather than something `TileMap`'s
28
+ * one-sprite-per-cell grid would have to hold, and what lets a rotated or probabilistic rule vary
29
+ * how a transition looks without the layer knowing any of that.
30
+ *
31
+ * Z-order between this layer and the rest of a scene is the caller's, as it is for `Halo`: add the
32
+ * layer before a unit to sit terrain under it, or after to overlay.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { TerrainGraphicsLayer, resolveTerrainGraphics } from '@datamoc/mw_games/two-d/render';
37
+ *
38
+ * const placements = resolveTerrainGraphics(2, 1, [], () => new Set(['land']));
39
+ * const layer = new TerrainGraphicsLayer({
40
+ * placements,
41
+ * project: (x, y, dx, dy) => ({ x: (x + dx) * 32, y: (y + dy) * 32 }),
42
+ * });
43
+ * layer.setPlacements(placements);
44
+ * ```
45
+ */
46
+ export declare class TerrainGraphicsLayer extends Node2D {
47
+ private placements;
48
+ private readonly project;
49
+ private readonly resolveImage;
50
+ constructor(options: TerrainGraphicsLayerOptions);
51
+ /** replaces the resolved placements and redraws them in layer order */
52
+ setPlacements(placements: readonly TerrainPlacement[]): void;
53
+ private rebuild;
54
+ }
55
+ //# sourceMappingURL=TerrainGraphicsLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerrainGraphicsLayer.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/TerrainGraphicsLayer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,MAAM,WAAW,2BAA2B;IAC3C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAEjD;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAE7F,0GAA0G;IAC1G,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;CACpD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,oBAAqB,SAAQ,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAE3D,YAAY,OAAO,EAAE,2BAA2B,EAM/C;IAED,uEAAuE;IACvE,aAAa,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAG3D;IAED,OAAO,CAAC,OAAO;CAWf"}