@needle-tools/engine 2.65.2-pre → 2.67.0-pre

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 (289) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/needle-engine.js +34490 -26304
  3. package/dist/needle-engine.umd.cjs +748 -303
  4. package/lib/engine/api.d.ts +4 -0
  5. package/lib/engine/api.js +10 -0
  6. package/lib/engine/api.js.map +1 -1
  7. package/lib/engine/codegen/register_types.js +23 -7
  8. package/lib/engine/codegen/register_types.js.map +1 -1
  9. package/lib/engine/debug/debug_overlay.js +11 -2
  10. package/lib/engine/debug/debug_overlay.js.map +1 -1
  11. package/lib/engine/engine_addressables.js +4 -4
  12. package/lib/engine/engine_addressables.js.map +1 -1
  13. package/lib/engine/engine_assetdatabase.d.ts +17 -51
  14. package/lib/engine/engine_assetdatabase.js +252 -126
  15. package/lib/engine/engine_assetdatabase.js.map +1 -1
  16. package/lib/engine/engine_components.js +13 -1
  17. package/lib/engine/engine_components.js.map +1 -1
  18. package/lib/engine/engine_components_internal.d.ts +8 -0
  19. package/lib/engine/engine_components_internal.js +29 -0
  20. package/lib/engine/engine_components_internal.js.map +1 -0
  21. package/lib/engine/engine_constants.d.ts +1 -0
  22. package/lib/engine/engine_constants.js +1 -0
  23. package/lib/engine/engine_constants.js.map +1 -1
  24. package/lib/engine/engine_context_registry.d.ts +2 -0
  25. package/lib/engine/engine_context_registry.js +6 -0
  26. package/lib/engine/engine_context_registry.js.map +1 -1
  27. package/lib/engine/engine_editor-sync.d.ts +9 -0
  28. package/lib/engine/engine_editor-sync.js +8 -0
  29. package/lib/engine/engine_editor-sync.js.map +1 -0
  30. package/lib/engine/engine_element.d.ts +1 -0
  31. package/lib/engine/engine_element.js +4 -1
  32. package/lib/engine/engine_element.js.map +1 -1
  33. package/lib/engine/engine_element_loading.d.ts +3 -2
  34. package/lib/engine/engine_element_loading.js +19 -15
  35. package/lib/engine/engine_element_loading.js.map +1 -1
  36. package/lib/engine/engine_gameobject.js +21 -23
  37. package/lib/engine/engine_gameobject.js.map +1 -1
  38. package/lib/engine/engine_gizmos.js +3 -1
  39. package/lib/engine/engine_gizmos.js.map +1 -1
  40. package/lib/engine/engine_gltf_builtin_components.d.ts +2 -3
  41. package/lib/engine/engine_gltf_builtin_components.js +23 -6
  42. package/lib/engine/engine_gltf_builtin_components.js.map +1 -1
  43. package/lib/engine/engine_networking.d.ts +3 -1
  44. package/lib/engine/engine_networking.js +10 -8
  45. package/lib/engine/engine_networking.js.map +1 -1
  46. package/lib/engine/engine_networking_auto.d.ts +1 -0
  47. package/lib/engine/engine_networking_auto.js +42 -9
  48. package/lib/engine/engine_networking_auto.js.map +1 -1
  49. package/lib/engine/engine_patcher.d.ts +8 -0
  50. package/lib/engine/engine_patcher.js +98 -0
  51. package/lib/engine/engine_patcher.js.map +1 -0
  52. package/lib/engine/engine_physics.d.ts +34 -2
  53. package/lib/engine/engine_physics.js +110 -11
  54. package/lib/engine/engine_physics.js.map +1 -1
  55. package/lib/engine/engine_scenetools.js +0 -1
  56. package/lib/engine/engine_scenetools.js.map +1 -1
  57. package/lib/engine/engine_serialization_core.js +4 -0
  58. package/lib/engine/engine_serialization_core.js.map +1 -1
  59. package/lib/engine/engine_setup.d.ts +1 -1
  60. package/lib/engine/engine_setup.js +12 -5
  61. package/lib/engine/engine_setup.js.map +1 -1
  62. package/lib/engine/engine_texture.d.ts +6 -1
  63. package/lib/engine/engine_texture.js +39 -1
  64. package/lib/engine/engine_texture.js.map +1 -1
  65. package/lib/engine/engine_types.d.ts +4 -0
  66. package/lib/engine/engine_types.js.map +1 -1
  67. package/lib/engine/engine_utils.js +3 -2
  68. package/lib/engine/engine_utils.js.map +1 -1
  69. package/lib/engine/extensions/NEEDLE_progressive.d.ts +0 -1
  70. package/lib/engine/extensions/NEEDLE_progressive.js +24 -26
  71. package/lib/engine/extensions/NEEDLE_progressive.js.map +1 -1
  72. package/lib/engine/extensions/NEEDLE_render_objects.js +9 -0
  73. package/lib/engine/extensions/NEEDLE_render_objects.js.map +1 -1
  74. package/lib/engine/extensions/extensions.d.ts +4 -1
  75. package/lib/engine/extensions/extensions.js +16 -0
  76. package/lib/engine/extensions/extensions.js.map +1 -1
  77. package/lib/engine/extensions/usage_tracker.d.ts +12 -0
  78. package/lib/engine/extensions/usage_tracker.js +59 -0
  79. package/lib/engine/extensions/usage_tracker.js.map +1 -0
  80. package/lib/engine-components/Animator.js +0 -1
  81. package/lib/engine-components/Animator.js.map +1 -1
  82. package/lib/engine-components/AnimatorController.js +4 -0
  83. package/lib/engine-components/AnimatorController.js.map +1 -1
  84. package/lib/engine-components/AudioSource.js +2 -1
  85. package/lib/engine-components/AudioSource.js.map +1 -1
  86. package/lib/engine-components/Camera.d.ts +6 -0
  87. package/lib/engine-components/Camera.js +70 -31
  88. package/lib/engine-components/Camera.js.map +1 -1
  89. package/lib/engine-components/CharacterController.d.ts +1 -0
  90. package/lib/engine-components/CharacterController.js +14 -9
  91. package/lib/engine-components/CharacterController.js.map +1 -1
  92. package/lib/engine-components/Collider.js +14 -1
  93. package/lib/engine-components/Collider.js.map +1 -1
  94. package/lib/engine-components/Component.d.ts +52 -0
  95. package/lib/engine-components/Component.js +55 -14
  96. package/lib/engine-components/Component.js.map +1 -1
  97. package/lib/engine-components/Networking.js +19 -0
  98. package/lib/engine-components/Networking.js.map +1 -1
  99. package/lib/engine-components/OrbitControls.d.ts +2 -0
  100. package/lib/engine-components/OrbitControls.js +9 -0
  101. package/lib/engine-components/OrbitControls.js.map +1 -1
  102. package/lib/engine-components/ParticleSystem.d.ts +5 -1
  103. package/lib/engine-components/ParticleSystem.js +52 -7
  104. package/lib/engine-components/ParticleSystem.js.map +1 -1
  105. package/lib/engine-components/ParticleSystemModules.d.ts +2 -0
  106. package/lib/engine-components/ParticleSystemModules.js +26 -0
  107. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  108. package/lib/engine-components/ParticleSystemSubEmitter.js +5 -2
  109. package/lib/engine-components/ParticleSystemSubEmitter.js.map +1 -1
  110. package/lib/engine-components/ReflectionProbe.js +18 -6
  111. package/lib/engine-components/ReflectionProbe.js.map +1 -1
  112. package/lib/engine-components/Renderer.d.ts +1 -1
  113. package/lib/engine-components/Renderer.js +33 -11
  114. package/lib/engine-components/Renderer.js.map +1 -1
  115. package/lib/engine-components/ScreenCapture.js +3 -3
  116. package/lib/engine-components/ScreenCapture.js.map +1 -1
  117. package/lib/engine-components/Skybox.js +2 -0
  118. package/lib/engine-components/Skybox.js.map +1 -1
  119. package/lib/engine-components/SmoothFollow.js +1 -2
  120. package/lib/engine-components/SmoothFollow.js.map +1 -1
  121. package/lib/engine-components/SpectatorCamera.js +3 -3
  122. package/lib/engine-components/SpectatorCamera.js.map +1 -1
  123. package/lib/engine-components/SyncedCamera.js +1 -1
  124. package/lib/engine-components/SyncedCamera.js.map +1 -1
  125. package/lib/engine-components/SyncedTransform.js +2 -2
  126. package/lib/engine-components/SyncedTransform.js.map +1 -1
  127. package/lib/engine-components/TestRunner.js +1 -1
  128. package/lib/engine-components/TestRunner.js.map +1 -1
  129. package/lib/engine-components/WebARCameraBackground.d.ts +19 -0
  130. package/lib/engine-components/WebARCameraBackground.js +185 -0
  131. package/lib/engine-components/WebARCameraBackground.js.map +1 -0
  132. package/lib/engine-components/WebARSessionRoot.js +3 -2
  133. package/lib/engine-components/WebARSessionRoot.js.map +1 -1
  134. package/lib/engine-components/WebXR.d.ts +4 -0
  135. package/lib/engine-components/WebXR.js +11 -8
  136. package/lib/engine-components/WebXR.js.map +1 -1
  137. package/lib/engine-components/WebXRAvatar.js +1 -0
  138. package/lib/engine-components/WebXRAvatar.js.map +1 -1
  139. package/lib/engine-components/WebXRGrabRendering.js +2 -2
  140. package/lib/engine-components/WebXRGrabRendering.js.map +1 -1
  141. package/lib/engine-components/WebXRSync.js +2 -2
  142. package/lib/engine-components/WebXRSync.js.map +1 -1
  143. package/lib/engine-components/codegen/components.d.ts +14 -6
  144. package/lib/engine-components/codegen/components.js +14 -6
  145. package/lib/engine-components/codegen/components.js.map +1 -1
  146. package/lib/engine-components/js-extensions/Object3D.js +4 -1
  147. package/lib/engine-components/js-extensions/Object3D.js.map +1 -1
  148. package/lib/engine-components/postprocessing/Effects/Antialiasing.d.ts +13 -0
  149. package/lib/engine-components/postprocessing/Effects/Antialiasing.js +46 -0
  150. package/lib/engine-components/postprocessing/Effects/Antialiasing.js.map +1 -0
  151. package/lib/engine-components/postprocessing/Effects/Bloom.d.ts +12 -0
  152. package/lib/engine-components/postprocessing/Effects/Bloom.js +76 -0
  153. package/lib/engine-components/postprocessing/Effects/Bloom.js.map +1 -0
  154. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.d.ts +8 -0
  155. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js +39 -0
  156. package/lib/engine-components/postprocessing/Effects/ChromaticAberration.js.map +1 -0
  157. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.d.ts +12 -0
  158. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js +96 -0
  159. package/lib/engine-components/postprocessing/Effects/ColorAdjustments.js.map +1 -0
  160. package/lib/engine-components/postprocessing/Effects/DepthOfField.d.ts +21 -0
  161. package/lib/engine-components/postprocessing/Effects/DepthOfField.js +87 -0
  162. package/lib/engine-components/postprocessing/Effects/DepthOfField.js.map +1 -0
  163. package/lib/engine-components/postprocessing/Effects/Pixelation.d.ts +7 -0
  164. package/lib/engine-components/postprocessing/Effects/Pixelation.js +30 -0
  165. package/lib/engine-components/postprocessing/Effects/Pixelation.js.map +1 -0
  166. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.d.ts +11 -0
  167. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js +70 -0
  168. package/lib/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.js.map +1 -0
  169. package/lib/engine-components/postprocessing/Effects/Tonemapping.d.ts +16 -0
  170. package/lib/engine-components/postprocessing/Effects/Tonemapping.js +52 -0
  171. package/lib/engine-components/postprocessing/Effects/Tonemapping.js.map +1 -0
  172. package/lib/engine-components/postprocessing/Effects/Vignette.d.ts +11 -0
  173. package/lib/engine-components/postprocessing/Effects/Vignette.js +57 -0
  174. package/lib/engine-components/postprocessing/Effects/Vignette.js.map +1 -0
  175. package/lib/engine-components/postprocessing/PostProcessingEffect.d.ts +29 -0
  176. package/lib/engine-components/postprocessing/PostProcessingEffect.js +89 -0
  177. package/lib/engine-components/postprocessing/PostProcessingEffect.js.map +1 -0
  178. package/lib/engine-components/postprocessing/PostProcessingHandler.d.ts +13 -0
  179. package/lib/engine-components/postprocessing/PostProcessingHandler.js +119 -0
  180. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -0
  181. package/lib/engine-components/postprocessing/Volume.d.ts +23 -0
  182. package/lib/engine-components/postprocessing/Volume.js +176 -0
  183. package/lib/engine-components/postprocessing/Volume.js.map +1 -0
  184. package/lib/engine-components/postprocessing/VolumeParameter.d.ts +21 -0
  185. package/lib/engine-components/postprocessing/VolumeParameter.js +75 -0
  186. package/lib/engine-components/postprocessing/VolumeParameter.js.map +1 -0
  187. package/lib/engine-components/postprocessing/VolumeProfile.d.ts +7 -0
  188. package/lib/engine-components/postprocessing/VolumeProfile.js +42 -0
  189. package/lib/engine-components/postprocessing/VolumeProfile.js.map +1 -0
  190. package/lib/engine-components/timeline/TimelineTracks.js +14 -15
  191. package/lib/engine-components/timeline/TimelineTracks.js.map +1 -1
  192. package/lib/engine-components/ui/Text.js +28 -170
  193. package/lib/engine-components/ui/Text.js.map +1 -1
  194. package/lib/engine-components-experimental/networking/PlayerSync.d.ts +18 -0
  195. package/lib/engine-components-experimental/networking/PlayerSync.js +62 -8
  196. package/lib/engine-components-experimental/networking/PlayerSync.js.map +1 -1
  197. package/lib/include/three/ARButton.d.ts +1 -1
  198. package/lib/include/three/ARButton.js +11 -19
  199. package/lib/include/three/ARButton.js.map +1 -1
  200. package/lib/include/three/VRButton.js +1 -4
  201. package/lib/include/three/VRButton.js.map +1 -1
  202. package/package.json +3 -2
  203. package/plugins/vite/drop-client.js +77 -0
  204. package/plugins/vite/drop.js +81 -0
  205. package/plugins/vite/editor-connection.js +121 -0
  206. package/plugins/vite/index.js +9 -4
  207. package/plugins/vite/meta.js +3 -0
  208. package/plugins/vite/poster-client.js +6 -4
  209. package/src/engine/api.ts +30 -1
  210. package/src/engine/codegen/register_types.js +25 -9
  211. package/src/engine/debug/debug_overlay.ts +11 -2
  212. package/src/engine/engine_addressables.ts +4 -4
  213. package/src/engine/engine_assetdatabase.ts +291 -184
  214. package/src/engine/engine_components.ts +20 -1
  215. package/src/engine/engine_components_internal.ts +30 -0
  216. package/src/engine/engine_constants.ts +4 -1
  217. package/src/engine/engine_context_registry.ts +7 -0
  218. package/src/engine/engine_editor-sync.ts +21 -0
  219. package/src/engine/engine_element.ts +8 -1
  220. package/src/engine/engine_element_loading.ts +19 -15
  221. package/src/engine/engine_gameobject.ts +579 -583
  222. package/src/engine/engine_gizmos.ts +3 -2
  223. package/src/engine/engine_gltf_builtin_components.ts +30 -15
  224. package/src/engine/engine_networking.ts +10 -8
  225. package/src/engine/engine_networking_auto.ts +48 -11
  226. package/src/engine/engine_patcher.ts +113 -0
  227. package/src/engine/engine_physics.ts +128 -12
  228. package/src/engine/engine_scenetools.ts +0 -1
  229. package/src/engine/engine_serialization_core.ts +6 -0
  230. package/src/engine/engine_setup.ts +15 -5
  231. package/src/engine/engine_texture.ts +54 -5
  232. package/src/engine/engine_types.ts +6 -1
  233. package/src/engine/engine_utils.ts +6 -5
  234. package/src/engine/extensions/NEEDLE_progressive.ts +32 -32
  235. package/src/engine/extensions/NEEDLE_render_objects.ts +10 -1
  236. package/src/engine/extensions/extensions.ts +22 -1
  237. package/src/engine/extensions/usage_tracker.ts +91 -0
  238. package/src/engine-components/Animator.ts +0 -1
  239. package/src/engine-components/AnimatorController.ts +2 -0
  240. package/src/engine-components/AudioSource.ts +1 -1
  241. package/src/engine-components/Camera.ts +77 -37
  242. package/src/engine-components/CharacterController.ts +12 -9
  243. package/src/engine-components/Collider.ts +16 -2
  244. package/src/engine-components/Component.ts +74 -30
  245. package/src/engine-components/Networking.ts +9 -1
  246. package/src/engine-components/OrbitControls.ts +11 -2
  247. package/src/engine-components/ParticleSystem.ts +54 -10
  248. package/src/engine-components/ParticleSystemModules.ts +28 -1
  249. package/src/engine-components/ParticleSystemSubEmitter.ts +5 -3
  250. package/src/engine-components/ReflectionProbe.ts +17 -7
  251. package/src/engine-components/Renderer.ts +36 -16
  252. package/src/engine-components/ScreenCapture.ts +3 -3
  253. package/src/engine-components/Skybox.ts +2 -0
  254. package/src/engine-components/SmoothFollow.ts +4 -4
  255. package/src/engine-components/SpectatorCamera.ts +3 -3
  256. package/src/engine-components/SyncedCamera.ts +1 -1
  257. package/src/engine-components/SyncedTransform.ts +2 -2
  258. package/src/engine-components/TestRunner.ts +1 -1
  259. package/src/engine-components/WebARCameraBackground.ts +215 -0
  260. package/src/engine-components/WebARSessionRoot.ts +3 -2
  261. package/src/engine-components/WebXR.ts +12 -8
  262. package/src/engine-components/WebXRAvatar.ts +1 -1
  263. package/src/engine-components/WebXRGrabRendering.ts +2 -2
  264. package/src/engine-components/WebXRSync.ts +2 -2
  265. package/src/engine-components/codegen/components.ts +14 -6
  266. package/src/engine-components/js-extensions/Object3D.ts +6 -1
  267. package/src/engine-components/postprocessing/Effects/Antialiasing.ts +52 -0
  268. package/src/engine-components/postprocessing/Effects/Bloom.ts +75 -0
  269. package/src/engine-components/postprocessing/Effects/ChromaticAberration.ts +36 -0
  270. package/src/engine-components/postprocessing/Effects/ColorAdjustments.ts +114 -0
  271. package/src/engine-components/postprocessing/Effects/DepthOfField.ts +90 -0
  272. package/src/engine-components/postprocessing/Effects/Pixelation.ts +28 -0
  273. package/src/engine-components/postprocessing/Effects/ScreenspaceAmbientOcclusion.ts +71 -0
  274. package/src/engine-components/postprocessing/Effects/Tonemapping.ts +55 -0
  275. package/src/engine-components/postprocessing/Effects/Vignette.ts +55 -0
  276. package/src/engine-components/postprocessing/PostProcessingEffect.ts +112 -0
  277. package/src/engine-components/postprocessing/PostProcessingHandler.ts +148 -0
  278. package/src/engine-components/postprocessing/Volume.ts +194 -0
  279. package/src/engine-components/postprocessing/VolumeParameter.ts +85 -0
  280. package/src/engine-components/postprocessing/VolumeProfile.ts +40 -0
  281. package/src/engine-components/timeline/TimelineTracks.ts +16 -17
  282. package/src/engine-components/ui/Text.ts +37 -174
  283. package/src/engine-components-experimental/networking/PlayerSync.ts +69 -8
  284. package/src/include/three/ARButton.js +13 -24
  285. package/src/include/three/VRButton.js +1 -7
  286. package/lib/engine-components/Volume.d.ts +0 -34
  287. package/lib/engine-components/Volume.js +0 -140
  288. package/lib/engine-components/Volume.js.map +0 -1
  289. package/src/engine-components/Volume.ts +0 -141
@@ -167,6 +167,8 @@ export class Text extends Graphic {
167
167
  // if (this.canvas) {
168
168
  // fontSize /= this.canvas?.scaleFactor;
169
169
  // }
170
+
171
+ // @TODO : THH check for changes. fontColor => color?
170
172
  const textOpts = {
171
173
  content: this.text,
172
174
  fontColor: this.color,
@@ -203,8 +205,13 @@ export class Text extends Graphic {
203
205
  private createBlock(rt: RectTransform, hideOverflow: boolean, content: THREE.Object3D | Array<THREE.Object3D> | null, isTextIntermediate: boolean = false): ThreeMeshUI.Block | null {
204
206
  //@ts-ignore
205
207
  const opts: ThreeMeshUI.BlockOptions = {};
208
+
209
+ // @TODO : THH would require update for 7.x
206
210
  opts.hiddenOverflow = hideOverflow;
211
+
212
+ // @TODO : THH would require update for 7.x
207
213
  opts.interLine = (this.lineSpacing - 1) * this.fontSize * 1.333;
214
+
208
215
  this.getAlignment(opts, isTextIntermediate);
209
216
  const block = rt.createNewBlock(opts);
210
217
  if (content) {
@@ -219,9 +226,31 @@ export class Text extends Graphic {
219
226
 
220
227
 
221
228
  private getAlignment(opts: ThreeMeshUI.BlockOptions | any, isTextIntermediate: boolean = false): ThreeMeshUI.BlockOptions {
222
- if (!isTextIntermediate)
229
+ if (!isTextIntermediate) {
223
230
  opts.contentDirection = "row";
231
+
232
+ switch (this.alignment) {
233
+ case TextAnchor.UpperLeft:
234
+ case TextAnchor.MiddleLeft:
235
+ case TextAnchor.LowerLeft:
236
+ opts.textAlign = "left";
237
+ break;
238
+ case TextAnchor.UpperCenter:
239
+ case TextAnchor.MiddleCenter:
240
+ case TextAnchor.LowerCenter:
241
+ opts.textAlign = "center";
242
+
243
+ break;
244
+ case TextAnchor.UpperRight:
245
+ case TextAnchor.MiddleRight:
246
+ case TextAnchor.LowerRight:
247
+ opts.textAlign = "right";
248
+ break;
249
+ }
250
+ }
251
+
224
252
  switch (this.alignment) {
253
+ // @info ThreeMeshUI remaining alignment : space-between|space-around|"stretch(experimental)"
225
254
  default:
226
255
  case TextAnchor.UpperLeft:
227
256
  case TextAnchor.UpperCenter:
@@ -239,21 +268,24 @@ export class Text extends Graphic {
239
268
  opts.justifyContent = "end";
240
269
  break;
241
270
  }
271
+
272
+ // @TODO : THH evaluate this is still useful. In case of texts, horizontal alignments are made with textAlign
242
273
  switch (this.alignment) {
243
274
  case TextAnchor.UpperLeft:
244
275
  case TextAnchor.MiddleLeft:
245
276
  case TextAnchor.LowerLeft:
246
- opts.alignContent = isTextIntermediate ? "left" : "top";
277
+ opts.alignItems = "start";
247
278
  break;
248
279
  case TextAnchor.UpperCenter:
249
280
  case TextAnchor.MiddleCenter:
250
281
  case TextAnchor.LowerCenter:
251
- opts.alignContent = "center";
282
+ opts.alignItems = "center";
283
+
252
284
  break;
253
285
  case TextAnchor.UpperRight:
254
286
  case TextAnchor.MiddleRight:
255
287
  case TextAnchor.LowerRight:
256
- opts.alignContent = isTextIntermediate ? "right" : "bottom";
288
+ opts.alignItems = "end";
257
289
  break;
258
290
  }
259
291
  return opts;
@@ -378,7 +410,7 @@ export class Text extends Graphic {
378
410
  if (tag.type.length > 6) // color=
379
411
  {
380
412
  const col = tag.type.substring(6);
381
- opts.fontColor = getColorFromString(col);
413
+ opts.fontColor = new Color(col);
382
414
  }
383
415
  else {
384
416
  // if it does not contain a color it is white
@@ -477,174 +509,5 @@ declare type TagInfo = {
477
509
  isEndTag: boolean
478
510
  }
479
511
 
480
-
481
- function getColorFromString(str: string): Color {
482
- if (str.startsWith("#")) {
483
- const hex = str.substring(1);
484
- var bigint = parseInt(hex, 16);
485
- const r = (bigint >> 16) & 255;
486
- const g = (bigint >> 8) & 255;
487
- const b = bigint & 255;
488
- return new Color(r / 255, g / 255, b / 255);
489
- }
490
- switch (str) {
491
- // basic colors // https://www.rapidtables.com/web/color/RGB_Color.html
492
- case "black": return new Color(0, 0, 0);
493
- case "white": return new Color(1, 1, 1);
494
- case "red": return new Color(1, 0, 0);
495
- case "lime": return new Color(0, 1, 0);
496
- case "blue": return new Color(0, 0, 1);
497
- case "yellow": return new Color(1, 1, 0);
498
- case "cyan": return new Color(0, 1, 1);
499
- case "magenta": return new Color(1, 0, 1);
500
- case "silver": return new Color(0.75, 0.75, 0.75);
501
- case "gray": return new Color(0.5, 0.5, 0.5);
502
- case "maroon": return new Color(0.5, 0, 0);
503
- case "olive": return new Color(0.5, 0.5, 0);
504
- case "green": return new Color(0, 0.5, 0);
505
- case "purple": return new Color(0.5, 0, 0.5);
506
- case "teal": return new Color(0, 0.5, 0.5);
507
- case "navy": return new Color(0, 0, 0.5);
508
-
509
- // case "maroon": return new Color(0.5, 0, 0);
510
- case "darkred": return new Color(0.54, 0, 0);
511
- case "brown": return new Color(0.55, 0.27, 0);
512
- case "firebrick": return new Color(0.69, 0.13, 0.13);
513
- case "crimson": return new Color(0.86, 0.08, 0.24);
514
- // case "red": return new Color(1, 0, 0);
515
- case "tomato": return new Color(1, 0.39, 0.28);
516
- case "coral": return new Color(1, 0.49, 0.31);
517
- case "indianred": return new Color(0.6, 0.31, 0.51);
518
- case "lightcoral": return new Color(0.94, 0.5, 0.5);
519
- case "darkorange": return new Color(1, 0.55, 0);
520
- case "orange": return new Color(1, 0.65, 0);
521
- case "gold": return new Color(1, 0.84, 0);
522
- case "darkgoldenrod": return new Color(0.72, 0.53, 0.04);
523
- case "goldenrod": return new Color(0.85, 0.65, 0.13);
524
- case "palegoldenrod": return new Color(0.93, 0.87, 0.67);
525
- case "darkkhaki": return new Color(0.74, 0.7, 0.42);
526
- case "khaki": return new Color(0.94, 0.9, 0.55);
527
- // case "olive": return new Color(0.5, 0.5, 0);
528
- // case "yellow": return new Color(1, 1, 0);
529
- case "yellowgreen": return new Color(0.6, 0.8, 0.19);
530
- case "darkolivegreen": return new Color(0.33, 0.42, 0.18);
531
- case "olivedrab": return new Color(0.42, 0.56, 0.14);
532
- case "lawngreen": return new Color(0.49, 0.99, 0.0);
533
- case "chartreuse": return new Color(0.5, 1, 0);
534
- case "greenyellow": return new Color(0.68, 1, 0.18);
535
- case "darkgreen": return new Color(0, 0.39, 0);
536
- // case "green": return new Color(0, 1, 0);
537
- case "forestgreen": return new Color(0.13, 0.55, 0.13);
538
- // case "lime": return new Color(0, 1, 0);
539
- case "limegreen": return new Color(0.19, 0.80, 0.19);
540
- case "lightgreen": return new Color(0.56, 0.93, 0.56);
541
- case "palegreen": return new Color(0.59, 0.98, 0.59);
542
- case "darkseagreen": return new Color(0.56, 0.74, 0.56);
543
- case "mediumspringgreen": return new Color(0, 0.98, 0.6);
544
- case "springgreen": return new Color(0, 1, 0.5);
545
- case "seagreen": return new Color(0.18, 0.31, 0.31);
546
- case "mediumaquamarine": return new Color(0.4, 0.8, 0.66);
547
- case "mediumseagreen": return new Color(0.24, 0.70, 0.44);
548
- case "lightseagreen": return new Color(0.13, 0.70, 0.67);
549
- case "darkslategray": return new Color(0.18, 0.31, 0.31);
550
- // case "teal": return new Color(0, 0.5, 0.5);
551
- case "darkcyan": return new Color(0, 0.55, 0.55);
552
- case "aqua": return new Color(0, 1, 1);
553
- // case "cyan": return new Color(0, 1, 1);
554
- case "lightcyan": return new Color(0.8, 1, 1);
555
- case "darkturquoise": return new Color(0, 0.81, 0.82);
556
- case "turquoise": return new Color(0, 0.82, 0.82);
557
- case "mediumturquoise": return new Color(0.28, 0.82, 0.8);
558
- case "paleturquoise": return new Color(0.68, 1, 0.93);
559
- case "aquamarine": return new Color(0.5, 1, 0.83);
560
- case "powderblue": return new Color(0.69, 0.88, 0.9);
561
- case "cadetblue": return new Color(0.37, 0.62, 0.63);
562
- case "steelblue": return new Color(0.27, 0.51, 0.71);
563
- case "cornflowerblue": return new Color(0.39, 0.58, 0.93);
564
- case "deepskyblue": return new Color(0, 0.7, 1);
565
- case "dodgerblue": return new Color(0.12, 0.56, 1);
566
- case "lightblue": return new Color(0.68, 0.85, 0.9);
567
- case "skyblue": return new Color(0.53, 0.81, 0.92);
568
- case "lightskyblue": return new Color(0.53, 0.81, 0.98);
569
- case "midnightblue": return new Color(0.18, 0.18, 0.31);
570
- // case "navy": return new Color(0, 0, 0.5);
571
- case "darkblue": return new Color(0, 0, 0.55);
572
- case "mediumblue": return new Color(0, 0, 0.82);
573
- // case "blue": return new Color(0, 0, 1);
574
- case "royalblue": return new Color(0.25, 0.41, 0.88);
575
- case "blueviolet": return new Color(0.54, 0.17, 0.89);
576
- case "indigo": return new Color(0.29, 0, 0.51);
577
- case "darkslateblue": return new Color(0.28, 0.24, 0.55);
578
- case "slateblue": return new Color(0.42, 0.35, 0.80);
579
- case "mediumslateblue": return new Color(0.48, 0.41, 0.9);
580
- case "mediumpurple": return new Color(0.58, 0.44, 0.86);
581
- case "darkmagenta": return new Color(0.55, 0, 0.55);
582
- case "darkviolet": return new Color(0.58, 0, 0.83);
583
- case "darkorchid": return new Color(0.6, 0.2, 0.8);
584
- case "mediumorchid": return new Color(0.73, 0.33, 0.83);
585
- // case "purple": return new Color(0.5, 0, 0.5);
586
- case "thistle": return new Color(0.84, 0.75, 0.85);
587
- case "plum": return new Color(0.87, 0.63, 0.87);
588
- case "violet": return new Color(0.93, 0.51, 0.93);
589
- // case "magenta": return new Color(1, 0, 1);
590
- case "fuchsia": return new Color(1, 0, 1);
591
- case "orchid": return new Color(0.85, 0.44, 0.84);
592
- case "mediumvioletred": return new Color(0.78, 0.08, 0.52);
593
- case "palevioletred": return new Color(0.86, 0.44, 0.58);
594
- case "hotpink": return new Color(1, 0.4, 0.71);
595
- case "deeppink": return new Color(1, 0.08, 0.58);
596
- case "lightpink": return new Color(1, 0.71, 0.76);
597
- case "pink": return new Color(1, 0.75, 0.78);
598
- case "antiquewhite": return new Color(0.98, 0.92, 0.84);
599
- case "beige": return new Color(0.96, 0.96, 0.86);
600
- case "bisque": return new Color(1, 0.89, 0.77);
601
- case "blanchedalmond": return new Color(1, 0.92, 0.82);
602
- case "wheat": return new Color(0.96, 0.87, 0.87);
603
- case "cornsilk": return new Color(1, 0.97, 0.86);
604
- case "lemonchiffon": return new Color(1, 0.98, 0.8);
605
- case "lightgoldenrodyellow": return new Color(0.98, 0.98, 0.82);
606
- case "lightyellow": return new Color(1, 1, 0.8);
607
- case "saddlebrown": return new Color(0.55, 0.27, 0.07);
608
- case "sienna": return new Color(0.63, 0.32, 0.18);
609
- case "chocolate": return new Color(0.82, 0.41, 0.12);
610
- case "peru": return new Color(0.82, 0.52, 0.25);
611
- case "sandybrown": return new Color(0.96, 0.64, 0.38);
612
- case "burlywood": return new Color(0.87, 0.72, 0.53);
613
- case "tan": return new Color(0.82, 0.71, 0.55);
614
- case "rosybrown": return new Color(0.74, 0.56, 0.56);
615
- case "moccasin": return new Color(1, 0.89, 0.71);
616
- case "navajowhite": return new Color(1, 0.87, 0.68);
617
- case "peachpuff": return new Color(1, 0.85, 0.73);
618
- case "mistyrose": return new Color(1, 0.89, 0.88);
619
- case "lavenderblush": return new Color(1, 0.94, 0.93);
620
- case "linen": return new Color(0.98, 0.94, 0.9);
621
- case "oldlace": return new Color(0.99, 0.96, 0.9);
622
- case "papayawhip": return new Color(1, 0.94, 0.84);
623
- case "seashell": return new Color(1, 0.96, 0.93);
624
- case "mintcream": return new Color(0.98, 1, 0.98);
625
- case "slategray": return new Color(0.44, 0.5, 0.56);
626
- case "lightslategray": return new Color(0.47, 0.53, 0.6);
627
- case "lightsteelblue": return new Color(0.69, 0.77, 0.87);
628
- case "lavender": return new Color(0.9, 0.9, 0.98);
629
- case "floralwhite": return new Color(1, 0.98, 0.98);
630
- case "aliceblue": return new Color(0.94, 0.97, 1);
631
- case "ghostwhite": return new Color(0.97, 0.97, 1);
632
- case "honeydew": return new Color(0.94, 1, 0.94);
633
- case "ivory": return new Color(1, 1, 0.94);
634
- case "azure": return new Color(0.94, 1, 1);
635
- case "snow": return new Color(1, 0.98, 0.98);
636
- // case "black": return new Color(0, 0, 0);
637
- case "dimgray": return new Color(0.4, 0.4, 0.4);
638
- // case "gray": return new Color(0.5, 0.5, 0.5);
639
- case "darkgray": return new Color(0.66, 0.66, 0.66);
640
- // case "silver": return new Color(0.75, 0.75, 0.75);
641
- case "lightgray": return new Color(0.83, 0.83, 0.83);
642
- case "gainsboro": return new Color(0.86, 0.86, 0.86);
643
- case "whitesmoke": return new Color(0.96, 0.96, 0.96);
644
-
645
- }
646
- return new Color(1, 1, 1);
647
- }
648
-
649
512
  // const anyTag = new RegExp('<.+?>', 'g');
650
513
  // const regex = new RegExp('<(?<type>.+?)>(?<text>.+?)<\/.+?>', 'g');
@@ -24,11 +24,11 @@ export class PlayerSync extends Behaviour {
24
24
  this.context.connection.beginListen(RoomEvents.JoinedRoom, this.joinedRoomFunction!)
25
25
  }
26
26
  onDisable(): void {
27
- this.context.connection.stopListening(RoomEvents.JoinedRoom, this.joinedRoomFunction!)
27
+ this.context.connection.stopListen(RoomEvents.JoinedRoom, this.joinedRoomFunction!)
28
28
  }
29
29
 
30
30
  private async onUserJoined(_model) {
31
- const instance = await this.asset?.instantiateSynced({parent:this.gameObject}, true);
31
+ const instance = await this.asset?.instantiateSynced({ parent: this.gameObject }, true);
32
32
  if (instance) {
33
33
  let pl = GameObject.getComponent(instance as Object3D, PlayerState);
34
34
  if (pl) {
@@ -60,6 +60,17 @@ export class PlayerSync extends Behaviour {
60
60
  }
61
61
  }
62
62
 
63
+ export enum PlayerStateEvent {
64
+ OwnerChanged = "ownerChanged",
65
+ }
66
+
67
+ export declare interface PlayerStateOwnerChangedArgs {
68
+ playerState: PlayerState;
69
+ oldValue: string;
70
+ newValue: string;
71
+ }
72
+
73
+ export declare type PlayerStateEventCallback = (args: CustomEvent<PlayerStateOwnerChangedArgs>) => void;
63
74
 
64
75
  export class PlayerState extends Behaviour {
65
76
 
@@ -78,24 +89,70 @@ export class PlayerState extends Behaviour {
78
89
  //** use to check if a component or gameobject is part of a instance owned by the local player */
79
90
  static isLocalPlayer(obj: THREE.Object3D | Component): boolean {
80
91
  if (obj instanceof Object3D) {
81
- return GameObject.getComponentInParent(obj, PlayerState)?.isLocalPlayer ?? false;
92
+ const state = GameObject.getComponentInParent(obj, PlayerState);
93
+ return state?.isLocalPlayer ?? false;
82
94
  }
83
95
  else if (obj instanceof Component) {
84
- return GameObject.getComponentInParent(obj.gameObject, PlayerState)?.isLocalPlayer ?? false;
96
+ const state = GameObject.getComponentInParent(obj.gameObject, PlayerState);
97
+ return state?.isLocalPlayer ?? false;
85
98
  }
86
99
  return false;
87
100
  }
88
101
 
89
- @syncField()
90
- @serializable()
102
+ // static Callback
103
+ private static _callbacks: { [key: string]: PlayerStateEventCallback[] } = {};
104
+ /**
105
+ * Add a callback for a PlayerStateEvent
106
+ */
107
+ static addEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
108
+ if (!this._callbacks[event]) this._callbacks[event] = [];
109
+ this._callbacks[event].push(cb);
110
+ return cb;
111
+ }
112
+ static removeEventListener(event: PlayerStateEvent, cb: PlayerStateEventCallback) {
113
+ if (!this._callbacks[event]) return;
114
+ const index = this._callbacks[event].indexOf(cb);
115
+ if (index >= 0) this._callbacks[event].splice(index, 1);
116
+ }
117
+ private static dispatchEvent(event: PlayerStateEvent, args: CustomEvent<PlayerStateOwnerChangedArgs>) {
118
+ if (!this._callbacks[event]) return;
119
+ for (const cb of this._callbacks[event]) {
120
+ cb(args);
121
+ }
122
+ }
123
+
124
+ @syncField("onOwnerChange")
91
125
  owner?: string;
92
126
 
93
127
  get isLocalPlayer(): boolean {
94
128
  return this.owner === this.context.connection.connectionId;
95
129
  }
96
130
 
131
+ private onOwnerChange(newOwner: string, oldOwner: string) {
132
+ // Remove from local owner array if it was local before
133
+ const index = PlayerState._local.indexOf(this);
134
+ if (index >= 0) PlayerState._local.splice(index, 1);
135
+
136
+ // Args to use for dispatching events
137
+ const detail: PlayerStateOwnerChangedArgs = {
138
+ playerState: this,
139
+ oldValue: oldOwner,
140
+ newValue: newOwner
141
+ }
142
+
143
+ if (this.owner === this.context.connection.connectionId) {
144
+ PlayerState._local.push(this);
145
+ // console.warn(this.gameObject.guid, this.guid, this.owner, this.isLocalPlayer, PlayerState.isLocalPlayer(this));
146
+ const evt = new CustomEvent("local-owner-changed", { detail: detail });
147
+ this.dispatchEvent(evt);
148
+ PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
149
+ }
150
+ const evt = new CustomEvent("owner-changed", { detail: detail });
151
+ this.dispatchEvent(evt);
152
+ PlayerState.dispatchEvent(PlayerStateEvent.OwnerChanged, evt);
153
+ }
154
+
97
155
  awake(): void {
98
- if (this.isLocalPlayer) PlayerState.local.push(this);
99
156
  PlayerState.all.push(this);
100
157
 
101
158
  this.context.connection.beginListen(RoomEvents.UserLeftRoom, (model: { userId: string }) => {
@@ -109,12 +166,16 @@ export class PlayerState extends Behaviour {
109
166
  }
110
167
 
111
168
  start() {
112
- if (!this.owner || !this.context.connection.userIsInRoom(this.owner)) {
169
+ // If a player is spawned but not in the room anymore we want to destroy it
170
+ // this might happen in a case where all users get disconnected at once and the server
171
+ // still has the syncInstantiate messages that are sent to all clients
172
+ if (this.owner && !this.context.connection.userIsInRoom(this.owner)) {
113
173
  this.doDestroy();
114
174
  return;
115
175
  }
116
176
  }
117
177
 
178
+ /** this tells the server that this client has been destroyed and the networking message for the instantiate will be removed */
118
179
  doDestroy() {
119
180
  syncDestroy(this.gameObject, this.context.connection);
120
181
  }
@@ -1,13 +1,15 @@
1
1
  class ARButton {
2
2
 
3
- static createButton( renderer, sessionInit = {} ) {
3
+ static createButton( renderer, options = {} ) {
4
4
 
5
5
  const button = document.createElement( 'button' );
6
6
  let ARButtonControlsDomOverlay = false;
7
7
 
8
- function showStartAR( /*device*/ ) {
8
+ function showStartAR( /*device*/ ) {
9
+
10
+ options.optionalFeatures = options.optionalFeatures || [];
9
11
 
10
- if ( sessionInit.domOverlay === undefined) {
12
+ if ( options.domOverlay === undefined) {
11
13
 
12
14
  var overlay = document.createElement( 'div' );
13
15
  overlay.style.display = 'none';
@@ -32,25 +34,12 @@ class ARButton {
32
34
  path.setAttribute( 'stroke-width', 2 );
33
35
  svg.appendChild( path );
34
36
 
35
- if ( sessionInit.optionalFeatures === undefined ) {
36
-
37
- sessionInit.optionalFeatures = [];
38
-
39
- }
40
-
41
- sessionInit.optionalFeatures.push( 'dom-overlay' );
42
- sessionInit.domOverlay = { root: overlay };
37
+ options.optionalFeatures.push( 'dom-overlay' );
38
+ options.domOverlay = { root: overlay };
43
39
  ARButtonControlsDomOverlay = true;
44
40
 
45
41
  }
46
42
 
47
- if ( sessionInit.optionalFeatures === undefined ) sessionInit.optionalFeatures = [];
48
-
49
- // added for Hololens support
50
- sessionInit.optionalFeatures.push( 'local-floor' );
51
- sessionInit.optionalFeatures.push( 'hand-tracking' );
52
- sessionInit.optionalFeatures.push( 'layers' );
53
-
54
43
  //
55
44
 
56
45
  let currentSession = null;
@@ -62,8 +51,8 @@ class ARButton {
62
51
  // HTMLElements that are inside the Canvas element are not visible in the DOM Overlay.
63
52
  const isWebXRViewer = /WebXRViewer\//i.test( navigator.userAgent );
64
53
  if (isWebXRViewer) {
65
- if(sessionInit.domOverlay?.root) {
66
- const overlayElement = sessionInit.domOverlay.root;
54
+ if(options.domOverlay?.root) {
55
+ const overlayElement = options.domOverlay.root;
67
56
  originalDomOverlayParent = overlayElement.parentElement;
68
57
  if (originalDomOverlayParent) {
69
58
  console.log("Reparent DOM Overlay to body", overlayElement, overlayElement.style.display);
@@ -89,7 +78,7 @@ class ARButton {
89
78
  button.textContent = 'STOP AR';
90
79
 
91
80
  if (ARButtonControlsDomOverlay)
92
- sessionInit.domOverlay.root.style.display = '';
81
+ options.domOverlay.root.style.display = '';
93
82
 
94
83
  currentSession = session;
95
84
 
@@ -103,10 +92,10 @@ class ARButton {
103
92
 
104
93
  // if we reparented the DOM overlay, we're reverting it here
105
94
  if (originalDomOverlayParent)
106
- originalDomOverlayParent.appendChild(sessionInit.domOverlay.root);
95
+ originalDomOverlayParent.appendChild(options.domOverlay.root);
107
96
 
108
97
  if (ARButtonControlsDomOverlay)
109
- sessionInit.domOverlay.root.style.display = 'none';
98
+ options.domOverlay.root.style.display = 'none';
110
99
 
111
100
  currentSession = null;
112
101
 
@@ -138,7 +127,7 @@ class ARButton {
138
127
 
139
128
  if ( currentSession === null ) {
140
129
 
141
- navigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted );
130
+ navigator.xr.requestSession( 'immersive-ar', options ).then( onSessionStarted );
142
131
 
143
132
  } else {
144
133
 
@@ -2,12 +2,6 @@ class VRButton {
2
2
 
3
3
  static createButton( renderer, options ) {
4
4
 
5
- if ( options ) {
6
-
7
- console.error( 'THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' );
8
-
9
- }
10
-
11
5
  const button = document.createElement( 'button' );
12
6
 
13
7
  function showEnterVR( /*device*/ ) {
@@ -70,7 +64,7 @@ class VRButton {
70
64
  // ('local' is always available for immersive sessions and doesn't need to
71
65
  // be requested separately.)
72
66
 
73
- const sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking', 'high-fixed-foveation-level', 'layers' ] };
67
+ const sessionInit = { optionalFeatures: options.optionalFeatures };
74
68
  navigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted );
75
69
 
76
70
  } else {
@@ -1,34 +0,0 @@
1
- import { Behaviour } from "./Component";
2
- import { Context } from "../engine/engine_setup";
3
- export declare enum TonemappingMode {
4
- None = 0,
5
- Neutral = 1,
6
- ACES = 2
7
- }
8
- export declare class VolumeParameter {
9
- overrideState: boolean;
10
- value: number;
11
- }
12
- export declare class VolumeComponent {
13
- active: boolean;
14
- parameters?: VolumeParameter[];
15
- }
16
- export declare class ToneMapping extends VolumeComponent {
17
- mode?: VolumeParameter;
18
- get isToneMapping(): boolean;
19
- }
20
- export declare class ColorAdjustments extends VolumeComponent {
21
- postExposure?: VolumeParameter;
22
- }
23
- export declare class VolumeProfile {
24
- components?: VolumeComponent[];
25
- apply(context: Context): void;
26
- unapply(context: Context): void;
27
- private onUpdate;
28
- }
29
- export declare class Volume extends Behaviour {
30
- sharedProfile?: VolumeProfile;
31
- awake(): void;
32
- onEnable(): void;
33
- onDisable(): void;
34
- }
@@ -1,140 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { Behaviour } from "./Component";
8
- import { LinearToneMapping, ACESFilmicToneMapping, ReinhardToneMapping } from "three";
9
- import { serializable } from "../engine/engine_serialization_decorator";
10
- import { getParam } from "../engine/engine_utils";
11
- const debug = getParam("debugvolume");
12
- export var TonemappingMode;
13
- (function (TonemappingMode) {
14
- TonemappingMode[TonemappingMode["None"] = 0] = "None";
15
- TonemappingMode[TonemappingMode["Neutral"] = 1] = "Neutral";
16
- TonemappingMode[TonemappingMode["ACES"] = 2] = "ACES";
17
- })(TonemappingMode || (TonemappingMode = {}));
18
- export class VolumeParameter {
19
- overrideState = false;
20
- value = 0;
21
- }
22
- export class VolumeComponent {
23
- active = false;
24
- parameters;
25
- }
26
- export class ToneMapping extends VolumeComponent {
27
- mode;
28
- get isToneMapping() { return true; }
29
- }
30
- export class ColorAdjustments extends VolumeComponent {
31
- postExposure;
32
- }
33
- // resolve the types:
34
- function resolveComponentType(data) {
35
- if ("mode" in data)
36
- return ToneMapping;
37
- if ("postExposure" in data)
38
- return ColorAdjustments;
39
- return VolumeComponent;
40
- }
41
- const volumeKey = Symbol("volumeprofile");
42
- export class VolumeProfile {
43
- components;
44
- apply(context) {
45
- this.onUpdate(context, false);
46
- }
47
- unapply(context) {
48
- this.onUpdate(context, true);
49
- }
50
- onUpdate(context, remove) {
51
- if (!this.components)
52
- return;
53
- const renderer = context.renderer;
54
- const currentProfile = renderer[volumeKey];
55
- const isActive = currentProfile !== undefined;
56
- if (remove) {
57
- // can not remove volume profile that is not active
58
- if (!isActive)
59
- return;
60
- }
61
- else {
62
- renderer[volumeKey] = this;
63
- }
64
- for (const component of this.components) {
65
- if (component instanceof ToneMapping) {
66
- const tonemapping = component;
67
- if (!component.active || remove) {
68
- context.renderer.toneMapping = LinearToneMapping;
69
- continue;
70
- }
71
- if (debug)
72
- console.log("VOLUME:", TonemappingMode[tonemapping.mode?.value ?? 0]);
73
- const mode = tonemapping.mode;
74
- const value = mode?.overrideState ? mode?.value : 0;
75
- switch (value ?? 0) {
76
- case TonemappingMode.None:
77
- context.renderer.toneMapping = LinearToneMapping;
78
- break;
79
- case TonemappingMode.Neutral:
80
- context.renderer.toneMapping = ReinhardToneMapping;
81
- break;
82
- case TonemappingMode.ACES:
83
- context.renderer.toneMapping = ACESFilmicToneMapping;
84
- break;
85
- }
86
- }
87
- else if (component instanceof ColorAdjustments) {
88
- if (!component.active)
89
- continue;
90
- const colorAdjustments = component;
91
- // unity range goes from -15..15
92
- // three.js range goes from 0..inf
93
- if (debug)
94
- console.log(colorAdjustments.postExposure);
95
- let exposure = 1;
96
- // convert to linear
97
- if (colorAdjustments.postExposure)
98
- exposure = Math.pow(2, colorAdjustments.postExposure.value);
99
- // ACES applies a factor of roughly 1.666 ( /= .6 )
100
- if (context.renderer.toneMapping === ACESFilmicToneMapping) {
101
- // exposure /= Math.PI / 2;
102
- }
103
- const useExposure = colorAdjustments.postExposure?.overrideState && !remove;
104
- context.renderer.toneMappingExposure = useExposure ? exposure : 1;
105
- if (!context.renderer.toneMapping)
106
- context.renderer.toneMapping = LinearToneMapping;
107
- }
108
- }
109
- }
110
- }
111
- __decorate([
112
- serializable([d => resolveComponentType(d), VolumeComponent])
113
- ], VolumeProfile.prototype, "components", void 0);
114
- export class Volume extends Behaviour {
115
- sharedProfile;
116
- awake() {
117
- if (debug) {
118
- console.log(this);
119
- console.log("Press P to toggle post processing");
120
- window.addEventListener("keydown", (e) => {
121
- if (e.key === "p") {
122
- console.log("Toggle volume: " + this.name, !this.enabled);
123
- this.enabled = !this.enabled;
124
- }
125
- });
126
- }
127
- }
128
- onEnable() {
129
- if (debug)
130
- console.log("APPLY VOLUME", this);
131
- this.sharedProfile?.apply(this.context);
132
- }
133
- onDisable() {
134
- this.sharedProfile?.unapply(this.context);
135
- }
136
- }
137
- __decorate([
138
- serializable(VolumeProfile)
139
- ], Volume.prototype, "sharedProfile", void 0);
140
- //# sourceMappingURL=Volume.js.map