janusweb 1.5.41 → 1.5.42

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 (237) hide show
  1. package/media/assets/webui/apps/buttons/buttons.js +0 -40
  2. package/media/assets/webui/apps/comms/chat.html +1 -0
  3. package/media/assets/webui/apps/comms/chat_message.html +1 -1
  4. package/media/assets/webui/apps/comms/comms.js +13 -6
  5. package/media/assets/webui/apps/comms/external/naf-shim.js +1 -1
  6. package/media/assets/webui/apps/comms/voip.css +20 -0
  7. package/media/assets/webui/apps/comms/voip.js +175 -6
  8. package/media/assets/webui/apps/editor/editor.js +78 -8
  9. package/media/assets/webui/apps/inventory/inventory.css +2 -1
  10. package/media/assets/webui/apps/locomotion/teleporter.js +18 -8
  11. package/media/assets/webui/apps/xrmenu/xrmenu.js +10 -5
  12. package/media/lib/basis/basis_transcoder.js +8 -8
  13. package/media/lib/basis/basis_transcoder.wasm +0 -0
  14. package/media/lib/three-icosa/brushes/BlocksBasic-0e87b49c-6546-3a34-3a44-8a556d7d6c3e/BlocksBasic-0e87b49c-6546-3a34-3a44-8a556d7d6c3e-v10.0-fragment.glsl +284 -0
  15. package/media/lib/three-icosa/brushes/BlocksBasic-0e87b49c-6546-3a34-3a44-8a556d7d6c3e/BlocksBasic-0e87b49c-6546-3a34-3a44-8a556d7d6c3e-v10.0-vertex.glsl +60 -0
  16. package/media/lib/three-icosa/brushes/BlocksGem-232998f8-d357-47a2-993a-53415df9be10/BlocksGem-232998f8-d357-47a2-993a-53415df9be10-v10.0-fragment.glsl +334 -0
  17. package/media/lib/three-icosa/brushes/BlocksGem-232998f8-d357-47a2-993a-53415df9be10/BlocksGem-232998f8-d357-47a2-993a-53415df9be10-v10.0-vertex.glsl +46 -0
  18. package/media/lib/three-icosa/brushes/BlocksGlass-3d813d82-5839-4450-8ddc-8e889ecd96c7/BlocksGlass-3d813d82-5839-4450-8ddc-8e889ecd96c7-v10.0-fragment.glsl +248 -0
  19. package/media/lib/three-icosa/brushes/BlocksGlass-3d813d82-5839-4450-8ddc-8e889ecd96c7/BlocksGlass-3d813d82-5839-4450-8ddc-8e889ecd96c7-v10.0-vertex.glsl +60 -0
  20. package/media/lib/three-icosa/brushes/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c-v10.0-MainTex.png +0 -0
  21. package/media/lib/three-icosa/brushes/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c-v10.0-fragment.glsl +34 -0
  22. package/media/lib/three-icosa/brushes/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c/Bubbles-89d104cd-d012-426b-b5b3-bbaee63ac43c-v10.0-vertex.glsl +120 -0
  23. package/media/lib/three-icosa/brushes/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c-v10.0-MainTex.png +0 -0
  24. package/media/lib/three-icosa/brushes/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c-v10.0-fragment.glsl +89 -0
  25. package/media/lib/three-icosa/brushes/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c/CelVinyl-700f3aa8-9a7c-2384-8b8a-ea028905dd8c-v10.0-vertex.glsl +60 -0
  26. package/media/lib/three-icosa/brushes/ChromaticWave-0f0ff7b2-a677-45eb-a7d6-0cd7206f4816/ChromaticWave-0f0ff7b2-a677-45eb-a7d6-0cd7206f4816-v10.0-fragment.glsl +69 -0
  27. package/media/lib/three-icosa/brushes/ChromaticWave-0f0ff7b2-a677-45eb-a7d6-0cd7206f4816/ChromaticWave-0f0ff7b2-a677-45eb-a7d6-0cd7206f4816-v10.0-vertex.glsl +60 -0
  28. package/media/lib/three-icosa/brushes/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43-v10.0-MainTex.png +0 -0
  29. package/media/lib/three-icosa/brushes/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43-v10.0-fragment.glsl +289 -0
  30. package/media/lib/three-icosa/brushes/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43/CoarseBristles-1161af82-50cf-47db-9706-0c3576d43c43-v10.0-vertex.glsl +60 -0
  31. package/media/lib/three-icosa/brushes/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600-v10.0-MainTex.png +0 -0
  32. package/media/lib/three-icosa/brushes/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600-v10.0-fragment.glsl +292 -0
  33. package/media/lib/three-icosa/brushes/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600/CoarseBristles-79168f10-6961-464a-8be1-57ed364c5600-v10.0-vertex.glsl +60 -0
  34. package/media/lib/three-icosa/brushes/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81-v10.0-AlphaMask.png +0 -0
  35. package/media/lib/three-icosa/brushes/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81-v10.0-MainTex.png +0 -0
  36. package/media/lib/three-icosa/brushes/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81-v10.0-fragment.glsl +65 -0
  37. package/media/lib/three-icosa/brushes/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81/Comet-1caa6d7d-f015-3f54-3a4b-8b5354d39f81-v10.0-vertex.glsl +60 -0
  38. package/media/lib/three-icosa/brushes/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901-v10.0-MainTex.png +0 -0
  39. package/media/lib/three-icosa/brushes/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901-v10.0-fragment.glsl +481 -0
  40. package/media/lib/three-icosa/brushes/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901/DiamondHull-c8313697-2563-47fc-832e-290f4c04b901-v10.0-vertex.glsl +57 -0
  41. package/media/lib/three-icosa/brushes/Disco-4391aaaa-df73-4396-9e33-31e4e4930b27/Disco-4391aaaa-df73-4396-9e33-31e4e4930b27-v10.0-fragment.glsl +290 -0
  42. package/media/lib/three-icosa/brushes/Disco-4391aaaa-df73-4396-9e33-31e4e4930b27/Disco-4391aaaa-df73-4396-9e33-31e4e4930b27-v10.0-vertex.glsl +70 -0
  43. package/media/lib/three-icosa/brushes/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260-v10.0-MainTex.png +0 -0
  44. package/media/lib/three-icosa/brushes/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260-v10.0-fragment.glsl +113 -0
  45. package/media/lib/three-icosa/brushes/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260/DotMarker-d1d991f2-e7a0-4cf1-b328-f57e915e6260-v10.0-vertex.glsl +60 -0
  46. package/media/lib/three-icosa/brushes/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7-v10.0-MainTex.png +0 -0
  47. package/media/lib/three-icosa/brushes/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7-v10.0-fragment.glsl +35 -0
  48. package/media/lib/three-icosa/brushes/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7/Dots-6a1cf9f9-032c-45ec-9b1d-a6680bee30f7-v10.0-vertex.glsl +120 -0
  49. package/media/lib/three-icosa/brushes/DoubleTaperedFlat-0d3889f3-3ede-470c-8af4-f44813306126/DoubleTaperedFlat-0d3889f3-3ede-470c-8af4-f44813306126-v10.0-fragment.glsl +286 -0
  50. package/media/lib/three-icosa/brushes/DoubleTaperedFlat-0d3889f3-3ede-470c-8af4-f44813306126/DoubleTaperedFlat-0d3889f3-3ede-470c-8af4-f44813306126-v10.0-vertex.glsl +54 -0
  51. package/media/lib/three-icosa/brushes/DoubleTaperedMarker-0d3889f3-3ede-470c-8af4-de4813306126/DoubleTaperedMarker-0d3889f3-3ede-470c-8af4-de4813306126-v10.0-fragment.glsl +81 -0
  52. package/media/lib/three-icosa/brushes/DoubleTaperedMarker-0d3889f3-3ede-470c-8af4-de4813306126/DoubleTaperedMarker-0d3889f3-3ede-470c-8af4-de4813306126-v10.0-vertex.glsl +54 -0
  53. package/media/lib/three-icosa/brushes/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1-v10.0-BumpMap.png +0 -0
  54. package/media/lib/three-icosa/brushes/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1-v10.0-MainTex.png +0 -0
  55. package/media/lib/three-icosa/brushes/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1-v10.0-fragment.glsl +376 -0
  56. package/media/lib/three-icosa/brushes/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1/DuctTape-3ca16e2f-bdcd-4da2-8631-dcef342f40f1-v10.0-vertex.glsl +60 -0
  57. package/media/lib/three-icosa/brushes/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb-v10.0-BumpMap.png +0 -0
  58. package/media/lib/three-icosa/brushes/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb-v10.0-MainTex.png +0 -0
  59. package/media/lib/three-icosa/brushes/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb-v10.0-fragment.glsl +378 -0
  60. package/media/lib/three-icosa/brushes/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb/DuctTape-d0262945-853c-4481-9cbd-88586bed93cb-v10.0-vertex.glsl +60 -0
  61. package/media/lib/three-icosa/brushes/Electricity-f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51/Electricity-f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51-v10.0-fragment.glsl +50 -0
  62. package/media/lib/three-icosa/brushes/Electricity-f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51/Electricity-f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51-v10.0-vertex.glsl +79 -0
  63. package/media/lib/three-icosa/brushes/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360-v10.0-MainTex.png +0 -0
  64. package/media/lib/three-icosa/brushes/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360-v10.0-fragment.glsl +32 -0
  65. package/media/lib/three-icosa/brushes/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360/Embers-02ffb866-7fb2-4d15-b761-1012cefb1360-v10.0-vertex.glsl +152 -0
  66. package/media/lib/three-icosa/brushes/EnvironmentDiffuse-0ad58bbd-42bc-484e-ad9a-b61036ff4ce7/EnvironmentDiffuse-0ad58bbd-42bc-484e-ad9a-b61036ff4ce7-v1.0-fragment.glsl +288 -0
  67. package/media/lib/three-icosa/brushes/EnvironmentDiffuse-0ad58bbd-42bc-484e-ad9a-b61036ff4ce7/EnvironmentDiffuse-0ad58bbd-42bc-484e-ad9a-b61036ff4ce7-v1.0-vertex.glsl +47 -0
  68. package/media/lib/three-icosa/brushes/EnvironmentDiffuseLightMap-d01d9d6c-9a61-4aba-8146-5891fafb013b/EnvironmentDiffuseLightMap-d01d9d6c-9a61-4aba-8146-5891fafb013b-v1.0-fragment.glsl +288 -0
  69. package/media/lib/three-icosa/brushes/EnvironmentDiffuseLightMap-d01d9d6c-9a61-4aba-8146-5891fafb013b/EnvironmentDiffuseLightMap-d01d9d6c-9a61-4aba-8146-5891fafb013b-v1.0-vertex.glsl +50 -0
  70. package/media/lib/three-icosa/brushes/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e-v10.0-MainTex.png +0 -0
  71. package/media/lib/three-icosa/brushes/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e-v10.0-fragment.glsl +61 -0
  72. package/media/lib/three-icosa/brushes/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e/Fire-cb92b597-94ca-4255-b017-0e3f42f12f9e-v10.0-vertex.glsl +60 -0
  73. package/media/lib/three-icosa/brushes/Flat-280c0a7a-aad8-416c-a7d2-df63d129ca70/Flat-280c0a7a-aad8-416c-a7d2-df63d129ca70-v10.0-fragment.glsl +285 -0
  74. package/media/lib/three-icosa/brushes/Flat-280c0a7a-aad8-416c-a7d2-df63d129ca70/Flat-280c0a7a-aad8-416c-a7d2-df63d129ca70-v10.0-vertex.glsl +60 -0
  75. package/media/lib/three-icosa/brushes/Flat-2d35bcf0-e4d8-452c-97b1-3311be063130/Flat-2d35bcf0-e4d8-452c-97b1-3311be063130-v10.0-fragment.glsl +286 -0
  76. package/media/lib/three-icosa/brushes/Flat-2d35bcf0-e4d8-452c-97b1-3311be063130/Flat-2d35bcf0-e4d8-452c-97b1-3311be063130-v10.0-vertex.glsl +60 -0
  77. package/media/lib/three-icosa/brushes/FlatDeprecated-55303bc4-c749-4a72-98d9-d23e68e76e18/FlatDeprecated-55303bc4-c749-4a72-98d9-d23e68e76e18-v10.0-fragment.glsl +285 -0
  78. package/media/lib/three-icosa/brushes/FlatDeprecated-55303bc4-c749-4a72-98d9-d23e68e76e18/FlatDeprecated-55303bc4-c749-4a72-98d9-d23e68e76e18-v10.0-vertex.glsl +60 -0
  79. package/media/lib/three-icosa/brushes/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3-v10.0-MainTex.png +0 -0
  80. package/media/lib/three-icosa/brushes/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3-v10.0-fragment.glsl +40 -0
  81. package/media/lib/three-icosa/brushes/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3/Highlighter-cf019139-d41c-4eb0-a1d0-5cf54b0a42f3-v10.0-vertex.glsl +60 -0
  82. package/media/lib/three-icosa/brushes/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9-v10.0-MainTex.png +0 -0
  83. package/media/lib/three-icosa/brushes/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9-v10.0-fragment.glsl +33 -0
  84. package/media/lib/three-icosa/brushes/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9/HyperGrid-6a1cf9f9-032c-45ec-9b6e-a6680bee32e9-v10.0-vertex.glsl +60 -0
  85. package/media/lib/three-icosa/brushes/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c-v10.0-BumpMap.png +0 -0
  86. package/media/lib/three-icosa/brushes/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c-v10.0-MainTex.png +0 -0
  87. package/media/lib/three-icosa/brushes/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c-v10.0-fragment.glsl +386 -0
  88. package/media/lib/three-icosa/brushes/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c/Hypercolor-dce872c2-7b49-4684-b59b-c45387949c5c-v10.0-vertex.glsl +60 -0
  89. package/media/lib/three-icosa/brushes/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5-v10.0-BumpMap.png +0 -0
  90. package/media/lib/three-icosa/brushes/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5-v10.0-MainTex.png +0 -0
  91. package/media/lib/three-icosa/brushes/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5-v10.0-fragment.glsl +385 -0
  92. package/media/lib/three-icosa/brushes/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5/Hypercolor-e8ef32b1-baa8-460a-9c2c-9cf8506794f5-v10.0-vertex.glsl +60 -0
  93. package/media/lib/three-icosa/brushes/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37-v10.0-BumpMap.png +0 -0
  94. package/media/lib/three-icosa/brushes/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37-v10.0-fragment.glsl +376 -0
  95. package/media/lib/three-icosa/brushes/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37/Icing-2f212815-f4d3-c1a4-681a-feeaf9c6dc37-v10.0-vertex.glsl +60 -0
  96. package/media/lib/three-icosa/brushes/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa-v10.0-BumpMap.png +0 -0
  97. package/media/lib/three-icosa/brushes/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa-v10.0-MainTex.png +0 -0
  98. package/media/lib/three-icosa/brushes/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa-v10.0-fragment.glsl +376 -0
  99. package/media/lib/three-icosa/brushes/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa/Ink-c0012095-3ffd-4040-8ee1-fc180d346eaa-v10.0-vertex.glsl +60 -0
  100. package/media/lib/three-icosa/brushes/Ink-f5c336cf-5108-4b40-ade9-c687504385ab/Ink-f5c336cf-5108-4b40-ade9-c687504385ab-v10.0-BumpMap.png +0 -0
  101. package/media/lib/three-icosa/brushes/Ink-f5c336cf-5108-4b40-ade9-c687504385ab/Ink-f5c336cf-5108-4b40-ade9-c687504385ab-v10.0-MainTex.png +0 -0
  102. package/media/lib/three-icosa/brushes/Ink-f5c336cf-5108-4b40-ade9-c687504385ab/Ink-f5c336cf-5108-4b40-ade9-c687504385ab-v10.0-fragment.glsl +377 -0
  103. package/media/lib/three-icosa/brushes/Ink-f5c336cf-5108-4b40-ade9-c687504385ab/Ink-f5c336cf-5108-4b40-ade9-c687504385ab-v10.0-vertex.glsl +60 -0
  104. package/media/lib/three-icosa/brushes/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487-v10.0-BumpMap.png +0 -0
  105. package/media/lib/three-icosa/brushes/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487-v10.0-MainTex.png +0 -0
  106. package/media/lib/three-icosa/brushes/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487-v10.0-fragment.glsl +319 -0
  107. package/media/lib/three-icosa/brushes/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487/Leaves-ea19de07-d0c0-4484-9198-18489a3c1487-v10.0-vertex.glsl +60 -0
  108. package/media/lib/three-icosa/brushes/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62-v10.0-MainTex.png +0 -0
  109. package/media/lib/three-icosa/brushes/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62-v10.0-fragment.glsl +47 -0
  110. package/media/lib/three-icosa/brushes/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62/Light-2241cd32-8ba2-48a5-9ee7-2caef7e9ed62-v10.0-vertex.glsl +60 -0
  111. package/media/lib/three-icosa/brushes/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27-v10.0-MainTex.png +0 -0
  112. package/media/lib/three-icosa/brushes/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27-v10.0-fragment.glsl +330 -0
  113. package/media/lib/three-icosa/brushes/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27/LightWire-4391aaaa-df81-4396-9e33-31e4e4930b27-v10.0-vertex.glsl +64 -0
  114. package/media/lib/three-icosa/brushes/Lofted-d381e0f5-3def-4a0d-8853-31e9200bcbda/Lofted-d381e0f5-3def-4a0d-8853-31e9200bcbda-v10.0-fragment.glsl +285 -0
  115. package/media/lib/three-icosa/brushes/Lofted-d381e0f5-3def-4a0d-8853-31e9200bcbda/Lofted-d381e0f5-3def-4a0d-8853-31e9200bcbda-v10.0-vertex.glsl +60 -0
  116. package/media/lib/three-icosa/brushes/Marker-429ed64a-4e97-4466-84d3-145a861ef684/Marker-429ed64a-4e97-4466-84d3-145a861ef684-v10.0-MainTex.png +0 -0
  117. package/media/lib/three-icosa/brushes/Marker-429ed64a-4e97-4466-84d3-145a861ef684/Marker-429ed64a-4e97-4466-84d3-145a861ef684-v10.0-fragment.glsl +87 -0
  118. package/media/lib/three-icosa/brushes/Marker-429ed64a-4e97-4466-84d3-145a861ef684/Marker-429ed64a-4e97-4466-84d3-145a861ef684-v10.0-vertex.glsl +60 -0
  119. package/media/lib/three-icosa/brushes/MatteHull-79348357-432d-4746-8e29-0e25c112e3aa/MatteHull-79348357-432d-4746-8e29-0e25c112e3aa-v10.0-fragment.glsl +285 -0
  120. package/media/lib/three-icosa/brushes/MatteHull-79348357-432d-4746-8e29-0e25c112e3aa/MatteHull-79348357-432d-4746-8e29-0e25c112e3aa-v10.0-vertex.glsl +60 -0
  121. package/media/lib/three-icosa/brushes/NeonPulse-b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6/NeonPulse-b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6-v10.0-fragment.glsl +267 -0
  122. package/media/lib/three-icosa/brushes/NeonPulse-b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6/NeonPulse-b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6-v10.0-vertex.glsl +60 -0
  123. package/media/lib/three-icosa/brushes/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699-v10.0-BumpMap.png +0 -0
  124. package/media/lib/three-icosa/brushes/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699-v10.0-MainTex.png +0 -0
  125. package/media/lib/three-icosa/brushes/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699-v10.0-fragment.glsl +377 -0
  126. package/media/lib/three-icosa/brushes/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699/OilPaint-f72ec0e7-a844-4e38-82e3-140c44772699-v10.0-vertex.glsl +60 -0
  127. package/media/lib/three-icosa/brushes/Paper-759f1ebd-20cd-4720-8d41-234e0da63716/Paper-759f1ebd-20cd-4720-8d41-234e0da63716-v10.0-BumpMap.png +0 -0
  128. package/media/lib/three-icosa/brushes/Paper-759f1ebd-20cd-4720-8d41-234e0da63716/Paper-759f1ebd-20cd-4720-8d41-234e0da63716-v10.0-MainTex.png +0 -0
  129. package/media/lib/three-icosa/brushes/Paper-759f1ebd-20cd-4720-8d41-234e0da63716/Paper-759f1ebd-20cd-4720-8d41-234e0da63716-v10.0-fragment.glsl +376 -0
  130. package/media/lib/three-icosa/brushes/Paper-759f1ebd-20cd-4720-8d41-234e0da63716/Paper-759f1ebd-20cd-4720-8d41-234e0da63716-v10.0-vertex.glsl +60 -0
  131. package/media/lib/three-icosa/brushes/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5-v10.0-BumpMap.png +0 -0
  132. package/media/lib/three-icosa/brushes/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5-v10.0-MainTex.png +0 -0
  133. package/media/lib/three-icosa/brushes/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5-v10.0-fragment.glsl +377 -0
  134. package/media/lib/three-icosa/brushes/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5/Paper-f1114e2e-eb8d-4fde-915a-6e653b54e9f5-v10.0-vertex.glsl +60 -0
  135. package/media/lib/three-icosa/brushes/PbrTemplate-f86a096c-2f4f-4f9d-ae19-81b99f2944e0/PbrTemplate-f86a096c-2f4f-4f9d-ae19-81b99f2944e0-v1.0-fragment.glsl +370 -0
  136. package/media/lib/three-icosa/brushes/PbrTemplate-f86a096c-2f4f-4f9d-ae19-81b99f2944e0/PbrTemplate-f86a096c-2f4f-4f9d-ae19-81b99f2944e0-v1.0-vertex.glsl +48 -0
  137. package/media/lib/three-icosa/brushes/PbrTransparentTemplate-19826f62-42ac-4a9e-8b77-4231fbd0cfbf/PbrTransparentTemplate-19826f62-42ac-4a9e-8b77-4231fbd0cfbf-v1.0-fragment.glsl +374 -0
  138. package/media/lib/three-icosa/brushes/PbrTransparentTemplate-19826f62-42ac-4a9e-8b77-4231fbd0cfbf/PbrTransparentTemplate-19826f62-42ac-4a9e-8b77-4231fbd0cfbf-v1.0-vertex.glsl +48 -0
  139. package/media/lib/three-icosa/brushes/Petal-e0abbc80-0f80-e854-4970-8924a0863dcc/Petal-e0abbc80-0f80-e854-4970-8924a0863dcc-v10.0-fragment.glsl +367 -0
  140. package/media/lib/three-icosa/brushes/Petal-e0abbc80-0f80-e854-4970-8924a0863dcc/Petal-e0abbc80-0f80-e854-4970-8924a0863dcc-v10.0-vertex.glsl +60 -0
  141. package/media/lib/three-icosa/brushes/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336-v10.0-MainTex.png +0 -0
  142. package/media/lib/three-icosa/brushes/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336-v10.0-fragment.glsl +64 -0
  143. package/media/lib/three-icosa/brushes/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336/Plasma-c33714d1-b2f9-412e-bd50-1884c9d46336-v10.0-vertex.glsl +60 -0
  144. package/media/lib/three-icosa/brushes/Rainbow-ad1ad437-76e2-450d-a23a-e17f8310b960/Rainbow-ad1ad437-76e2-450d-a23a-e17f8310b960-v10.0-fragment.glsl +70 -0
  145. package/media/lib/three-icosa/brushes/Rainbow-ad1ad437-76e2-450d-a23a-e17f8310b960/Rainbow-ad1ad437-76e2-450d-a23a-e17f8310b960-v10.0-vertex.glsl +60 -0
  146. package/media/lib/three-icosa/brushes/ShinyHull-faaa4d44-fcfb-4177-96be-753ac0421ba3/ShinyHull-faaa4d44-fcfb-4177-96be-753ac0421ba3-v10.0-fragment.glsl +367 -0
  147. package/media/lib/three-icosa/brushes/ShinyHull-faaa4d44-fcfb-4177-96be-753ac0421ba3/ShinyHull-faaa4d44-fcfb-4177-96be-753ac0421ba3-v10.0-vertex.glsl +60 -0
  148. package/media/lib/three-icosa/brushes/Smoke-70d79cca-b159-4f35-990c-f02193947fe8/Smoke-70d79cca-b159-4f35-990c-f02193947fe8-v10.0-MainTex.png +0 -0
  149. package/media/lib/three-icosa/brushes/Smoke-70d79cca-b159-4f35-990c-f02193947fe8/Smoke-70d79cca-b159-4f35-990c-f02193947fe8-v10.0-fragment.glsl +30 -0
  150. package/media/lib/three-icosa/brushes/Smoke-70d79cca-b159-4f35-990c-f02193947fe8/Smoke-70d79cca-b159-4f35-990c-f02193947fe8-v10.0-vertex.glsl +125 -0
  151. package/media/lib/three-icosa/brushes/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c-v10.0-MainTex.png +0 -0
  152. package/media/lib/three-icosa/brushes/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c-v10.0-fragment.glsl +31 -0
  153. package/media/lib/three-icosa/brushes/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c/Snow-d902ed8b-d0d1-476c-a8de-878a79e3a34c-v10.0-vertex.glsl +143 -0
  154. package/media/lib/three-icosa/brushes/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b-v10.0-MainTex.png +0 -0
  155. package/media/lib/three-icosa/brushes/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b-v10.0-fragment.glsl +34 -0
  156. package/media/lib/three-icosa/brushes/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b/SoftHighlighter-accb32f5-4509-454f-93f8-1df3fd31df1b-v10.0-vertex.glsl +60 -0
  157. package/media/lib/three-icosa/brushes/Spikes-cf7f0059-7aeb-53a4-2b67-c83d863a9ffa/Spikes-cf7f0059-7aeb-53a4-2b67-c83d863a9ffa-v10.0-fragment.glsl +285 -0
  158. package/media/lib/three-icosa/brushes/Spikes-cf7f0059-7aeb-53a4-2b67-c83d863a9ffa/Spikes-cf7f0059-7aeb-53a4-2b67-c83d863a9ffa-v10.0-vertex.glsl +60 -0
  159. package/media/lib/three-icosa/brushes/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e-v10.0-MainTex.png +0 -0
  160. package/media/lib/three-icosa/brushes/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e-v10.0-fragment.glsl +290 -0
  161. package/media/lib/three-icosa/brushes/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e/Splatter-7a1c8107-50c5-4b70-9a39-421576d6617e-v10.0-vertex.glsl +60 -0
  162. package/media/lib/three-icosa/brushes/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3-v10.0-MainTex.png +0 -0
  163. package/media/lib/three-icosa/brushes/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3-v10.0-fragment.glsl +291 -0
  164. package/media/lib/three-icosa/brushes/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3/Splatter-8dc4a70c-d558-4efd-a5ed-d4e860f40dc3-v10.0-vertex.glsl +60 -0
  165. package/media/lib/three-icosa/brushes/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711-v10.0-MainTex.png +0 -0
  166. package/media/lib/three-icosa/brushes/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711-v10.0-fragment.glsl +31 -0
  167. package/media/lib/three-icosa/brushes/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711/Stars-0eb4db27-3f82-408d-b5a1-19ebd7d5b711-v10.0-vertex.glsl +128 -0
  168. package/media/lib/three-icosa/brushes/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3-v10.0-MainTex.png +0 -0
  169. package/media/lib/three-icosa/brushes/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3-v10.0-fragment.glsl +63 -0
  170. package/media/lib/three-icosa/brushes/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3/Streamers-44bb800a-fbc3-4592-8426-94ecb05ddec3-v10.0-vertex.glsl +60 -0
  171. package/media/lib/three-icosa/brushes/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414-v10.0-MainTex.png +0 -0
  172. package/media/lib/three-icosa/brushes/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414-v10.0-fragment.glsl +113 -0
  173. package/media/lib/three-icosa/brushes/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414/Taffy-0077f88c-d93a-42f3-b59b-b31c50cdb414-v10.0-vertex.glsl +62 -0
  174. package/media/lib/three-icosa/brushes/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c-v10.0-MainTex.png +0 -0
  175. package/media/lib/three-icosa/brushes/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c-v10.0-fragment.glsl +292 -0
  176. package/media/lib/three-icosa/brushes/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c/TaperedFlat-b468c1fb-f254-41ed-8ec9-57030bc5660c-v10.0-vertex.glsl +60 -0
  177. package/media/lib/three-icosa/brushes/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb-v10.0-MainTex.png +0 -0
  178. package/media/lib/three-icosa/brushes/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb-v10.0-fragment.glsl +287 -0
  179. package/media/lib/three-icosa/brushes/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb/TaperedFlat-c8ccb53d-ae13-45ef-8afb-b730d81394eb-v10.0-vertex.glsl +58 -0
  180. package/media/lib/three-icosa/brushes/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c-v10.0-MainTex.png +0 -0
  181. package/media/lib/three-icosa/brushes/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c-v10.0-fragment.glsl +113 -0
  182. package/media/lib/three-icosa/brushes/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c/TaperedMarker-d90c6ad8-af0f-4b54-b422-e0f92abe1b3c-v10.0-vertex.glsl +60 -0
  183. package/media/lib/three-icosa/brushes/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0-v10.0-MainTex.png +0 -0
  184. package/media/lib/three-icosa/brushes/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0-v10.0-fragment.glsl +314 -0
  185. package/media/lib/three-icosa/brushes/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0/TaperedMarker_Flat-1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0-v10.0-vertex.glsl +60 -0
  186. package/media/lib/three-icosa/brushes/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f-v10.0-BumpMap.png +0 -0
  187. package/media/lib/three-icosa/brushes/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f-v10.0-MainTex.png +0 -0
  188. package/media/lib/three-icosa/brushes/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f-v10.0-fragment.glsl +378 -0
  189. package/media/lib/three-icosa/brushes/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f/ThickPaint-75b32cf0-fdd6-4d89-a64b-e2a00b247b0f-v10.0-vertex.glsl +60 -0
  190. package/media/lib/three-icosa/brushes/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f-v10.0-BumpMap.png +0 -0
  191. package/media/lib/three-icosa/brushes/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f-v10.0-MainTex.png +0 -0
  192. package/media/lib/three-icosa/brushes/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f-v10.0-fragment.glsl +380 -0
  193. package/media/lib/three-icosa/brushes/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f/ThickPaint-fdf0326a-c0d1-4fed-b101-9db0ff6d071f-v10.0-vertex.glsl +58 -0
  194. package/media/lib/three-icosa/brushes/Toon-4391385a-df73-4396-9e33-31e4e4930b27/Toon-4391385a-df73-4396-9e33-31e4e4930b27-v10.0-fragment.glsl +85 -0
  195. package/media/lib/three-icosa/brushes/Toon-4391385a-df73-4396-9e33-31e4e4930b27/Toon-4391385a-df73-4396-9e33-31e4e4930b27-v10.0-vertex.glsl +60 -0
  196. package/media/lib/three-icosa/brushes/UnlitHull-a8fea537-da7c-4d4b-817f-24f074725d6d/UnlitHull-a8fea537-da7c-4d4b-817f-24f074725d6d-v10.0-fragment.glsl +81 -0
  197. package/media/lib/three-icosa/brushes/UnlitHull-a8fea537-da7c-4d4b-817f-24f074725d6d/UnlitHull-a8fea537-da7c-4d4b-817f-24f074725d6d-v10.0-vertex.glsl +60 -0
  198. package/media/lib/three-icosa/brushes/VelvetInk-d229d335-c334-495a-a801-660ac8a87360/VelvetInk-d229d335-c334-495a-a801-660ac8a87360-v10.0-MainTex.png +0 -0
  199. package/media/lib/three-icosa/brushes/VelvetInk-d229d335-c334-495a-a801-660ac8a87360/VelvetInk-d229d335-c334-495a-a801-660ac8a87360-v10.0-fragment.glsl +80 -0
  200. package/media/lib/three-icosa/brushes/VelvetInk-d229d335-c334-495a-a801-660ac8a87360/VelvetInk-d229d335-c334-495a-a801-660ac8a87360-v10.0-vertex.glsl +60 -0
  201. package/media/lib/three-icosa/brushes/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab-v10.0-MainTex.png +0 -0
  202. package/media/lib/three-icosa/brushes/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab-v10.0-fragment.glsl +82 -0
  203. package/media/lib/three-icosa/brushes/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab/Waveform-10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab-v10.0-vertex.glsl +55 -0
  204. package/media/lib/three-icosa/brushes/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3-v10.0-BumpMap.png +0 -0
  205. package/media/lib/three-icosa/brushes/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3-v10.0-MainTex.png +0 -0
  206. package/media/lib/three-icosa/brushes/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3-v10.0-fragment.glsl +376 -0
  207. package/media/lib/three-icosa/brushes/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3/WetPaint-b67c0e81-ce6d-40a8-aeb0-ef036b081aa3-v10.0-vertex.glsl +60 -0
  208. package/media/lib/three-icosa/brushes/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5-v10.0-BumpMap.png +0 -0
  209. package/media/lib/three-icosa/brushes/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5-v10.0-MainTex.png +0 -0
  210. package/media/lib/three-icosa/brushes/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5-v10.0-fragment.glsl +313 -0
  211. package/media/lib/three-icosa/brushes/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5/WetPaint-dea67637-cd1a-27e4-c9b1-52f4bbcb84e5-v10.0-vertex.glsl +58 -0
  212. package/media/lib/three-icosa/brushes/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763-v10.0-MainTex.png +0 -0
  213. package/media/lib/three-icosa/brushes/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763-v10.0-fragment.glsl +377 -0
  214. package/media/lib/three-icosa/brushes/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763/WigglyGraphite-5347acf0-a8e2-47b6-8346-30c70719d763-v10.0-vertex.glsl +60 -0
  215. package/media/lib/three-icosa/brushes/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2-v10.0-MainTex.png +0 -0
  216. package/media/lib/three-icosa/brushes/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2-v10.0-fragment.glsl +107 -0
  217. package/media/lib/three-icosa/brushes/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2/WigglyGraphite-e814fef1-97fd-7194-4a2f-50c2bb918be2-v10.0-vertex.glsl +58 -0
  218. package/media/lib/three-icosa/brushes/Wire-4391385a-cf83-4396-9e33-31e4e4930b27/Wire-4391385a-cf83-4396-9e33-31e4e4930b27-v10.0-fragment.glsl +75 -0
  219. package/media/lib/three-icosa/brushes/Wire-4391385a-cf83-4396-9e33-31e4e4930b27/Wire-4391385a-cf83-4396-9e33-31e4e4930b27-v10.0-vertex.glsl +60 -0
  220. package/media/manifest.json +1 -1
  221. package/package.json +1 -1
  222. package/scripts/client.js +19 -2
  223. package/scripts/elements/outliner.js +176 -0
  224. package/scripts/external/JanusFireboxParser.js +1 -1
  225. package/scripts/janusbase.js +3 -2
  226. package/scripts/janusghost.js +9 -0
  227. package/scripts/janusparticle.js +5 -2
  228. package/scripts/janusplayer.js +117 -80
  229. package/scripts/janusweb.js +8 -4
  230. package/scripts/janusxrplayer.js +49 -7
  231. package/scripts/multiplayermanager.js +4 -0
  232. package/scripts/object.js +21 -9
  233. package/scripts/room.js +23 -10
  234. package/scripts/sound.js +8 -3
  235. package/scripts/text.js +2 -0
  236. package/scripts/tracking.js +1 -1
  237. package/scripts/ui/main.js +6 -2
@@ -243,46 +243,6 @@ elation.elements.define('janus-button-audio', class extends elation.elements.ui.
243
243
  this.muted = muted;
244
244
  }
245
245
  });
246
- elation.elements.define('janus-button-voip', class extends elation.elements.ui.popupbutton {
247
- init() {
248
- super.init();
249
- this.defineAttribute('active', { type: 'boolean' });
250
- this.defineAttribute('muted', { type: 'boolean' });
251
- }
252
- create() {
253
- this.popupcontent = `<janus-voip-picker name="voipsettings"></janus-voip-picker>`;
254
- super.create();
255
- this.createPopup();
256
- this.hidePopup();
257
- elation.events.add(this.popup.content.elements['picker'], 'voip-picker-select', (ev) => this.hidePopup());
258
- this.updateMuteState();
259
- //setInterval(() => this.updateMuteState(), 1000);
260
- }
261
- updateMuteState() {
262
- //let muted = !(soundsystem.canPlaySound && soundsystem.enabled);
263
- let voipclient = this.voipclient;
264
- if (!this.voipclient) {
265
- voipclient = document.querySelector('janus-voip-client');
266
- this.voipclient = voipclient;
267
- if (this.voipclient) {
268
- elation.events.add(this.voipclient, 'init', ev => this.updateMuteState());
269
- }
270
- }
271
- let muted = true;
272
- if (voipclient) {
273
- if (voipclient.localuser && !this.registeredEvents) {
274
- elation.events.add(voipclient.localuser, 'mute', () => this.updateMuteState());
275
- elation.events.add(voipclient.localuser, 'unmute', () => this.updateMuteState());
276
- elation.events.add(voipclient.localuser, 'update', ev => this.updateMuteState());
277
- this.registeredEvents = true;
278
- }
279
- if (voipclient.localuser && voipclient.localuser.stream && !voipclient.localuser.muted) {
280
- muted = false;
281
- }
282
- }
283
- if (this.muted != muted) this.muted = muted;
284
- }
285
- });
286
246
  elation.elements.define('janus-button-share', class extends elation.elements.ui.button {
287
247
  init() {
288
248
  super.init();
@@ -1,5 +1,6 @@
1
1
  <details name="toggle" open aria-live="polite" role="log">
2
2
  <summary>Text Chat <ui-notificationbutton name="unread" count="0"></ui-notificationbutton></summary>
3
+ <janus-voip-client-callbutton></janus-voip-client-callbutton>
3
4
  <collection-indexed id="chatmessages" index="timestamp"></collection-indexed>
4
5
  <ui-list name="chatlist" collection="chatmessages" itemtemplate="janus.comms.chat_message" scrollable="1"></ui-list>
5
6
  <ui-input name="chatinput" placeholder="Press T for text chat"></ui-input>
@@ -1 +1 @@
1
- <span class="message {type}"><span class="userid">{userId}</span> {message}</span>
1
+ <span class="message {type}"><span class="userid">{userId}</span> {?raw}{message|s}{:else}{message}{/raw}</span>
@@ -222,6 +222,7 @@ if (!this.elements.chatmessages) return;
222
222
  type: 'join',
223
223
  userId: data.id,
224
224
  message: 'has joined ' + (data.room.title || data.room.url),
225
+ raw: false,
225
226
  });
226
227
  this.scrollToBottom();
227
228
  }
@@ -232,7 +233,8 @@ if (!this.elements.chatmessages) return;
232
233
  timestamp: new Date().getTime(),
233
234
  type: 'part',
234
235
  userId: data.id,
235
- message: 'has left the room'
236
+ message: 'has left the room',
237
+ raw: false,
236
238
  });
237
239
  this.scrollToBottom();
238
240
  }
@@ -243,7 +245,8 @@ if (!this.elements.chatmessages) return;
243
245
  timestamp: new Date().getTime(),
244
246
  type: 'disconnect',
245
247
  userId: data.id,
246
- message: 'has disconnected'
248
+ message: 'has disconnected',
249
+ raw: false,
247
250
  });
248
251
  this.scrollToBottom();
249
252
  }
@@ -254,8 +257,10 @@ if (!this.elements.chatmessages) return;
254
257
  timestamp: new Date().getTime(),
255
258
  type: 'chat',
256
259
  userId: data.userId,
257
- message: data.message.data || data.message.message
260
+ message: data.message.data || data.message.message,
261
+ raw: false,
258
262
  });
263
+
259
264
  this.scrollToBottom();
260
265
  this.updateUnread(1);
261
266
  }
@@ -263,11 +268,12 @@ if (!this.elements.chatmessages) return;
263
268
  if (msg && msg.length > 0) {
264
269
  janus.network.send({'method': 'chat', data: msg});
265
270
  if (!this.elements.chatmessages) return;
266
- this.elements.chatmessages.add({
271
+ let newmsg = this.elements.chatmessages.add({
267
272
  timestamp: new Date().getTime(),
268
273
  type: 'selfchat',
269
274
  userId: player.userid,
270
- message: msg
275
+ message: msg,
276
+ raw: false,
271
277
  });
272
278
  this.elements.chatinput.value = '';
273
279
  this.scrollToBottom();
@@ -279,7 +285,8 @@ if (!this.elements.chatmessages) return;
279
285
  timestamp: new Date().getTime(),
280
286
  type: 'print',
281
287
  userId: 'room',
282
- message: msg[0]
288
+ message: msg[0],
289
+ raw: false,
283
290
  });
284
291
  this.scrollToBottom();
285
292
  }
@@ -150,7 +150,7 @@ console.log('occupants received', Object.keys(occupantList), Object.keys(this.co
150
150
  'credential': 'turn',
151
151
  'realm': 'turn',
152
152
  'urls': [
153
- 'turns:voip.janusxr.org:3478',
153
+ 'turns:stream.janusxr.org:3478',
154
154
  ]
155
155
  },
156
156
  ]
@@ -171,3 +171,23 @@ janus-voip-picker .micselect {
171
171
  janus-voip-picker-mictest {
172
172
  margin-left: 5px;
173
173
  }
174
+ janus-voip-client-incomingcall ui-flexpanel {
175
+ height: auto;
176
+ }
177
+ janus-voip-client-incomingcall janus-button-voip[action="accept"] {
178
+ background: #0a0;
179
+ border: 1px solid black;
180
+ }
181
+ janus-voip-client-incomingcall janus-button-voip[action="accept"]:hover {
182
+ background: #0d0;
183
+ }
184
+ janus-voip-client-incomingcall janus-button-voip[action="accept"][disabled] {
185
+ opacity: .3;
186
+ }
187
+ janus-voip-client-incomingcall ui-button[action="reject"] {
188
+ background: #800;
189
+ border: 1px solid black;
190
+ }
191
+ janus-voip-client-incomingcall ui-button[action="reject"]:hover {
192
+ background: #a00;
193
+ }
@@ -38,6 +38,7 @@ elation.elements.define('janus-voip-client', class extends elation.elements.base
38
38
  this.inputstream = localStream;
39
39
  });
40
40
 
41
+ elation.events.add(janus.network, 'janusweb_user_chat', (ev) => this.handleUserChat(ev));
41
42
  }
42
43
  setRoom(newroom) {
43
44
  let roomid = newroom.voipid || newroom.id;
@@ -76,6 +77,28 @@ elation.elements.define('janus-voip-client', class extends elation.elements.base
76
77
  }
77
78
  this.currentroom = this.rooms[roomid];
78
79
  }
80
+ disconnect() {
81
+ if (this.currentroom) {
82
+ this.currentroom.disconnect();
83
+ this.currentroom = null;
84
+ }
85
+ this.localuser.setData(null);
86
+ }
87
+ handleUserChat(ev) {
88
+ console.log('got a chat', ev.data);
89
+ let msg = ev.data.message;
90
+ let m = msg.data.match(/📞 (.*$)/);
91
+ if (m) {
92
+ let chatmessages = document.querySelector('janus-comms-chat').elements.chatmessages,
93
+ chatlist = document.querySelector('janus-comms-chat').elements.chatlist;
94
+ if (chatmessages) {
95
+ let item = chatmessages.items[chatmessages.items.length - 1];
96
+ item.raw = true;
97
+ item.message = '<janus-voip-client-incomingcall>' + msg.data + '</janus-voip-client-incomingcall>';
98
+ chatlist.refresh();
99
+ }
100
+ }
101
+ }
79
102
  });
80
103
  elation.elements.define('janus-voip-client-janus', class extends elation.elements.base {
81
104
  create() {
@@ -125,6 +148,9 @@ elation.elements.define('janus-voip-client-janus', class extends elation.element
125
148
  sfu.adapter.setLocalMediaStream(localStream);
126
149
  sfu.dispatchEvent(new CustomEvent('voip-media-change', {detail: { stream: localStream }}));
127
150
  });
151
+ if (this.inputstream) {
152
+ sfu.adapter.setLocalMediaStream(this.inputstream);
153
+ }
128
154
  /*
129
155
  elation.events.add(janus._target, 'room_change', (ev) => {
130
156
  if (!sfu || !sfu.adapter) return;
@@ -192,7 +218,12 @@ console.log('leave room and remove all occupants', this.room);
192
218
  this.sfu.setClientId(ev.data);
193
219
  }
194
220
  setInputStream(stream) {
195
- this.sfu.adapter.setLocalMediaStream(stream);
221
+ if (this.sfu) {
222
+ this.inputstream = stream;
223
+ this.sfu.adapter.setLocalMediaStream(stream);
224
+ } else {
225
+ this.connect();
226
+ }
196
227
  }
197
228
  });
198
229
  elation.elements.define('janus-voip-client-hifi', class extends elation.elements.base {
@@ -390,6 +421,10 @@ elation.elements.define('janus-voip-localuser', class extends elation.elements.b
390
421
  if (!data) {
391
422
  this.stream = false;
392
423
  elation.events.fire({type: 'update', element: this});
424
+ if (this.updateVolumeInterval) {
425
+ clearInterval(this.updateVolumeInterval);
426
+ this.updateVolumeInterval = false;
427
+ }
393
428
  return;
394
429
  }
395
430
 
@@ -410,7 +445,7 @@ elation.elements.define('janus-voip-localuser', class extends elation.elements.b
410
445
  video.srcObject = data;
411
446
  this.appendChild(video);
412
447
  video.muted = true;
413
- video.play().then(() => console.log('playing', video));
448
+ video.play().then(() => console.log('playing', video)).catch(e => console.log('Failed to start video', e, video));
414
449
  this.video = video;
415
450
  }
416
451
 
@@ -883,6 +918,10 @@ elation.elements.define('janus-voip-picker-audio', class extends elation.element
883
918
 
884
919
  this.webcamDisabledElement = elation.elements.create('option', {innerHTML: 'Disabled', value: 'none', append: cameras.select});
885
920
  }
921
+ let vidtrack = false;
922
+ if (this.stream) {
923
+ vidtrack = this.stream.getVideoTracks()[0]
924
+ }
886
925
  devices.forEach(d => {
887
926
  if (d.kind == 'audioinput') {
888
927
  elation.elements.create('option', {innerHTML: d.label, value: d.deviceId, append: inputs.select});
@@ -890,7 +929,11 @@ elation.elements.define('janus-voip-picker-audio', class extends elation.element
890
929
  if (d.deviceId == '') {
891
930
  hasWebcamPermission = false;
892
931
  } else {
893
- elation.elements.create('option', {innerHTML: d.label, value: d.deviceId, append: cameras.select});
932
+ let option = elation.elements.create('option', {innerHTML: d.label, value: d.deviceId, append: cameras.select});
933
+ if (vidtrack && d.label == vidtrack.label) {
934
+ option.selected = true;
935
+ cameras.select.value = option.value;
936
+ }
894
937
  }
895
938
  } else if (outputs && d.kind == 'audiooutput') {
896
939
  elation.elements.create('option', {innerHTML: d.label, value: d.deviceId, append: outputs.select});
@@ -900,9 +943,6 @@ elation.elements.define('janus-voip-picker-audio', class extends elation.element
900
943
  if (hasWebcamPermission && this.elements.videoDevice.hidden ) {
901
944
  this.elements.webcamEnabled.hide();
902
945
  this.elements.videoDevice.show();
903
- let option = this.elements.videoDevice.select.childNodes[0];
904
- option.selected = true;
905
- this.elements.videoDevice.select.value = option.value;
906
946
  } else {
907
947
  console.log('NO WEBCAM PERMISSION');
908
948
  this.elements.webcamEnabled.show();
@@ -1121,6 +1161,7 @@ elation.elements.define('janus-voip-picker-mictest', class extends elation.eleme
1121
1161
  bufferLength = dataArray.length,
1122
1162
  analyser = this.analyser;;
1123
1163
 
1164
+ if (!this.offsetParent) return;
1124
1165
  analyser.getByteFrequencyData(this.dataArray);
1125
1166
 
1126
1167
  ctx.fillStyle = "#000";
@@ -1175,3 +1216,131 @@ elation.elements.define('janus-voip-picker-videotest', class extends elation.ele
1175
1216
  }
1176
1217
  }
1177
1218
  });
1219
+ elation.elements.define('janus-button-voip', class extends elation.elements.ui.popupbutton {
1220
+ init() {
1221
+ super.init();
1222
+ this.defineAttribute('active', { type: 'boolean' });
1223
+ this.defineAttribute('muted', { type: 'boolean' });
1224
+ }
1225
+ create() {
1226
+ this.popupcontent = `<janus-voip-picker name="voipsettings"></janus-voip-picker>`;
1227
+ super.create();
1228
+ //this.createPopup();
1229
+ this.hidePopup();
1230
+ this.updateMuteState();
1231
+ //setInterval(() => this.updateMuteState(), 1000);
1232
+ }
1233
+ updateMuteState() {
1234
+ //let muted = !(soundsystem.canPlaySound && soundsystem.enabled);
1235
+ let voipclient = this.voipclient;
1236
+ if (!this.voipclient) {
1237
+ voipclient = document.querySelector('janus-voip-client');
1238
+ this.voipclient = voipclient;
1239
+ if (this.voipclient) {
1240
+ elation.events.add(this.voipclient, 'init', ev => this.updateMuteState());
1241
+ }
1242
+ }
1243
+ let muted = true;
1244
+ if (voipclient) {
1245
+ if (voipclient.localuser && !this.registeredEvents) {
1246
+ elation.events.add(voipclient.localuser, 'mute', () => this.updateMuteState());
1247
+ elation.events.add(voipclient.localuser, 'unmute', () => this.updateMuteState());
1248
+ elation.events.add(voipclient.localuser, 'update', ev => this.updateMuteState());
1249
+ this.registeredEvents = true;
1250
+ }
1251
+ if (voipclient.localuser && voipclient.localuser.stream && !voipclient.localuser.muted) {
1252
+ muted = false;
1253
+ }
1254
+ }
1255
+ if (this.muted != muted) this.muted = muted;
1256
+ }
1257
+ createPopup() {
1258
+ super.createPopup();
1259
+ setTimeout(() => {
1260
+ //elation.events.add(this.popup.content.querySelector('janus-voip-picker'), 'voip-picker-select', (ev) => this.hidePopup());
1261
+ document.addEventListener('voip-picker-select', (ev) => { this.hidePopup(); });
1262
+ }, 100);
1263
+ }
1264
+ });
1265
+ elation.elements.define('janus-voip-client-callbutton', class extends elation.elements.janus.button.voip {
1266
+ create() {
1267
+ this.detached = true;
1268
+ this.button = elation.elements.create('ui-button', {
1269
+ append: this,
1270
+ label: '📞',
1271
+ });
1272
+ this.button.addEventListener('click', ev => this.handleClick(ev));
1273
+ super.create();
1274
+ }
1275
+ isVoipActive(client) {
1276
+ if (!client) client = document.querySelector('janus-voip-client');
1277
+ return (client && client.localuser && client.localuser.stream);
1278
+ }
1279
+ handleClick(ev) {
1280
+ if (!this.isVoipActive()) {
1281
+ this.showPopup();
1282
+ } else {
1283
+ /*
1284
+ if (this.popup.parentNode === this) {
1285
+ if (!elation.utils.isin(this.popup, ev.target)) {
1286
+ this.hidePopup();
1287
+ }
1288
+ } else {
1289
+ this.showPopup();
1290
+ }
1291
+ */
1292
+ }
1293
+ let chat = document.querySelector('janus-comms-chat');
1294
+ chat.sendMessage('📞 ring ring');
1295
+ if (!this.isVoipActive()) {
1296
+ }
1297
+ }
1298
+ });
1299
+ elation.elements.define('janus-voip-client-incomingcall', class extends elation.elements.base {
1300
+ create() {
1301
+ this.actions = elation.elements.create('ui-flexpanel', { append: this });
1302
+ let active = this.isVoipActive();
1303
+ this.acceptbutton = elation.elements.create('janus-button-voip', {
1304
+ label: (active ? 'Call in Progress' : 'Accept'),
1305
+ action: 'accept',
1306
+ detached: true,
1307
+ disabled: active,
1308
+ append: this.actions
1309
+ });
1310
+ this.rejectbutton = elation.elements.create('ui-button', {
1311
+ label: (active ? 'Hang Up' : 'Decline'),
1312
+ action: 'reject',
1313
+ append: this.actions
1314
+ });
1315
+
1316
+ this.acceptbutton.addEventListener('click', ev => this.handleAccept(ev));
1317
+ this.rejectbutton.addEventListener('click', ev => this.handleReject(ev));
1318
+ }
1319
+ isVoipActive(client) {
1320
+ if (!client) client = document.querySelector('janus-voip-client');
1321
+ return (client && client.localuser && client.localuser.stream);
1322
+ }
1323
+ handleAccept(ev) {
1324
+ this.acceptbutton.disabled = true;
1325
+ this.acceptbutton.label = 'Call in Progress';
1326
+ this.rejectbutton.disabled = false;
1327
+ this.rejectbutton.label = 'Hang Up';
1328
+ }
1329
+ handleReject(ev) {
1330
+ let chat = document.querySelector('janus-comms-chat');
1331
+ this.removeChild(this.actions);
1332
+ //this.removeChild(this.rejectbutton);
1333
+
1334
+ let client = document.querySelector('janus-voip-client');
1335
+ if (this.isVoipActive(client)) {
1336
+ chat.sendMessage('👋 hanging up');
1337
+ client.disconnect();
1338
+ this.acceptbutton.disabled = false;
1339
+ this.acceptbutton.label = 'Reconnect';
1340
+ this.rejectbutton.label = 'Decline';
1341
+ this.rejectbutton.disabled = true;
1342
+ } else {
1343
+ chat.sendMessage('❌ request declined');
1344
+ }
1345
+ }
1346
+ });
@@ -115,7 +115,8 @@ elation.elements.define('janus.ui.editor.panel', class extends elation.elements.
115
115
  'manipulate_out': [ 'keyboard_e', (ev) => this.editObjectManipulateOut(ev) ],
116
116
  });
117
117
  janus.engine.systems.controls.addContext('roomedit_paste', {
118
- 'paste': [ 'keyboard_ctrl_v', (ev) => { if (ev.value == 1) this.editObjectPaste(ev); } ],
118
+ 'add': [ 'keyboard_ctrl_a', (ev) => { if (ev.value == 1) this.showCreateDialog(ev); } ],
119
+ 'paste': [ 'keyboard_ctrl_v', (ev) => { if (ev.value == 1) this.editObjectPaste(ev);} ],
119
120
  });
120
121
  janus.engine.systems.controls.activateContext('roomedit_paste');
121
122
 
@@ -134,6 +135,7 @@ elation.elements.define('janus.ui.editor.panel', class extends elation.elements.
134
135
  room.addEventListener('wheel', (ev) => this.editObjectMousewheel(ev));
135
136
  window.addEventListener('keydown', (ev) => this.editObjectKeydown(ev));
136
137
  window.addEventListener('keyup', (ev) => this.editObjectKeyup(ev));
138
+
137
139
  }
138
140
  initRoomEvents(room) {
139
141
  if (!this.initialized.has(room)) {
@@ -149,6 +151,33 @@ elation.elements.define('janus.ui.editor.panel', class extends elation.elements.
149
151
  room.addEventListener('thing_remove', (ev) => this.handleThingRemove(ev));
150
152
  this.initialized.add(room);
151
153
  }
154
+
155
+ if (!this.outliner_selected) {
156
+ this.outliner_selected = room.createObject('outliner', {
157
+ col: 'lime',
158
+ opacity: .4,
159
+ outline: 3,
160
+ });
161
+ this.outliner_hover = room.createObject('outliner', {
162
+ col: 'gray',
163
+ opacity: .4,
164
+ outline: 1,
165
+ });
166
+ setTimeout(() => {
167
+ this.outliner_selected.col = 'lime';
168
+ this.outliner_hover.col = 'gray';
169
+ }, 0);
170
+ this.outliner_hover.update = function() {
171
+ let rc = player.raycast();
172
+ if (rc.length > 0 && rc[0].object !== room) {
173
+ this.select(rc[0].object);
174
+ } else {
175
+ this.deselect();
176
+ }
177
+ }
178
+ } else if (this.outliner_selected.room !== room) {
179
+ room.appendChild(this.outliner_selected);
180
+ }
152
181
  }
153
182
 
154
183
  getManipulator() {
@@ -329,6 +358,7 @@ console.log('set translation snap', ev.data, ev);
329
358
  return locked;
330
359
  }
331
360
  editObject(object, isnew) {
361
+ if (this.roomedit.object) this.editObjectStop()
332
362
  this.roomedit.object = object;
333
363
  this.roomedit.parentObject = null;
334
364
  this.roomedit.objectBoundingBox = false;
@@ -346,11 +376,13 @@ console.log('set translation snap', ev.data, ev);
346
376
  object.addEventListener('load', (ev) => {
347
377
  this.roomedit.objectBoundingBox = object.getBoundingBox(true);
348
378
  this.editObjectUpdate();
349
- this.editObjectShowWireframe();
379
+ //this.editObjectShowWireframe();
380
+ this.editObjectShowOutline();
350
381
  console.log('update bbox', this.roomedit.objectBoundingBox);
351
382
  });
352
383
 
353
- object.pickable = false;
384
+ //object.pickable = false;
385
+ //console.log('set object unpickable', object);
354
386
 
355
387
  room.addEventListener('mousemove', (ev) => this.editObjectMousemove(ev));
356
388
  elation.events.add(this, 'mousedown', this.editObjectClick);
@@ -374,7 +406,8 @@ console.log('set translation snap', ev.data, ev);
374
406
  // activate context
375
407
  janus.engine.systems.controls.activateContext('roomedit', this);
376
408
 
377
- this.editObjectShowWireframe();
409
+ //this.editObjectShowWireframe();
410
+ this.editObjectShowOutline();
378
411
  this.editObjectShowInfo(object);
379
412
  let manipulator = this.getManipulator();
380
413
  manipulator.attach(object.objects['3d']);
@@ -393,6 +426,18 @@ console.log('set translation snap', ev.data, ev);
393
426
  inventorypanel.refresh();
394
427
  }
395
428
 
429
+ editObjectShowOutline() {
430
+ if (this.roomedit.object === room) {
431
+ this.outliner_selected.deselect();
432
+ } else {
433
+ this.outliner_selected.select(this.roomedit.object);
434
+ }
435
+ }
436
+ editObjectRemoveOutline() {
437
+ if (this.outliner_selected) {
438
+ this.outliner_selected.deselect();
439
+ }
440
+ }
396
441
  editObjectShowWireframe() {
397
442
  if (this.roomedit.wireframe) {
398
443
  this.editObjectRemoveWireframe();
@@ -518,7 +563,7 @@ console.log('set translation snap', ev.data, ev);
518
563
  // restore collider
519
564
  this.roomedit.object.collision_id = this.roomedit.collision_id;
520
565
  this.roomedit.collision_id = false;
521
- } else {
566
+ } else if (false) {
522
567
  this.roomedit.object.collision_id = 'cube';
523
568
  this.roomedit.object.collision_trigger = true;
524
569
  this.roomedit.object.collision_scale = this.roomedit.objectBoundingBox.max.clone().sub(this.roomedit.objectBoundingBox.min);
@@ -534,11 +579,13 @@ console.log('set translation snap', ev.data, ev);
534
579
  this.roomedit.object.dispatchEvent({type: 'edit', bubbles: true});
535
580
  }
536
581
  }
537
- this.roomedit.object.pickable = true;
582
+ //this.roomedit.object.pickable = true;
583
+ this.roomedit.object.sync = true;
538
584
  this.roomedit.object = false;
539
585
  this.roomedit.raycast = false;
540
586
  this.roomedit.parentObject = null;
541
- this.editObjectRemoveWireframe();
587
+ //this.editObjectRemoveWireframe();
588
+ this.editObjectRemoveOutline();
542
589
  this.editObjectRemoveParentWireframe();
543
590
  let manipulator = this.getManipulator();
544
591
  manipulator.detach();
@@ -573,7 +620,22 @@ console.log('set translation snap', ev.data, ev);
573
620
  if (this.roomedit.object) {
574
621
  var obj = this.roomedit.object;
575
622
  if (this.roomedit.moving && this.roomedit.raycast && ev.element.getProxyObject() !== obj) {
576
- this.roomedit.objectPosition = ev.data.point;
623
+ let raycast = player.raycast(V(0, 0, -1));
624
+ if (raycast) {
625
+ let hit;
626
+ for (let i = 0; i < raycast.length; i++) {
627
+ if (raycast[i].object !== obj) {
628
+ hit = raycast[i];
629
+ break;
630
+ }
631
+ }
632
+
633
+ if (hit) {
634
+ this.roomedit.objectPosition = hit.point;
635
+ }
636
+ } else {
637
+ this.roomedit.objectPosition = ev.data.point;
638
+ }
577
639
  let manipulator = this.getManipulator();
578
640
  manipulator.enabled = false;
579
641
  this.editObjectUpdate();
@@ -1042,6 +1104,7 @@ console.log('change color', obj.col, vec);
1042
1104
  if (obj) {
1043
1105
  this.roomedit.pastebuffer = obj;
1044
1106
 
1107
+ /*
1045
1108
  let data = new DataTransfer();
1046
1109
  data.items.add('text/plain', 'blublub');
1047
1110
  //data.items.add('x-janus/x-' + obj.tag, 'cool huh');
@@ -1050,6 +1113,7 @@ console.log('change color', obj.col, vec);
1050
1113
  }, (e) => {
1051
1114
  console.log('FAILED!', e);
1052
1115
  });
1116
+ */
1053
1117
  }
1054
1118
  }
1055
1119
  editObjectCut(ev) {
@@ -1159,6 +1223,9 @@ console.log('[editor] scene added a thing', ev);
1159
1223
  let parts = newobjargs[j].split('=');
1160
1224
  objargs[parts[0]] = decodeURIComponent(parts[1]);
1161
1225
  }
1226
+ if (objargs.id) {
1227
+ objargs.collision_id = objargs.id;
1228
+ }
1162
1229
  newobject = room.createObject(objtype, objargs);
1163
1230
  objects.push(newobject);
1164
1231
  if (objects[0]) {
@@ -1361,6 +1428,9 @@ console.log('pastey!', ev.clipboardData.items[0], ev);
1361
1428
  this.loadObjectFromURIList(url);
1362
1429
  ev.preventDefault();
1363
1430
  }
1431
+ showCreateDialog(ev) {
1432
+ console.log('create thing?');
1433
+ }
1364
1434
  });
1365
1435
 
1366
1436
  elation.elements.define('janus.ui.editor.objectinfo', class extends elation.elements.base {
@@ -54,8 +54,9 @@ ui-grid.models>* a {
54
54
  display: flex;
55
55
  align-items: center;
56
56
  justify-content: center;
57
- text-align: Center;
57
+ text-align: center;
58
58
  text-decoration: none;
59
+ color: white;
59
60
  }
60
61
  ui-grid.models>* p {
61
62
  display: none;
@@ -113,11 +113,18 @@ janus.registerElement('locomotion_teleporter', {
113
113
  onchange: ev => this.handleTeleportChange(ev),
114
114
  onactivate: ev => this.handleTeleportTurn(ev),
115
115
  },
116
- 'teleport_y': {
116
+ 'teleport_y_right': {
117
117
  defaultbindings: 'gamepad_any_axis_1,gamepad_any_axis_3',
118
- onchange: ev => this.handleTeleportChange(ev),
119
- onactivate: ev => this.handleTeleportStart(ev),
118
+ onchange: ev => this.handleTeleportChange(ev, 'right'),
119
+ onactivate: ev => this.handleTeleportStart(ev, 'right'),
120
+ },
121
+ /*
122
+ 'teleport_y_left': {
123
+ defaultbindings: 'gamepad_6_axis_1,gamepad_6_axis_3',
124
+ onchange: ev => this.handleTeleportChange(ev, 'left'),
125
+ onactivate: ev => this.handleTeleportStart(ev, 'left'),
120
126
  },
127
+ */
121
128
  'teleport_trigger': {
122
129
  defaultbindings: 'gamepad_any_button_0',
123
130
  onactivate: ev => this.handleTeleportTrigger(ev),
@@ -147,6 +154,7 @@ janus.registerElement('locomotion_teleporter', {
147
154
  } else {
148
155
  startpoint = player.head.localToWorld(V(0,0,0));
149
156
  v0 = player.head.localToWorld(V(0,0,-speed)).sub(startpoint);
157
+ return; // Head-locked teleporter is awkward, do we really still support this?
150
158
  }
151
159
  let i = 0,
152
160
  p0 = startpoint.clone(),
@@ -210,7 +218,7 @@ janus.registerElement('locomotion_teleporter', {
210
218
  //if (!room.teleport) return;
211
219
  if (this.teleportactive) {
212
220
  let controls = this.activecontrols;
213
- let xy = new THREE.Vector2(controls.teleport_x, controls.teleport_y),
221
+ let xy = new THREE.Vector2(controls.teleport_x, controls['teleport_y_' + this.teleporthand]),
214
222
  len = xy.length();
215
223
 
216
224
  if (len > .8) {
@@ -228,7 +236,7 @@ janus.registerElement('locomotion_teleporter', {
228
236
  if (!room.teleport) return;
229
237
  if (!this.teleportactive && Math.abs(ev.value) > .8) {
230
238
  this.teleportactive = true;
231
- this.teleporthand = 'right';
239
+ this.teleporthand = hand || 'right';
232
240
  this.enableCursor();
233
241
  this.updateTeleportAngle();
234
242
  }
@@ -260,15 +268,17 @@ janus.registerElement('locomotion_teleporter', {
260
268
  },
261
269
  updateTeleportAngle() {
262
270
  let controls = this.activecontrols;
263
- let controllerangle = Math.atan2(controls.teleport_x, controls.teleport_y);
271
+ let controllerangle = Math.atan2(controls.teleport_x, controls['teleport_y_' + this.teleporthand]);
264
272
  let playerangle = Math.atan2(this.pos.x, this.pos.z);
265
273
  this.teleportangle = (controllerangle + playerangle) + Math.PI;
266
274
  },
267
275
  handleMouseDown(ev) {
268
276
  if (!room.teleport) return;
269
277
  if (ev.button == 0 && (player.enabled || janus.hmd)) {
270
- this.longpresstimer = setTimeout(() => { console.log('timer fired'); this.enableCursor(); }, this.longpresstime);
271
- this.mousediff = [0,0];
278
+ if (!this.longpresstimer) {
279
+ //this.longpresstimer = setTimeout(() => { console.log('timer fired'); this.enableCursor(); }, this.longpresstime);
280
+ this.mousediff = [0,0];
281
+ }
272
282
  //this.active = true;
273
283
  }
274
284
  },