@woosh/meep-engine 3.18.0 → 3.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -1
  4. package/editor/view/particles/effect/ParticleCurveEditorView.js +303 -120
  5. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -1
  6. package/editor/view/particles/effect/ParticleGradientEditorView.js +108 -63
  7. package/editor/view/particles/effect/ParticleGraphEditorView.js +2 -2
  8. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  9. package/editor/view/particles/effect/ParticleNodeParametersView.js +7 -46
  10. package/editor/view/particles/effect/particle-editor.css +60 -30
  11. package/package.json +1 -2
  12. package/samples/engine/README.md +1 -1
  13. package/src/core/binary/compression/decompress_bytes.d.ts +13 -0
  14. package/src/core/binary/compression/decompress_bytes.d.ts.map +1 -0
  15. package/src/core/binary/compression/decompress_bytes.js +28 -0
  16. package/src/core/collection/array/array_group_by.d.ts.map +1 -1
  17. package/src/core/collection/array/array_group_by.js +2 -11
  18. package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
  19. package/src/core/geom/3d/shape/HeightMapShape3D.js +4 -9
  20. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +67 -22
  21. package/src/core/model/object/optional_clone.d.ts +7 -0
  22. package/src/core/model/object/optional_clone.d.ts.map +1 -0
  23. package/src/core/model/object/optional_equality.d.ts +10 -0
  24. package/src/core/model/object/optional_equality.d.ts.map +1 -0
  25. package/src/{shade/descriptor/util → core/model/object}/optional_equality.js +2 -2
  26. package/src/core/model/object/optional_hash.d.ts +9 -0
  27. package/src/core/model/object/optional_hash.d.ts.map +1 -0
  28. package/src/{shade/descriptor/util → core/model/object}/optional_hash.js +3 -3
  29. package/src/engine/asset/Asset.d.ts +1 -1
  30. package/src/engine/asset/Asset.d.ts.map +1 -1
  31. package/src/engine/asset/Asset.js +3 -1
  32. package/src/engine/asset/loaders/image/ImageDecoderWorker.js +12 -27
  33. package/src/engine/asset/loaders/image/prototypePNG.js +8 -7
  34. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts.map +1 -1
  35. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +9 -10
  36. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  37. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
  38. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +266 -0
  39. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -0
  40. package/src/engine/graphics/ecs/particles/ParticleEffect.js +439 -0
  41. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +58 -0
  42. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -0
  43. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +219 -0
  44. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +178 -25
  45. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  46. package/src/engine/graphics3/GPUParticleEmitterSystem.js +809 -310
  47. package/src/format/image/png/PNGReader.d.ts +7 -6
  48. package/src/format/image/png/PNGReader.d.ts.map +1 -1
  49. package/src/format/image/png/PNGReader.js +13 -12
  50. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts +3 -2
  51. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  52. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +5 -4
  53. package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts +3 -2
  54. package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts.map +1 -1
  55. package/src/format/image/png/chunk/png_chunk_decode_zTXt.js +5 -4
  56. package/src/format/image/png/png_inflate.d.ts +3 -3
  57. package/src/format/image/png/png_inflate.d.ts.map +1 -1
  58. package/src/format/image/png/png_inflate.js +29 -39
  59. package/src/format/texture/ktx2/ktx2_read.d.ts +4 -4
  60. package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
  61. package/src/format/texture/ktx2/ktx2_read.js +18 -21
  62. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +1 -1
  63. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +3 -3
  64. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +1 -1
  65. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +1 -1
  66. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +3 -3
  67. package/src/shade/descriptor/pipeline/render/FragmentState.js +1 -1
  68. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +3 -3
  69. package/src/shade/playground/particle_ecs/README.md +203 -0
  70. package/src/shade/playground/particle_ecs/bonfire_editor.d.ts +39 -0
  71. package/src/shade/playground/particle_ecs/bonfire_editor.d.ts.map +1 -0
  72. package/src/shade/playground/particle_ecs/bonfire_editor.js +315 -0
  73. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +145 -0
  74. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts.map +1 -0
  75. package/src/shade/playground/particle_ecs/bonfire_effects.js +202 -0
  76. package/src/shade/playground/particle_ecs/bonfire_sprites.d.ts +23 -0
  77. package/src/shade/playground/particle_ecs/bonfire_sprites.d.ts.map +1 -0
  78. package/src/shade/playground/particle_ecs/bonfire_sprites.js +315 -0
  79. package/src/shade/playground/particle_ecs/bonfire_world.d.ts +86 -0
  80. package/src/shade/playground/particle_ecs/bonfire_world.d.ts.map +1 -0
  81. package/src/shade/playground/particle_ecs/bonfire_world.js +303 -0
  82. package/src/shade/playground/particle_ecs/effects/embers.json +1634 -0
  83. package/src/shade/playground/particle_ecs/effects/flame.json +1882 -0
  84. package/src/shade/playground/particle_ecs/effects/smoke.json +1860 -0
  85. package/src/shade/playground/particle_ecs/effects/soot.json +1606 -0
  86. package/src/shade/playground/particle_ecs/index.html +330 -0
  87. package/src/shade/playground/particle_ecs/main.d.ts +2 -0
  88. package/src/shade/playground/particle_ecs/main.d.ts.map +1 -0
  89. package/src/shade/playground/particle_ecs/main.js +566 -0
  90. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts +16 -0
  91. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -0
  92. package/src/shade/playground/particle_ecs/moonlit_environment.js +144 -0
  93. package/src/shade/playground/particle_editor/README.md +5 -4
  94. package/src/shade/playground/particle_system/particle_prototype.d.ts +7 -9
  95. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  96. package/src/shade/playground/particle_system/particle_prototype.js +7 -9
  97. package/src/shade/playground/profile_hotkey.d.ts +58 -0
  98. package/src/shade/playground/profile_hotkey.d.ts.map +1 -0
  99. package/src/shade/playground/profile_hotkey.js +325 -0
  100. package/src/shade/playground/ssr_motion/README.md +22 -0
  101. package/src/shade/playground/ssr_motion/index.html +18 -0
  102. package/src/shade/playground/ssr_motion/main.d.ts +2 -0
  103. package/src/shade/playground/ssr_motion/main.d.ts.map +1 -0
  104. package/src/shade/playground/ssr_motion/main.js +149 -0
  105. package/src/shade/playground/ssr_variance/README.md +105 -0
  106. package/src/shade/playground/ssr_variance/capture.d.ts +16 -0
  107. package/src/shade/playground/ssr_variance/capture.d.ts.map +1 -0
  108. package/src/shade/playground/ssr_variance/capture.js +96 -0
  109. package/src/shade/playground/ssr_variance/index.html +23 -0
  110. package/src/shade/playground/ssr_variance/main.d.ts +2 -0
  111. package/src/shade/playground/ssr_variance/main.d.ts.map +1 -0
  112. package/src/shade/playground/ssr_variance/main.js +246 -0
  113. package/src/shade/playground/ssr_variance/reference.d.ts +18 -0
  114. package/src/shade/playground/ssr_variance/reference.d.ts.map +1 -0
  115. package/src/shade/playground/ssr_variance/reference.js +78 -0
  116. package/src/shade/playground/ssr_variance/scene.d.ts +11 -0
  117. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -0
  118. package/src/shade/playground/ssr_variance/scene.js +61 -0
  119. package/src/shade/playground/ssr_variance/statistics.d.ts +44 -0
  120. package/src/shade/playground/ssr_variance/statistics.d.ts.map +1 -0
  121. package/src/shade/playground/ssr_variance/statistics.js +51 -0
  122. package/src/shade/renderer/geometry/Geometry.d.ts.map +1 -1
  123. package/src/shade/renderer/geometry/Geometry.js +4 -7
  124. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
  125. package/src/shade/renderer/loader/gltf/tiny-gltf.js +9 -3
  126. package/src/shade/renderer/loader/usd/usd_decode_image.d.ts +4 -4
  127. package/src/shade/renderer/loader/usd/usd_decode_image.d.ts.map +1 -1
  128. package/src/shade/renderer/loader/usd/usd_decode_image.js +4 -4
  129. package/src/shade/renderer/material/StandardShadeMaterial.js +2 -2
  130. package/src/shade/renderer/particles/DESIGN.md +745 -702
  131. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  132. package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
  133. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
  134. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
  135. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  136. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +9 -15
  137. package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -1
  138. package/src/shade/renderer/particles/graph/particle_group_library.js +8 -3
  139. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +0 -2
  140. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  141. package/src/shade/renderer/particles/graph/particle_node_parameters.js +0 -9
  142. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/graph/particle_node_presentation.js +0 -10
  144. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +2 -8
  145. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/graph/particle_ramp.js +2 -8
  147. package/src/shade/renderer/particles/graph/validate_particle_graph.js +0 -6
  148. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  149. package/src/shade/renderer/particles/graph_particles_avboit.js +13 -4
  150. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +1 -12
  151. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/isa/InstructionStream.js +1 -12
  153. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +54 -60
  154. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  155. package/src/shade/renderer/particles/isa/ParticleVMISA.js +9 -17
  156. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +0 -1
  157. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  158. package/src/shade/renderer/particles/isa/particle_assembly.js +2 -16
  159. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +1 -1
  160. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +1 -1
  161. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +0 -14
  162. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +3 -17
  163. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  164. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +15 -36
  165. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  166. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +1 -5
  167. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
  168. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +1 -8
  169. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +2 -11
  170. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  171. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +2 -11
  172. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +11 -4
  173. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  174. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +431 -424
  175. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +13 -0
  177. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts +3 -6
  178. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  179. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +49 -17
  180. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  181. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +0 -2
  182. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -1
  183. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +0 -2
  184. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  185. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +1 -5
  186. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -1
  187. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +0 -2
  188. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +1 -3
  189. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  190. package/src/shade/renderer/particles/vm/ParticleVMReference.js +4 -20
  191. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  192. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +2 -5
  193. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -1
  194. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +0 -2
  195. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -1
  196. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +0 -2
  197. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  198. package/src/shade/renderer/postprocess/ssr/SSR.js +2 -1
  199. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -1
  200. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +20 -5
  201. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
  202. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +19 -5
  203. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts +4 -0
  204. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -0
  205. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +137 -0
  206. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +0 -8
  207. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  208. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +18 -114
  209. package/src/shade/renderer/scene/Mesh.js +1 -1
  210. package/src/shade/renderer/texture/ShadeTexture.js +1 -1
  211. package/src/shade/renderer/texture/source/texel_data_from_ktx2.d.ts +2 -2
  212. package/src/shade/renderer/texture/source/texel_data_from_ktx2.d.ts.map +1 -1
  213. package/src/shade/renderer/texture/source/texel_data_from_ktx2.js +3 -3
  214. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +0 -19
  215. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +0 -1
  216. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +0 -30
  217. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +0 -11
  218. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +0 -1
  219. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +0 -13
  220. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts +0 -20
  221. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts.map +0 -1
  222. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +0 -14
  223. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +0 -1
  224. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts +0 -50
  225. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts.map +0 -1
  226. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +0 -17
  227. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +0 -1
  228. /package/src/{shade/descriptor/util → core/model/object}/optional_clone.js +0 -0
@@ -0,0 +1,330 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Bonfire — ECS GPU particles</title>
7
+
8
+ <!-- the editor's own stylesheets; the panel below only opens once somebody presses E -->
9
+ <link rel="stylesheet" href="/editor/view/node-graph/node-graph.css">
10
+ <link rel="stylesheet" href="/editor/view/particles/effect/particle-editor.css">
11
+
12
+ <style>
13
+ :root {
14
+ color-scheme: dark;
15
+ --panel: rgba(14, 15, 20, 0.78);
16
+ --edge: rgba(255, 255, 255, 0.1);
17
+ --text: #e7e4de;
18
+ --muted: #9a978f;
19
+ --ember: #ff9a3c;
20
+
21
+ /* the editor's tokens, so its panels theme as they do inside the editor shell */
22
+ --meep-panel-bg: #1a1e25;
23
+ --meep-header-bg: #22262e;
24
+ --meep-divider-color: #10131a;
25
+ --meep-fg: #d6dae0;
26
+ --meep-fg-muted: #8b939f;
27
+ --meep-accent: #ff9a3c;
28
+ --meep-error: #ff7a7a;
29
+ --meep-warning: #e2b341;
30
+ --meep-font: 12px 'Segoe UI', system-ui, sans-serif;
31
+ --meep-graph-bg: #12151b;
32
+ --meep-graph-bg-glow: #1a1e26;
33
+ --meep-graph-node-bg: #232830;
34
+ --meep-graph-node-header: #2b313b;
35
+ --meep-graph-node-border: #363c46;
36
+ --meep-graph-input-bg: #171b21;
37
+ }
38
+
39
+ * {
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ html, body {
44
+ margin: 0;
45
+ height: 100%;
46
+ overflow: hidden;
47
+ background: #05060a;
48
+ color: var(--text);
49
+ font: 13px/1.5 ui-sans-serif, system-ui, "Segoe UI", Roboto, sans-serif;
50
+ }
51
+
52
+ #viewport {
53
+ position: fixed;
54
+ inset: 0;
55
+ /* the canvas is sized by the engine and is shorter than this while the editor is open */
56
+ overflow: hidden;
57
+ }
58
+
59
+ #viewport canvas {
60
+ display: block;
61
+ }
62
+
63
+ .panel {
64
+ position: fixed;
65
+ background: var(--panel);
66
+ border: 1px solid var(--edge);
67
+ border-radius: 10px;
68
+ padding: 12px 14px;
69
+ backdrop-filter: blur(8px);
70
+ }
71
+
72
+ #controls {
73
+ top: 14px;
74
+ left: 14px;
75
+ width: 236px;
76
+ }
77
+
78
+ #stats {
79
+ top: 14px;
80
+ right: 14px;
81
+ min-width: 190px;
82
+ font-variant-numeric: tabular-nums;
83
+ }
84
+
85
+ #hint {
86
+ bottom: 14px;
87
+ left: 14px;
88
+ color: var(--muted);
89
+ max-width: 460px;
90
+ }
91
+
92
+ #profile_status {
93
+ bottom: 14px;
94
+ right: 14px;
95
+ max-width: 420px;
96
+ color: var(--muted);
97
+ font-variant-numeric: tabular-nums;
98
+ }
99
+
100
+ #profile_status.recording {
101
+ color: #ff6a5c;
102
+ border-color: rgba(255, 106, 92, 0.5);
103
+ }
104
+
105
+ /* --- the particle editor ------------------------------------------------------------- */
106
+
107
+ /*
108
+ The whole window. E is a mode switch between looking at the fire and editing it, rather than
109
+ a panel that takes a share of the screen: a node graph wants every pixel it can get, and so
110
+ does the fire.
111
+ */
112
+ #effect_editor {
113
+ position: fixed;
114
+ inset: 0;
115
+ display: flex;
116
+ flex-direction: column;
117
+ background: var(--meep-panel-bg);
118
+ font: var(--meep-font);
119
+ color: var(--meep-fg);
120
+ }
121
+
122
+ /*
123
+ An id selector outranks the user agent's `[hidden] { display: none }`, so the `display: flex`
124
+ above would otherwise keep the panel over the scene from the moment the page loaded, while
125
+ the `hidden` property everything reads went on saying it was closed. This rule matches the
126
+ attribute at the same specificity and comes later, so the attribute wins — which is what
127
+ makes `hidden` the switch the editor already treats it as.
128
+ */
129
+ #effect_editor[hidden] {
130
+ display: none;
131
+ }
132
+
133
+ #editor_bar {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: 10px;
137
+ padding: 6px 10px;
138
+ background: var(--meep-header-bg);
139
+ border-bottom: 1px solid var(--meep-divider-color);
140
+ }
141
+
142
+ #editor_bar strong {
143
+ font-size: 12px;
144
+ font-weight: 600;
145
+ }
146
+
147
+ #editor_bar select,
148
+ #editor_bar button {
149
+ font: inherit;
150
+ color: var(--meep-fg);
151
+ background: var(--meep-graph-input-bg);
152
+ border: 1px solid var(--meep-graph-node-border);
153
+ border-radius: 5px;
154
+ padding: 4px 9px;
155
+ cursor: pointer;
156
+ width: auto;
157
+ margin: 0;
158
+ }
159
+
160
+ #editor_bar select:hover,
161
+ #editor_bar button:hover {
162
+ border-color: var(--meep-accent);
163
+ }
164
+
165
+ #editor_status {
166
+ flex: 1;
167
+ color: var(--meep-fg-muted);
168
+ font-variant-numeric: tabular-nums;
169
+ white-space: nowrap;
170
+ overflow: hidden;
171
+ text-overflow: ellipsis;
172
+ }
173
+
174
+ #editor_status.failed {
175
+ color: var(--meep-error);
176
+ }
177
+
178
+ #editor_mount {
179
+ position: relative;
180
+ flex: 1;
181
+ min-height: 0;
182
+ }
183
+
184
+ h1 {
185
+ margin: 0 0 2px;
186
+ font-size: 13px;
187
+ font-weight: 600;
188
+ letter-spacing: 0.02em;
189
+ }
190
+
191
+ h1 span {
192
+ color: var(--ember);
193
+ }
194
+
195
+ p.sub {
196
+ margin: 0 0 10px;
197
+ color: var(--muted);
198
+ font-size: 12px;
199
+ }
200
+
201
+ label.row {
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 8px;
205
+ padding: 3px 0;
206
+ cursor: pointer;
207
+ }
208
+
209
+ label.row input {
210
+ accent-color: var(--ember);
211
+ margin: 0;
212
+ }
213
+
214
+ label.row span {
215
+ flex: 1;
216
+ }
217
+
218
+ button {
219
+ width: 100%;
220
+ margin-top: 10px;
221
+ padding: 7px 10px;
222
+ font: inherit;
223
+ font-weight: 600;
224
+ color: #1a1206;
225
+ background: var(--ember);
226
+ border: 0;
227
+ border-radius: 7px;
228
+ cursor: pointer;
229
+ }
230
+
231
+ button:hover {
232
+ filter: brightness(1.1);
233
+ }
234
+
235
+ dl {
236
+ display: grid;
237
+ grid-template-columns: auto 1fr;
238
+ gap: 2px 12px;
239
+ margin: 0;
240
+ }
241
+
242
+ dt {
243
+ color: var(--muted);
244
+ }
245
+
246
+ dd {
247
+ margin: 0;
248
+ text-align: right;
249
+ }
250
+
251
+ #message {
252
+ position: fixed;
253
+ inset: 0;
254
+ display: grid;
255
+ place-content: center;
256
+ padding: 40px;
257
+ text-align: center;
258
+ white-space: pre-wrap;
259
+ color: #ffb4a4;
260
+ pointer-events: none;
261
+ }
262
+
263
+ kbd {
264
+ padding: 1px 5px;
265
+ border: 1px solid var(--edge);
266
+ border-radius: 4px;
267
+ background: rgba(255, 255, 255, 0.06);
268
+ font: inherit;
269
+ font-size: 11px;
270
+ }
271
+ </style>
272
+ </head>
273
+ <body tabindex="0">
274
+ <div id="viewport"></div>
275
+
276
+ <section class="panel" id="controls">
277
+ <h1>Bonfire · <span>ECS particles</span></h1>
278
+ <p class="sub">Four <code>ParticleEffect</code> entities</p>
279
+
280
+ <label class="row"><input type="checkbox" id="flame" checked><span>Flame</span></label>
281
+ <label class="row"><input type="checkbox" id="smoke" checked><span>Smoke</span></label>
282
+ <label class="row"><input type="checkbox" id="embers" checked><span>Embers</span></label>
283
+ <label class="row"><input type="checkbox" id="soot" checked><span>Soot</span></label>
284
+
285
+ <button id="stoke">Stoke the fire</button>
286
+ </section>
287
+
288
+ <section class="panel" id="stats">
289
+ <dl>
290
+ <dt>fps</dt>
291
+ <dd id="stat-fps">—</dd>
292
+ <dt>alive</dt>
293
+ <dd id="stat-alive">—</dd>
294
+ <dt>free</dt>
295
+ <dd id="stat-dead">—</dd>
296
+ <dt>drawn</dt>
297
+ <dd id="stat-draw">—</dd>
298
+ <dt>emitters</dt>
299
+ <dd id="stat-emitters">—</dd>
300
+ </dl>
301
+ </section>
302
+
303
+ <p class="panel" id="hint">
304
+ Drag to orbit, <kbd>W</kbd><kbd>A</kbd><kbd>S</kbd><kbd>D</kbd> to move, wheel to zoom. The
305
+ checkboxes write <code>emitting</code> on a component; the button asks an entity for a burst.
306
+ Both go through the ECS — nothing here touches the scene graph.
307
+ <br><kbd>E</kbd> switches to the particle editor — full screen, editing whichever effect the
308
+ selector names, live. <kbd>Esc</kbd> comes back from anywhere in it.
309
+ </p>
310
+
311
+ <p class="panel" id="profile_status"><kbd>T</kbd> to record a GPU profile</p>
312
+
313
+ <section id="effect_editor" hidden>
314
+ <div id="editor_bar">
315
+ <strong>Effect</strong>
316
+ <select id="editor_effect" title="which effect the graph below edits"></select>
317
+ <button id="editor_download" title="save this effect as JSON — drop it over effects/&lt;name&gt;.json">Download</button>
318
+ <button id="editor_import" title="open a document downloaded earlier">Import…</button>
319
+ <input type="file" id="editor_file" accept="application/json,.json" hidden>
320
+ <span id="editor_status"></span>
321
+ <button id="editor_close" title="Escape, or E when nothing is focused">Close · Esc</button>
322
+ </div>
323
+ <div id="editor_mount"></div>
324
+ </section>
325
+
326
+ <div id="message"></div>
327
+
328
+ <script type="module" src="./main.js"></script>
329
+ </body>
330
+ </html>
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_ecs/main.js"],"names":[],"mappings":""}