ohzi-core 12.2.0 → 12.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/build/index.mjs +1 -1
  2. package/build/index.mjs.map +1 -1
  3. package/build/index.module.js +2 -0
  4. package/build/index.module.js.map +1 -0
  5. package/package.json +2 -1
  6. package/src/BaseApplication.js +11 -2
  7. package/src/Browser.js +10 -3
  8. package/src/CameraManager.js +5 -0
  9. package/src/Capabilities.js +1 -0
  10. package/src/CustomBezierCurve.js +12 -0
  11. package/src/Debug.js +99 -5
  12. package/src/Graphics.js +86 -6
  13. package/src/Initializer.js +5 -0
  14. package/src/KeyboardInput.js +40 -1
  15. package/src/OS.js +1 -1
  16. package/src/OScreen.js +19 -4
  17. package/src/OrthographicCamera.js +13 -0
  18. package/src/PerspectiveCamera.js +11 -0
  19. package/src/ReflectionPlaneContext.js +5 -1
  20. package/src/RenderLayers.js +1 -1
  21. package/src/RenderLoop.js +9 -0
  22. package/src/RenderOrder.js +1 -1
  23. package/src/ResourceContainer.js +21 -0
  24. package/src/SceneManager.js +14 -4
  25. package/src/Screen.js +71 -0
  26. package/src/Time.js +4 -0
  27. package/src/UI.js +16 -1
  28. package/src/action_sequencer/ActionEvent.js +6 -1
  29. package/src/action_sequencer/ActionInterpolator.js +16 -2
  30. package/src/action_sequencer/ActionSequencer.js +65 -2
  31. package/src/action_sequencer/NumberInterpolator.js +15 -0
  32. package/src/action_sequencer/VectorInterpolator.js +13 -1
  33. package/src/blitter_index.js +1 -0
  34. package/src/canvas_drawer/CanvasDrawer.js +37 -4
  35. package/src/canvas_drawer/MultiLineTextDrawer.js +8 -1
  36. package/src/canvas_drawer/SimpleTextDrawer.js +7 -1
  37. package/src/components/AudioClip.js +11 -1
  38. package/src/components/AxisHelper.js +1 -1
  39. package/src/components/BaseObject.js +8 -5
  40. package/src/components/EdgeMesh.js +30 -2
  41. package/src/components/GeometryEdgeVisualizer.js +10 -1
  42. package/src/components/Grid.js +4 -0
  43. package/src/components/Line.js +31 -7
  44. package/src/components/MultiLinePath.js +9 -5
  45. package/src/components/MultiLineText2D.js +13 -2
  46. package/src/components/ObjectAxis.js +5 -0
  47. package/src/components/ObjectOrientedBoundingBox.js +26 -1
  48. package/src/components/PlaneHelper.js +1 -1
  49. package/src/components/Shape2D.js +11 -3
  50. package/src/components/Shape3D.js +10 -4
  51. package/src/components/Text2D.js +11 -3
  52. package/src/components/UIElement.js +40 -4
  53. package/src/components/UpdatableMaterialMesh.js +11 -3
  54. package/src/components/WorldImage.js +10 -2
  55. package/src/index.js +3 -1
  56. package/src/loaders/AsyncAbstractLoader.js +16 -0
  57. package/src/loaders/AsyncObjectsLoader.js +6 -0
  58. package/src/primitives/Arrow.js +6 -0
  59. package/src/primitives/Cube.js +6 -1
  60. package/src/primitives/HorizontalPlane.js +8 -1
  61. package/src/primitives/Sphere.js +7 -0
  62. package/src/primitives/VerticalPlane.js +8 -1
  63. package/src/ui/ui_element_state/OnIdle.js +5 -0
  64. package/src/ui/ui_element_state/OnMouseEnter.js +11 -0
  65. package/src/ui/ui_element_state/OnMouseExit.js +5 -0
  66. package/src/ui/ui_element_state/OnMouseHover.js +13 -0
  67. package/src/ui/ui_element_state/UIElementState.js +17 -3
  68. package/src/utilities/EasingFunctions.js +5 -0
  69. package/types/BaseApplication.d.ts +18 -11
  70. package/types/Browser.d.ts +20 -19
  71. package/types/CameraManager.d.ts +14 -13
  72. package/types/Capabilities.d.ts +8 -8
  73. package/types/CustomBezierCurve.d.ts +19 -7
  74. package/types/Debug.d.ts +198 -37
  75. package/types/Graphics.d.ts +143 -61
  76. package/types/Initializer.d.ts +10 -6
  77. package/types/KeyboardInput.d.ts +65 -20
  78. package/types/OS.d.ts +20 -20
  79. package/types/OScreen.d.ts +37 -22
  80. package/types/OrthographicCamera.d.ts +20 -6
  81. package/types/PerspectiveCamera.d.ts +18 -6
  82. package/types/ReflectionPlaneContext.d.ts +13 -8
  83. package/types/RenderLayers.d.ts +6 -6
  84. package/types/RenderLoop.d.ts +132 -14
  85. package/types/RenderOrder.d.ts +8 -8
  86. package/types/ResourceContainer.d.ts +29 -10
  87. package/types/SceneManager.d.ts +15 -12
  88. package/types/Screen.d.ts +27 -0
  89. package/types/Time.d.ts +29 -24
  90. package/types/UI.d.ts +92 -18
  91. package/types/action_sequencer/ActionEvent.d.ts +12 -7
  92. package/types/action_sequencer/ActionInterpolator.d.ts +18 -5
  93. package/types/action_sequencer/ActionSequencer.d.ts +104 -36
  94. package/types/action_sequencer/NumberInterpolator.d.ts +18 -9
  95. package/types/action_sequencer/VectorInterpolator.d.ts +13 -7
  96. package/types/blitter_index.d.ts +6 -6
  97. package/types/canvas_drawer/CanvasDrawer.d.ts +51 -13
  98. package/types/canvas_drawer/MultiLineTextDrawer.d.ts +13 -5
  99. package/types/canvas_drawer/SimpleTextDrawer.d.ts +13 -6
  100. package/types/components/AudioClip.d.ts +25 -13
  101. package/types/components/AxisHelper.d.ts +6 -6
  102. package/types/components/BaseObject.d.ts +12 -5
  103. package/types/components/EdgeMesh.d.ts +42 -13
  104. package/types/components/GeometryEdgeVisualizer.d.ts +12 -4
  105. package/types/components/Grid.d.ts +4 -2
  106. package/types/components/Line.d.ts +42 -16
  107. package/types/components/MultiLinePath.d.ts +10 -4
  108. package/types/components/MultiLineText2D.d.ts +22 -10
  109. package/types/components/ObjectAxis.d.ts +8 -3
  110. package/types/components/ObjectOrientedBoundingBox.d.ts +45 -18
  111. package/types/components/PlaneHelper.d.ts +6 -6
  112. package/types/components/Shape2D.d.ts +14 -4
  113. package/types/components/Shape3D.d.ts +10 -3
  114. package/types/components/Text2D.d.ts +21 -13
  115. package/types/components/UIElement.d.ts +87 -52
  116. package/types/components/UpdatableMaterialMesh.d.ts +12 -4
  117. package/types/components/WorldImage.d.ts +23 -13
  118. package/types/components/mouse_interactors/ObjectRotator.d.ts +12 -0
  119. package/types/components/sdf_text/SDFText.d.ts +35 -30
  120. package/types/components/sdf_text/SDFTextBatch.d.ts +12 -12
  121. package/types/components/sdf_text/TextGlyph.d.ts +8 -6
  122. package/types/data_textures/CustomDataTexture.d.ts +11 -11
  123. package/types/data_textures/RGBADataTexture.d.ts +4 -4
  124. package/types/data_textures/RGBAFloatDataTexture.d.ts +4 -4
  125. package/types/data_textures/RGBDataTexture.d.ts +4 -4
  126. package/types/data_textures/RGBFloatDataTexture.d.ts +4 -4
  127. package/types/editor/ManipulatorHandle.d.ts +23 -14
  128. package/types/editor/ObjectEditor.d.ts +18 -16
  129. package/types/editor/ObjectManipulator.d.ts +23 -19
  130. package/types/editor/ObjectPicker.d.ts +19 -16
  131. package/types/gpu_particles/GPUParticleSystem.d.ts +22 -15
  132. package/types/gpu_particles/ParticleAttribute.d.ts +19 -18
  133. package/types/gpu_particles/ParticlePositionAttribute.d.ts +6 -6
  134. package/types/html_utilities/CSSAnimator.d.ts +31 -31
  135. package/types/html_utilities/css_animator_states/Animating.d.ts +8 -8
  136. package/types/html_utilities/css_animator_states/Idle.d.ts +6 -6
  137. package/types/index.d.ts +110 -108
  138. package/types/loaders/AsyncAbstractLoader.d.ts +41 -27
  139. package/types/loaders/AsyncAudiosLoader.d.ts +6 -5
  140. package/types/loaders/AsyncObjectsLoader.d.ts +6 -6
  141. package/types/loaders/AsyncTexturesLoader.d.ts +9 -8
  142. package/types/loaders/assets_loader/AssetLoader.d.ts +4 -0
  143. package/types/loaders/assets_loader/AsyncAssetsLoaderWorker.d.ts +1 -0
  144. package/types/loaders/assets_loader/ResourceBatch.d.ts +14 -0
  145. package/types/loaders/assets_loader/ResourceContainer.d.ts +9 -0
  146. package/types/loaders/assets_loader/ResourceLoaderChecker.d.ts +8 -0
  147. package/types/materials/AddMaterial.d.ts +5 -5
  148. package/types/materials/AlphaFilterMaterial.d.ts +6 -6
  149. package/types/materials/BaseShaderMaterial.d.ts +4 -3
  150. package/types/materials/BlitMaterial.d.ts +4 -3
  151. package/types/materials/BloomComposeMaterial.d.ts +4 -7
  152. package/types/materials/BoxBlurMaterial.d.ts +4 -4
  153. package/types/materials/ClearAlphaMaterial.d.ts +3 -3
  154. package/types/materials/ClearColorMaterial.d.ts +7 -7
  155. package/types/materials/ClearDepthNormalMaterial.d.ts +4 -4
  156. package/types/materials/DeferredRendererComposeMaterial.d.ts +7 -7
  157. package/types/materials/DepthNormalMaterial.d.ts +6 -4
  158. package/types/materials/DisplayNormalTextureMaterial.d.ts +4 -4
  159. package/types/materials/DualFilteringBlurMaterial.d.ts +4 -4
  160. package/types/materials/FXAAMaterial.d.ts +3 -3
  161. package/types/materials/GaussianBlurMaterial.d.ts +6 -6
  162. package/types/materials/LuminosityHighPassMaterial.d.ts +4 -4
  163. package/types/materials/MedianFilterMaterial.d.ts +7 -6
  164. package/types/materials/NormalMaterial.d.ts +4 -2
  165. package/types/materials/SDFScreenTextMaterial.d.ts +9 -11
  166. package/types/materials/SDFTextMaterial.d.ts +10 -12
  167. package/types/materials/SSAOComposeMaterial.d.ts +4 -4
  168. package/types/materials/SSAOMaterial.d.ts +8 -6
  169. package/types/materials/ScreenSpaceTextureMaterial.d.ts +7 -7
  170. package/types/materials/UIElementMaterial.d.ts +4 -7
  171. package/types/materials/UnrealBloomComposeMaterial.d.ts +16 -16
  172. package/types/materials/UnrealBlurMaterial.d.ts +4 -4
  173. package/types/materials/UnrealComposeMaterial.d.ts +4 -4
  174. package/types/materials/ViewPositionMaterial.d.ts +4 -3
  175. package/types/materials/deferred/DeferredPointLightMaterial.d.ts +9 -10
  176. package/types/materials/gpu_particles/AttributeUpdateMaterial.d.ts +7 -0
  177. package/types/materials/gpu_particles/BasicParticleMaterial.d.ts +4 -0
  178. package/types/materials/gpu_particles/ParticleStorageMaterial.d.ts +4 -2
  179. package/types/materials/gpu_particles/PositionStorageMaterial.d.ts +3 -4
  180. package/types/object_pool/Pool.d.ts +10 -10
  181. package/types/primitives/Arrow.d.ts +15 -8
  182. package/types/primitives/Cube.d.ts +10 -3
  183. package/types/primitives/HorizontalPlane.d.ts +11 -3
  184. package/types/primitives/Sphere.d.ts +11 -3
  185. package/types/primitives/VerticalPlane.d.ts +11 -3
  186. package/types/raycast/GroupRaycaster.d.ts +15 -13
  187. package/types/raycast/PlaneDragResolver.d.ts +16 -15
  188. package/types/raycast/PlaneRaycastResolver.d.ts +5 -5
  189. package/types/raycast/PlaneRaycaster.d.ts +9 -7
  190. package/types/raycast/RaycastResolver.d.ts +5 -5
  191. package/types/raycast/SurfaceDragResolver.d.ts +15 -13
  192. package/types/raycast/states/BaseState.d.ts +5 -5
  193. package/types/raycast/states/IdleState.d.ts +3 -5
  194. package/types/raycast/states/OnRaycastEnter.d.ts +3 -5
  195. package/types/raycast/states/OnRaycastExit.d.ts +3 -4
  196. package/types/raycast/states/OnRaycastHover.d.ts +3 -5
  197. package/types/render_mode/BaseRender.d.ts +7 -7
  198. package/types/render_mode/BloomRender.d.ts +12 -10
  199. package/types/render_mode/DebugNormalsRender.d.ts +3 -3
  200. package/types/render_mode/DeferredRender.d.ts +13 -9
  201. package/types/render_mode/NormalAORender.d.ts +18 -17
  202. package/types/render_mode/NormalRender.d.ts +3 -3
  203. package/types/render_mode/OutlineRender.d.ts +25 -20
  204. package/types/render_mode/PlanarReflectionsRender.d.ts +19 -13
  205. package/types/render_mode/UnrealBloomRender.d.ts +21 -20
  206. package/types/render_mode/VRRender.d.ts +4 -4
  207. package/types/render_utilities/Blitter.d.ts +19 -15
  208. package/types/render_utilities/Blurrer.d.ts +9 -8
  209. package/types/render_utilities/DepthAndNormalsRenderer.d.ts +11 -10
  210. package/types/render_utilities/DualFilteringBlurrer.d.ts +18 -17
  211. package/types/render_utilities/GaussianBlurrer.d.ts +27 -26
  212. package/types/render_utilities/MedianFilter.d.ts +11 -9
  213. package/types/render_utilities/ViewPositionRenderer.d.ts +10 -9
  214. package/types/resource_loader/AbstractLoader.d.ts +21 -21
  215. package/types/resource_loader/AsyncTextureLoader.d.ts +11 -11
  216. package/types/resource_loader/AudioLoader.d.ts +9 -9
  217. package/types/resource_loader/BasisLoader.d.ts +6 -6
  218. package/types/resource_loader/CubemapLoader.d.ts +8 -7
  219. package/types/resource_loader/DAELoader.d.ts +7 -6
  220. package/types/resource_loader/DDSLoader.d.ts +7 -6
  221. package/types/resource_loader/FileLoader.d.ts +7 -6
  222. package/types/resource_loader/FontLoader.d.ts +7 -6
  223. package/types/resource_loader/GLTFDRACOLoader.d.ts +7 -6
  224. package/types/resource_loader/GLTFLoader.d.ts +7 -6
  225. package/types/resource_loader/HDRCubeTextureLoader.d.ts +8 -7
  226. package/types/resource_loader/JSONLoader.d.ts +5 -4
  227. package/types/resource_loader/OBJLoader.d.ts +7 -6
  228. package/types/resource_loader/PointArrayLoader.d.ts +9 -7
  229. package/types/resource_loader/RGBETextureLoader.d.ts +7 -6
  230. package/types/resource_loader/ResourceBatch.d.ts +13 -13
  231. package/types/resource_loader/SVGLoader.d.ts +7 -6
  232. package/types/resource_loader/TextLoader.d.ts +7 -6
  233. package/types/resource_loader/TextureLoader.d.ts +4 -4
  234. package/types/resource_loader/VideoLoader.d.ts +4 -4
  235. package/types/scenes/AbstractScene.d.ts +32 -32
  236. package/types/scenes/loading_states/CompilatorManager.d.ts +8 -8
  237. package/types/scenes/loading_states/HighQualityLoadingState.d.ts +3 -3
  238. package/types/scenes/loading_states/LoadingState.d.ts +31 -31
  239. package/types/scenes/loading_states/RegularLoadingState.d.ts +5 -5
  240. package/types/static_batcher/BatchedMesh.d.ts +16 -15
  241. package/types/static_batcher/GeometryBatch.d.ts +41 -37
  242. package/types/static_batcher/GeometryBatcher.d.ts +9 -9
  243. package/types/static_batcher/MeshBatcher.d.ts +5 -5
  244. package/types/ui/ui_element_position/ScreenSpacePosition.d.ts +5 -4
  245. package/types/ui/ui_element_position/WorldSpacePosition.d.ts +7 -5
  246. package/types/ui/ui_element_state/OnIdle.d.ts +9 -3
  247. package/types/ui/ui_element_state/OnMouseEnter.d.ts +3 -3
  248. package/types/ui/ui_element_state/OnMouseExit.d.ts +3 -3
  249. package/types/ui/ui_element_state/OnMouseHover.d.ts +8 -4
  250. package/types/ui/ui_element_state/UIElementState.d.ts +17 -5
  251. package/types/utilities/ArrayUtilities.d.ts +7 -7
  252. package/types/utilities/CameraUtilities.d.ts +40 -36
  253. package/types/utilities/EasingFunctions.d.ts +36 -35
  254. package/types/utilities/FrustumPointFitter.d.ts +14 -14
  255. package/types/utilities/GeometryUtilities.d.ts +5 -4
  256. package/types/utilities/HTMLUtilities.d.ts +6 -6
  257. package/types/utilities/ImageUtilities.d.ts +5 -4
  258. package/types/utilities/MeshSampler.d.ts +20 -20
  259. package/types/utilities/ModelUtilities.d.ts +15 -15
  260. package/types/utilities/OMath.d.ts +21 -21
  261. package/types/utilities/ObjectUtilities.d.ts +7 -7
  262. package/types/utilities/OrthographicFrustumPointFitter.d.ts +8 -7
  263. package/types/utilities/PerspectiveFrustumPointFitter.d.ts +14 -12
  264. package/types/utilities/StringUtilities.d.ts +6 -6
  265. package/types/utilities/TimeUtilities.d.ts +3 -3
  266. package/types/utilities/Validation.d.ts +6 -6
  267. package/types/view_components/ApplicationView.d.ts +13 -13
  268. package/types/view_components/TransitionManager.d.ts +20 -20
  269. package/types/view_components/ViewComponent.d.ts +15 -15
  270. package/types/view_components/ViewComponentManager.d.ts +13 -13
  271. package/types/view_components/ViewManager.d.ts +22 -23
  272. package/types/view_components/ViewState.d.ts +14 -14
  273. package/types/view_components/transition/ActionSequencerBuilder.d.ts +16 -16
  274. package/types/view_components/transition/DrawIOAnimationSheet.d.ts +17 -17
  275. package/types/view_components/transition/TransitionTable.d.ts +8 -8
  276. package/types/view_components/transition/ViewStateTransitionHandler.d.ts +19 -19
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/BaseApplication.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/BaseShaderMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/render_mode/BaseRender.js","../src/resource_loader/AbstractLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/ResourceContainer.js","../src/loaders/AsyncAbstractLoader.js","../src/loaders/AsyncAudiosLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/loaders/AsyncObjectsLoader.js","../src/Browser.js","../src/resource_loader/AsyncTextureLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/loaders/AsyncTexturesLoader.js","../src/scenes/loading_states/CompilatorManager.js","../src/scenes/loading_states/LoadingState.js","../src/scenes/loading_states/HighQualityLoadingState.js","../src/scenes/loading_states/RegularLoadingState.js","../src/scenes/AbstractScene.js","../src/utilities/OMath.js","../src/action_sequencer/ActionSequencer.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/NumberInterpolator.js","../src/action_sequencer/ActionEvent.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewManager.js","../src/view_components/ApplicationView.js","../src/CameraManager.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/Capabilities.js","../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/PerspectiveCamera.js","../src/Debug.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/OrthographicCamera.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/view_components/ViewComponentManager.js","../src/RenderLoop.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/utilities/Validation.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","\r\nexport class AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = this.is_number(loaded) ? loaded : 1;\r\n total = this.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n if (response.ok)\r\n {\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n else\r\n {\r\n this.__set_error(`${response.status}: ${response.statusText}`);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n\r\n is_int(n)\r\n {\r\n return Number(n) === n && n % 1 === 0;\r\n }\r\n\r\n is_float(n)\r\n {\r\n return Number(n) === n && n % 1 !== 0;\r\n }\r\n\r\n is_number(n)\r\n {\r\n return this.is_int(n) || this.is_float(n);\r\n }\r\n}\r\n","import { Audio as TAudio } from 'three';\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","class ResourceContainer\n{\n init()\n {\n this.resources = {};\n this.resources_by_url = {};\n }\n\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n }\n\n get_resource(name)\n {\n return this.resources[name];\n }\n\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","import { ResourceContainer } from '../ResourceContainer';\n\nclass AsyncAbstractLoader\n{\n constructor(name, assets, worker)\n {\n this.resource_container = ResourceContainer;\n this.assets = assets;\n this.name = name;\n\n this.worker = worker;\n\n this.bound_on_message = this.on_message.bind(this);\n\n this.__setup_worker();\n\n this.assets_loaders = this.__setup_loaders();\n }\n\n load()\n {\n this.worker.postMessage({ type: 'load', loader_name: this.name });\n }\n\n is_loaded()\n {\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n if (!asset_loader.has_finished)\n {\n return false;\n }\n else\n {\n if (asset_loader.has_error)\n {\n // Restore original url so the error message make more sense\n asset_loader.url = asset_loader.original_url;\n\n asset_loader.print_error();\n }\n }\n }\n\n return true;\n }\n\n get_progress()\n {\n return this.__get_loaded_bytes() / this.__get_total_bytes();\n }\n\n __get_loaded_bytes()\n {\n let loaded_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n loaded_bytes += this.assets_loaders[i].loaded_bytes;\n }\n\n return loaded_bytes;\n }\n\n __get_total_bytes()\n {\n let total_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n total_bytes += this.assets_loaders[i].total_bytes;\n }\n\n return total_bytes;\n }\n\n get_assets_names()\n {\n const names = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset = this.assets[i];\n\n names.push(asset.name);\n }\n\n return names;\n }\n\n static create_worker()\n {\n const worker = new Worker(\n new URL('./assets_loader/AsyncAssetsLoaderWorker.js', import.meta.url),\n { name: 'OHZI - AssetLoader', type: 'module' });\n\n return worker;\n }\n\n __setup_worker()\n {\n this.worker.addEventListener('message', this.bound_on_message);\n\n this.worker.postMessage({ type: 'assets', loader_name: this.name, data: this.assets });\n }\n\n on_message(e)\n {\n const message = e.data;\n\n switch (message.type)\n {\n case `asset_loaded_${this.name}`:\n this.__on_assets_loaded(message.data);\n break;\n }\n }\n\n __on_assets_loaded(resources)\n {\n this.worker.removeEventListener('message', this.bound_on_message);\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n // Save original url to show in a possible error\n asset_loader.original_url = asset_loader.url;\n\n asset_loader.url = resources[asset_loader.resource_id];\n\n asset_loader.on_preloaded_finished(this.resource_container);\n }\n }\n\n __setup_loaders()\n {\n console.warn('Not implemented');\n }\n}\n\nexport { AsyncAbstractLoader };\n","import { AudioLoader } from '../resource_loader/AudioLoader';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncAudiosLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n loaders.push(new AudioLoader(\n asset_data.name,\n asset_data.url,\n asset_data.loop,\n asset_data.volume,\n asset_data.size,\n asset_data.positional\n ));\n }\n\n return loaders;\n }\n}\n\nexport { AsyncAudiosLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","import { GLTFDRACOLoader } from '../resource_loader/GLTFDRACOLoader';\nimport { GLTFLoader } from '../resource_loader/GLTFLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncObjectsLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n if (asset_data.draco)\n {\n const draco_loader = ResourceContainer.get('draco_loader');\n\n loaders.push(new GLTFDRACOLoader(asset_data.name, asset_data.url, draco_loader, asset_data.size));\n }\n else\n {\n loaders.push(new GLTFLoader(asset_data.name, asset_data.url, asset_data.size));\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncObjectsLoader };\n","\nclass Browser\n{\n async init()\n {\n this.browser_name = '';\n this.agent = window.navigator.userAgent.toLowerCase();\n\n this.has_web_xr_support = 'xr' in navigator;\n this.is_vr = this.has_web_xr_support && await navigator.xr.isSessionSupported('immersive-vr');\n\n switch (true)\n {\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!window.opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nexport class AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n","import { AbstractLoader } from './AbstractLoader';\n\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","\nimport { AsyncTextureLoader } from '../resource_loader/AsyncTextureLoader';\nimport { BasisLoader } from '../resource_loader/BasisLoader';\nimport { CubemapLoader } from '../resource_loader/CubemapLoader';\nimport { RGBETextureLoader } from '../resource_loader/RGBETextureLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncTexturesLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n switch (asset_data.kind)\n {\n case 'regular':\n loaders.push(new AsyncTextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'basis':\n loaders.push(new BasisLoader(\n asset_data.name,\n asset_data.url,\n ResourceContainer.get('basis_loader'),\n asset_data.size\n ));\n\n break;\n case 'hdr':\n loaders.push(new RGBETextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'cubemap':\n loaders.push(new CubemapLoader(\n asset_data.name,\n asset_data.url,\n asset_data.extension,\n asset_data.size\n ));\n\n break;\n default:\n break;\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncTexturesLoader };\n","class CompilatorManager\n{\n constructor(compilators)\n {\n this.compilators = compilators;\n this.first_update = true;\n\n this.index = 0;\n }\n\n update()\n {\n if (!this.is_finished())\n {\n if (this.compilators[this.index].finished)\n {\n this.index++;\n this.first_update = true;\n }\n else\n {\n if (this.first_update)\n {\n this.compilators[this.index].start();\n this.first_update = false;\n }\n else\n {\n this.compilators[this.index].update();\n }\n }\n }\n }\n\n is_finished()\n {\n return this.index === this.compilators.length;\n }\n}\n\nexport { CompilatorManager };\n","import { ResourceContainer } from 'ohzi-core';\n\nimport { AsyncAudiosLoader } from '../../loaders/AsyncAudiosLoader';\nimport { AsyncObjectsLoader } from '../../loaders/AsyncObjectsLoader';\nimport { AsyncTexturesLoader } from '../../loaders/AsyncTexturesLoader';\nimport { CompilatorManager } from './CompilatorManager';\n\nexport class LoadingState\n{\n constructor(scene, { SceneCompilator, TexturesCompilator, AudiosCompilator })\n {\n this.scene = scene;\n\n this.SceneCompilator = SceneCompilator;\n this.TexturesCompilator = TexturesCompilator;\n this.AudiosCompilator = AudiosCompilator;\n\n this.loaders = [];\n this.compilators = [];\n\n this.callback_called = false;\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders = [], custom_compilators = [], custom_data = [])\n {\n this.scene_objects = scene_objects;\n this.scene_textures = scene_textures;\n this.scene_sounds = scene_sounds;\n\n this.custom_loaders = custom_loaders;\n this.custom_compilators = custom_compilators;\n this.custom_data = custom_data;\n }\n\n get loading_progress()\n {\n let progress = 0;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n progress += loader.get_progress();\n }\n return progress / this.loaders.length;\n }\n\n load()\n {\n this.setup_loader();\n\n // TODO: improve this.\n // We call load method to one of the 3 loaders because they share the same worker.\n this.loaders[0].load();\n }\n\n on_enter()\n {\n }\n\n on_exit()\n {\n }\n\n update()\n {\n\n }\n\n setup_loader()\n {\n const compilators = [];\n\n const assets_worker = ResourceContainer.get('assets_worker');\n assets_worker.postMessage({ type: 'reset', loader_name: this.scene.name });\n\n const object_loader = new AsyncObjectsLoader(this.scene.name, this.scene_objects, assets_worker);\n this.loaders.push(object_loader);\n compilators.push(new this.SceneCompilator(this.scene));\n\n const textures_loader = new AsyncTexturesLoader(this.scene.name, this.scene_textures, assets_worker);\n this.loaders.push(textures_loader);\n compilators.push(new this.TexturesCompilator(textures_loader.get_assets_names()));\n\n const audios_loader = new AsyncAudiosLoader(this.scene.name, this.scene_sounds, assets_worker);\n this.loaders.push(audios_loader);\n compilators.push(new this.AudiosCompilator(audios_loader.get_assets_names()));\n\n for (let i = 0; i < this.custom_loaders.length; i++)\n {\n const loader = new this.custom_loaders[i](this.scene.name, this.custom_data[i], assets_worker);\n this.loaders.push(loader);\n compilators.push(new this.custom_compilators[i](loader.get_assets_names()));\n }\n\n this.compilator_manager = new CompilatorManager(compilators);\n }\n\n is_loaded()\n {\n let loaded = true;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n\n loaded = loaded && loader.is_loaded();\n }\n\n return loaded;\n }\n\n is_compiled()\n {\n this.compilator_manager.update();\n return this.compilator_manager.is_finished();\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class HighQualityLoadingState extends LoadingState\n{\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n // if (this.is_compiled())\n // {\n this.scene.on_high_quality_assets_ready();\n // }\n }\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class RegularLoadingState extends LoadingState\n{\n constructor(scene, compilators)\n {\n super(scene, compilators);\n\n this.on_assets_ready_called = false;\n }\n\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n if (!this.on_assets_ready_called)\n {\n this.scene.on_assets_ready();\n this.on_assets_ready_called = true;\n }\n\n if (this.is_compiled())\n {\n this.scene.on_assets_compiled();\n }\n }\n }\n}\n","import { Scene } from 'three';\n// import { AvatarSystem } from '../../components/avatar/AvatarSystem';\n\nimport { HighQualityLoadingState } from './loading_states/HighQualityLoadingState';\nimport { LoadingState } from './loading_states/LoadingState';\nimport { RegularLoadingState } from './loading_states/RegularLoadingState';\n\nclass AbstractScene extends Scene\n{\n constructor({ name, compilators })\n {\n super();\n\n this.name = name;\n\n this.is_loaded = false;\n this.is_high_loaded = false;\n\n this.loading_states = {\n regular: new RegularLoadingState(this, compilators),\n high: new HighQualityLoadingState(this, compilators)\n };\n\n this.current_loading_state = new LoadingState(this, compilators);\n // this.set_loading_state(this.loading_states.regular);\n }\n\n get loading_progress()\n {\n return this.current_loading_state.loading_progress;\n }\n\n init()\n {\n }\n\n load()\n {\n this.init();\n\n this.set_loading_state(this.loading_states.regular);\n this.current_loading_state.load();\n }\n\n get_objects()\n {\n const objects = [];\n\n this.traverse(child =>\n {\n if (child.geometry)\n {\n objects.push(child);\n\n // if (child.name === 'pitch_floor')\n // {\n // objects.push(child);\n // }\n // else\n // {\n // child.visible = false;\n // }\n }\n });\n\n return objects;\n }\n\n dispose_cpu()\n {\n this.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.attributes.position.array = new Float32Array(3);\n if (child.geometry.attributes.normal)\n {\n child.geometry.attributes.normal.array = new Float32Array(3);\n }\n if (child.geometry.attributes.uv)\n {\n child.geometry.attributes.uv.array = new Float32Array(2);\n }\n if (child.material.map)\n {\n for (let i = 0; i < child.material.map.mipmaps.length; i++)\n {\n child.material.map.mipmaps[i] = new Uint8Array(4);\n }\n }\n }\n });\n\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n dispose()\n {\n this.traverse(child =>\n {\n if (child.material)\n {\n if (child.material.map)\n {\n child.material.map.dispose();\n }\n\n child.material.dispose();\n child.geometry.dispose();\n }\n });\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data)\n {\n this.loading_states.regular.set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data);\n }\n\n set_high_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data)\n {\n this.loading_states.high.set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data);\n }\n\n set_loading_state(state)\n {\n this.current_loading_state.on_exit();\n this.current_loading_state = state;\n this.current_loading_state.on_enter();\n }\n\n // Called from transition\n update_loading_state()\n {\n if (!this.is_high_loaded)\n {\n this.current_loading_state.update();\n }\n }\n\n update()\n {\n this.update_loading_state();\n }\n\n on_assets_ready()\n {\n\n }\n\n on_assets_compiled()\n {\n this.is_loaded = true;\n\n // Load high quality assets\n this.set_loading_state(this.loading_states.high);\n this.current_loading_state.load();\n }\n\n on_high_quality_assets_ready()\n {\n this.is_high_loaded = true;\n }\n}\n\nexport { AbstractScene };\n","\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = points[0].clone();\n projected_point.set(0, 0, 0);\n\n const points_on_plane = [];\n\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","\nimport { OMath } from '../utilities/OMath';\n\nclass ActionSequencer\n{\n constructor(context = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","\nclass ActionEvent\n{\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n}\n\nexport { ViewState };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.before_enter();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n // if (this.last_state.name !== this.current_state.name)\n // {\n // this.last_state.hide();\n // }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n get_current_state()\n {\n return this.transition_handler.current_state;\n }\n\n go_to_state(state, skip = false)\n {\n this.transition_handler.go_to_state(state, skip);\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_state(state)\n {\n this.transition_handler.set_state(state);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.browser_title_suffix = '';\n }\n\n update()\n {\n this.__set_views_opacities();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n TransitionManager.go_to_state(v, skip);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n set_view(view_name)\n {\n const view = this.get(view_name);\n\n TransitionManager.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return TransitionManager.get_current_state();\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","import { TransitionManager } from './TransitionManager';\nimport { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container, transition_data })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n this.current_opacity = 0;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n this.container.style.opacity = this.current_opacity;\n }\n }\n}\n\nexport { ApplicationView };\n","class CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","import { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipMaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n __draw(text, ctxOptions)\n {}\n\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","import { Scene } from 'three';\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n add_scene(name)\n {\n\n }\n\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n child.material.dispose();\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\n\nclass Sphere extends Mesh\n{\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { ConeGeometry, CylinderGeometry, Mesh, MeshBasicMaterial, Vector3 } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","import { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = window.innerWidth;\n this.height = window.innerHeight;\n\n this.position = new Vector2();\n\n this.render_width = window.innerWidth;\n this.render_height = window.innerHeight;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","import { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","import { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { Vector3 } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n draw_plane(width, height, color)\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n draw_point_array(input_points, open = false, color = 0xff0000)\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line(curve[i].clone().add(offset), curve[i + 1].clone().add(offset));\n }\n }\n\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { SceneManager } from './SceneManager';\n\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n compile(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.compile(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n async compile_async(scene, camera, RT, override_mat, target_scene)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n const promise = this._renderer.compileAsync(scene || SceneManager.current,\n camera || CameraManager.current, target_scene);\n\n this.__apply_override_material(scene, undefined);\n\n return promise;\n }\n\n render_scene(scene)\n {\n if (scene.on_pre_render)\n {\n scene.on_pre_render();\n }\n\n if (scene.render)\n {\n scene.render();\n }\n else\n {\n this.render(scene, undefined);\n }\n\n if (scene.on_post_render)\n {\n scene.on_post_render();\n }\n }\n\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = parseInt(Math.ceil(new_width / tile_width));\n const divisions_y = parseInt(Math.ceil(new_height / tile_height));\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","class KeyboardInput\n{\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n this.keys = {};\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { DataTexture, Matrix4, RGBAFormat, RepeatWrapping, Vector3 } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBAFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { SceneManager } from '../SceneManager';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\nimport { ViewManager } from './view_components/ViewManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n ViewManager.update();\n ViewComponentManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n this.target_application.on_frame_end();\n this.frames_passed++;\n\n this.input.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nexport class ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n","import { Mesh } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","import { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","import grid_frag from '../shaders/grid/grid.frag';\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","import line_vs from '../shaders/basic_line/basic_line.vert';\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh } from 'three';\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n\n if (points)\n {\n this.setup(points);\n }\n }\n\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n this.geometry.getAttribute('position').copy(new BufferAttribute(vertexList, 3));\n this.geometry.getAttribute('next_position').copy(new BufferAttribute(nextPositionList, 3));\n this.geometry.getAttribute('previous_position').copy(new BufferAttribute(previousPositionList, 3));\n this.geometry.getAttribute('orientation').copy(new BufferAttribute(orientationList, 1));\n this.geometry.getAttribute('coverage').copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","import basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh } from 'three';\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.set(value, value, value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","import { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter } from 'three';\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n constructor(text, font, color, pivot, is_static)\n {\n const simple_text_drawer = new SimpleTextDrawer(is_static);\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","class UIElementState\n{\n constructor()\n {\n\n }\n\n update(ui_element, normalized_mouse_position)\n {\n\n }\n\n on_enter(ui_element)\n {}\n\n on_exit(ui_element)\n {}\n}\n\nexport { UIElementState };\n","import { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\n\nclass UIElement extends Mesh\n{\n constructor(vert, frag)\n {\n super(new PlaneGeometry(1, 1), new UIElementMaterial());\n\n this.is_clickable = false;\n\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","import { Mesh } from 'three';\n\nclass UpdatableMaterialMesh extends Mesh\n{\n constructor(geometry, material)\n {\n super(geometry, material);\n\n const self = this;\n\n this.onBeforeRender = () =>\n {\n self.material.update();\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","import { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, NearestFilter, NoColorSpace, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorScape: NoColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n // this.loader.setDataType(UnsignedByteType);\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n fetch(this.url).then((response) =>\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["BaseApplication","on_post_start","on_enter","on_exit","before_update","update","fixed_update","on_post_render","on_pre_render","on_frame_end","BlitMaterial","ShaderMaterial","constructor","frag_shader","vert_shader","defines","super","uniforms","_MainTex","value","_Resolution","Vector2","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","this","_SecondTex","undefined","set_add_texture","tex","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","Color","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","BaseRender","render","context","renderer","resize","dispose","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","is_number","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","fetch","method","mode","credentials","redirect","then","on_progress","bind","catch","__on_error","set_resource","response","response_clone","clone","reader","body","getReader","contentLength","headers","get","receivedLength","done","read","length","ok","on_preloaded_finished","status","statusText","data","is_int","n","Number","is_float","AudioClip","buffer","loop","volume","positional","audio","init","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","play","pause","stop","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","getContext","createBuffer","r","blob","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","resources","name","resource","Object","keys","includes","get_resource","AsyncAbstractLoader","assets","worker","ResourceContainer","bound_on_message","on_message","__setup_worker","assets_loaders","__setup_loaders","postMessage","type","loader_name","is_loaded","i","asset_loader","original_url","get_progress","__get_loaded_bytes","__get_total_bytes","get_assets_names","names","asset","push","create_worker","Worker","URL","addEventListener","e","__on_assets_loaded","removeEventListener","AsyncAudiosLoader","scene_name","loaders","asset_data","GLTFDRACOLoader","loader","GLTFLoader","setDRACOLoader","gltf","xhr","msg","TGLTFLoader","AsyncObjectsLoader","draco","draco_loader","browser","browser_name","agent","window","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","xr","isSessionSupported","indexOf","opr","chrome","version","get_version","is_safari","is_chrome","is_edge","is_edge_chromium","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","split","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","Browser","load_with_old_method","load_with_new_method","texture","Texture","image","Image","src","onload","colorSpace","SRGBColorSpace","NoColorSpace","needsUpdate","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","BasisLoader","basis","CubemapLoader","extension","CubeTextureLoader","setPath","urls","RGBETextureLoader","RGBELoader","hdr","AsyncTexturesLoader","kind","CompilatorManager","compilators","first_update","index","is_finished","finished","start","LoadingState","scene","SceneCompilator","TexturesCompilator","AudiosCompilator","callback_called","set_assets","scene_objects","scene_textures","scene_sounds","custom_loaders","custom_compilators","custom_data","loading_progress","progress","setup_loader","assets_worker","object_loader","textures_loader","audios_loader","compilator_manager","is_compiled","HighQualityLoadingState","on_high_quality_assets_ready","RegularLoadingState","on_assets_ready_called","on_assets_ready","on_assets_compiled","AbstractScene","Scene","is_high_loaded","loading_states","regular","high","current_loading_state","set_loading_state","get_objects","objects","traverse","child","geometry","dispose_cpu","attributes","position","array","Float32Array","normal","uv","material","map","mipmaps","Uint8Array","set_high_assets","state","update_loading_state","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","Math","round","toString","g","b","project_points_on_plane","points","plane","projected_point","points_on_plane","projectPoint","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","v","w","z","points_average","center","add","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","JSON","parse","stringify","tmp_t","channels","channel_names","duration","reset","skip","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","attribute_name","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","easing_function","__play_events","evaluate_keyframe","log","trigger","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","transitions_velocity","URLSearchParams","location","search","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","ActionEvent","args","ViewApi","application","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","getAttribute","get_node_x_position","parseFloat","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","find","element","sequencer","action_event","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewState","before_enter","before_exit","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","transition_manager","transition_handler","get_current_state","set_transitions_velocity","view_manager","views","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","__change_browser_title","TransitionManager","go_to_scene","next_view","transition_view","set_next_view","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_by_url","history","pushState","title","__capitalize","document","set_opacity","string","aux_string","toUpperCase","__snake_to_whitespace","group","ApplicationView","container","current_opacity","ViewManager","classList","remove","opacity","style","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","ceil","measureText","width","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","NearestFilter","generateMipMaps","roundRect","height","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","SimpleTextDrawer","text_margin","text_size","clearRect","globalAlpha","fillStyle","fillRect","textBaseline","textAlign","fillText","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","AxisHelper","Object3D","scale","blue_points","Vector3","blue_axis_mat","LineBasicMaterial","color","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","scene_manager","add_scene","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","innerWidth","innerHeight","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","clear","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","dst","src_texture","isWebGLRenderTarget","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","blit_clear_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","setSize","render_target","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","WebGLRenderer","enabled","autoClear","setPixelRatio","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","compile","compile_async","target_scene","promise","compileAsync","render_scene","overrideMaterial","readback_RT","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","link","download","href","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","LinearSRGBColorSpace","FloatType","stencilBuffer","depthBuffer","output","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","get_mesh","v3","v4","DataTexture","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","ui","input","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","set_screen_space_coordinate_system","add_world_space_element","set_world_space_coordinate_system","NDC","update_state","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","tmp_vec","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","zoom","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","Debug","render_loop","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","TOrthographicCamera","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","generateMipmaps","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentManager","setAnimationLoop","ViewComponent","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Validation","is_json","str","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","boolean","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","depth_offset","clear_state","visible","get_size","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","colorScape","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/PerspectiveCamera.js","../src/CameraManager.js","../src/Capabilities.js","../src/OrthographicCamera.js","../src/render_mode/BaseRender.js","../src/materials/BlitMaterial.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/materials/BaseShaderMaterial.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/Debug.js","../src/Time.js","../src/utilities/OMath.js","../src/action_sequencer/ActionEvent.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/ActionSequencer.js","../src/action_sequencer/NumberInterpolator.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewComponentManager.js","../src/view_components/ViewManager.js","../src/RenderLoop.js","../src/BaseApplication.js","../src/materials/AddMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/resource_loader/AbstractLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/ResourceContainer.js","../src/loaders/AsyncAbstractLoader.js","../src/loaders/AsyncAudiosLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/loaders/AsyncObjectsLoader.js","../src/Browser.js","../src/resource_loader/AsyncTextureLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/loaders/AsyncTexturesLoader.js","../src/scenes/loading_states/CompilatorManager.js","../src/scenes/loading_states/LoadingState.js","../src/scenes/loading_states/HighQualityLoadingState.js","../src/scenes/loading_states/RegularLoadingState.js","../src/scenes/AbstractScene.js","../src/view_components/ApplicationView.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/Screen.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/utilities/Validation.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["// @ts-check\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","// @ts-check\nimport { Scene, Mesh } from 'three'; // eslint-disable-line no-unused-vars\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n /**\n * @param {string} name\n */\n add_scene(name) // eslint-disable-line no-unused-vars\n {\n\n }\n\n /** @type {Scene} */\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse((/** @type {Mesh} */ child) =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n const mat = child.material;\n if ('disppose' in mat && typeof (mat.disppose) === 'function')\n {\n // @ts-ignore\n mat.dispose();\n }\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","// @ts-check\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n /**\n * @param {Vector3} [size]\n * @param {Vector3} [segments]\n * @param {number | string} [color]\n */\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\n\nclass Sphere extends Mesh\n{\n /**\n * @param {number} radius\n * @param {number | string} color\n */\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n this.radius = radius;\n this.color = color;\n this.center = this.position;\n }\n}\n\nexport { Sphere };\n","// @ts-check\nimport { ConeGeometry, CylinderGeometry, Mesh, MeshBasicMaterial, Vector3 } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n /**\n * @param {string | number} [color]\n * @param {number} [length]\n * @param {Vector3} [dir]\n */\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","// @ts-check\nimport { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = 1;\n this.height = 1;\n\n this.position = new Vector2();\n\n this.render_width = 1;\n this.render_height = 1;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n /**\n * @param {number} x\n * @param {number} y\n */\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n /**\n * @param {number} width\n * @param {number} height\n */\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n /**\n * @param {Vector2} vector2\n */\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n /**\n * @param {number} value\n */\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","// @ts-check\nimport { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n /**\n * @param {number} fov\n * @param {number} aspect\n * @param {number} near\n * @param {number} far\n */\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n /**\n * @param {PerspectiveCamera} camera\n * @returns {this}\n */\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","// @ts-check\nimport { PerspectiveCamera } from './PerspectiveCamera'; // eslint-disable-line no-unused-vars\n\nclass CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n /** @type {PerspectiveCamera} */\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n /** @type {PerspectiveCamera} */\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","// @ts-check\nclass Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","// @ts-check\nimport { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n /**\n * @param {number} left\n * @param {number} right\n * @param {number} top\n * @param {number} bottom\n * @param {number} near\n * @param {number} far\n */\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n /**\n * @param {OrthographicCamera} camera\n * @returns {this}\n */\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","// @ts-check\nimport { BaseApplication } from './BaseApplication'; // eslint-disable-line no-unused-vars\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { OrthographicCamera } from './OrthographicCamera'; // eslint-disable-line no-unused-vars\nimport { PerspectiveCamera } from './PerspectiveCamera'; // eslint-disable-line no-unused-vars\nimport { SceneManager } from './SceneManager';\n\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget,\n Material, Object3D, Scene // eslint-disable-line no-unused-vars\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n /**\n * @param {Object} options\n * @param {HTMLCanvasElement} options.canvas\n * @param {Record<string, any>} options.core_attributes\n * @param {Record<string, any>} options.context_attributes\n * @param {Record<string, any>} options.threejs_attributes\n * @param {number} options.dpr\n */\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n /** @type {Record<string, any>} */\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n /**\n * @param {BaseRender} new_state\n */\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n /**\n * @param {Scene} [scene]\n * @param {PerspectiveCamera | OrthographicCamera} [camera]\n * @param {WebGLRenderTarget} [RT]\n * @param {Material} [override_mat]\n */\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n /**\n * @param {Scene} scene\n * @param {PerspectiveCamera} camera\n * @param {WebGLRenderTarget} RT\n * @param {Material} override_mat\n */\n compile(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.compile(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n /**\n * @param {Scene} scene\n * @param {PerspectiveCamera} camera\n * @param {WebGLRenderTarget} RT\n * @param {Material} override_mat\n * @param {Scene} target_scene\n * @returns {Promise<Object3D>}\n */\n async compile_async(scene, camera, RT, override_mat, target_scene)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n const promise = this._renderer.compileAsync(scene || SceneManager.current,\n camera || CameraManager.current, target_scene);\n\n this.__apply_override_material(scene, undefined);\n\n return promise;\n }\n\n /**\n * @param {BaseApplication | Scene | {render:()=>void}} scene\n */\n render_scene(scene)\n {\n if ('on_pre_render' in scene)\n {\n scene.on_pre_render();\n }\n\n if ('render' in scene)\n {\n scene.render();\n }\n else\n {\n // @ts-ignore\n this.render(scene, undefined);\n }\n\n if ('on_post_render' in scene)\n {\n scene.on_post_render();\n }\n }\n\n /**\n * @param {Scene} scene\n * @param {Material} mat\n */\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n /**\n * @param {WebGLRenderTarget} RT\n * @param {import('three').TypedArray} buffer\n */\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n /**\n * @param {WebGLRenderTarget} RT\n * @param {PerspectiveCamera} camera\n * @param {boolean} clear_depth\n * @param {boolean} clear_stencil\n */\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n /**\n * @param {ResizeObserverEntry[]} entries\n * @param {number} dpr\n */\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n /**\n * @param {Material} mat\n * @param {WebGLRenderTarget} dst\n */\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n /**\n * @param {WebGLRenderTarget} src_RT\n * @param {WebGLRenderTarget} dst_RT\n * @param {Material} mat\n */\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n /**\n * @param {WebGLRenderTarget} dst_RT\n * @param {Material} mat\n */\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n /**\n * @param {BlobCallback} blob_callback\n * @param {number} width\n * @param {number} height\n */\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = Math.ceil(new_width / tile_width);\n const divisions_y = Math.ceil(new_height / tile_height);\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n /**\n * @param {Blob} blob\n */\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","// @ts-check\nimport { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { Graphics } from './Graphics'; // eslint-disable-line no-unused-vars\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { RenderTarget, Texture, Vector2, Vector3, WebGLRenderer } from 'three'; // eslint-disable-line no-unused-vars\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n// @ts-ignore\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\n// @ts-ignore\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n /** @type { Mesh<PlaneGeometry, ScreenSpaceTextureMaterial>[] } */\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n /**\n * @param {Vector3} origin\n * @param {Vector3} dir\n * @param {number | string} color\n * @returns {Arrow}\n */\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n /**\n * @param {RenderTarget} RT\n */\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n /**\n * @param {Vector2 | Vector3} position_2d\n * @param {number} width\n * @param {number} height\n * @param {number | string} color\n */\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n /**\n * @param {Vector3 | Vector2} from\n * @param {Vector3 | Vector2} to\n * @param {number | string} color\n */\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n /**\n * @param {Vector3[]} points\n * @param {number | string} color\n * @returns {Line}\n */\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n /**\n * @param {Vector3} pos\n * @param {number} size\n * @param {number | string} color\n * @returns {Cube}\n */\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n /**\n * @param {Vector3} from\n * @param {Vector3} to\n * @param {number} height\n * @param {number | string} color\n * @param {number} depth\n * @returns {Cube}\n */\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n /**\n *\n * @param {number} [width]\n * @param {number} [height]\n * @param {number | string} [color]\n * @returns\n */\n draw_plane(width, height, color) // eslint-disable-line no-unused-vars\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n /**\n * @param {Vector3} pos\n * @param {number} size\n * @param {number | string} color\n * @returns {Box3Helper}\n */\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n /**\n * @param {Vector3} pos\n * @param {number} size\n * @param {number | string} color\n * @returns {Sphere}\n */\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n /**\n *\n * @param {Vector3[]} input_points\n * @param {boolean} open\n * @param {number | string} color\n * @returns {Line}\n */\n draw_point_array(input_points, open = false, color = 0xff0000) // eslint-disable-line no-unused-vars\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n /**\n * @param {Sphere} sphere\n * @param {number | string} color\n * @returns {Mesh}\n */\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n /**\n * @param {Sphere} sphere\n */\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n /**\n * @param {Box3} bb\n */\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n /**\n * @param {Vector3[]} curve\n * @param {object} options\n * @param {number} options.offset\n */\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line([curve[i].clone().add(offset), curve[i + 1].clone().add(offset)]);\n }\n }\n\n /**\n * @param {Texture} tex\n * @param {number} w\n * @param {number} h\n * @returns {Mesh}\n */\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n /**\n * @param {Graphics} graphics\n */\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","// @ts-check\nimport { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n /**\n * @param {number} value\n */\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = points[0].clone();\n projected_point.set(0, 0, 0);\n\n const points_on_plane = [];\n\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","// @ts-check\nclass ActionEvent\n{\n /**\n * @param {string} name\n * @param {string} method\n * @param {string} args\n */\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","\nclass EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\n/**\n * @typedef {'linear'|'triangular'|'ease_in_sine'|'ease_out_sine'|'ease_in_out_sine'|'ease_in_cubic'|'ease_out_cubic'|'ease_in_out_cubic'|'ease_in_quad'|'ease_out_quad'|'ease_in_out_quad'|'ease_in_quart'|'ease_out_quart'|'ease_in_out_quart'|'ease_in_quint'|'ease_out_quint'|'ease_in_out_quint'|'ease_in_expo'|'ease_out_expo'|'ease_in_out_expo'|'ease_in_circ'|'ease_out_circ'|'ease_in_out_circ'|'ease_in_back'|'ease_out_back'|'ease_in_out_back'|'ease_in_elastic'|'ease_out_elastic'|'ease_in_out_elastic'|'ease_in_bounce'|'ease_out_bounce'|'ease_in_out_bounce'|'heartbeat'} EasingFunctionType\n */\n\nexport { EasingFunctions };\n","// @ts-check\nimport { Vector3 } from 'three'; // eslint-disable-line no-unused-vars\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n /**\n * @param {import('../utilities/EasingFunctions').EasingFunctionType | function} easing_function\n */\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n\n this.attribute_name = '';\n /** @type {number | Vector3} */\n this.from = 0;\n /** @type {number | Vector3} */\n this.to = 1;\n }\n\n /**\n * @param {any} context\n * @param {number} t\n */\n update(context, t) // eslint-disable-line no-unused-vars\n {\n }\n}\n\nexport { ActionInterpolator };\n","// @ts-check\nimport { OMath } from '../utilities/OMath';\nimport { ActionEvent } from './ActionEvent'; // eslint-disable-line no-unused-vars\nimport { ActionInterpolator } from './ActionInterpolator'; // eslint-disable-line no-unused-vars\n\nclass ActionSequencer\n{\n /**\n * @param {any} [context]\n */\n constructor(context = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n /** @type {{action:ActionEvent, trigger_time:number }[]} */\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n /** @type {{[key:string]:any[]}} */\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n /**\n * @param {number} delta_time\n */\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n /**\n * @param {number} time\n */\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n /**\n * @param {number} t\n */\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n /**\n * @param {number} trigger_time\n * @param {ActionEvent} action\n */\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n /**\n * @param {number} from\n * @param {number} to\n * @param {ActionInterpolator} interpolator\n * @param {boolean} [use_dynamic_from_value]\n */\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n /**\n * @param {string} name\n */\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n /**\n * @param {string} name\n */\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n /**\n * @param {string} name\n */\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n /**\n * @param {number} from\n * @param {number} to\n */\n __play_clips(from, to) // eslint-disable-line no-unused-vars\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n /**\n * @param {number} from\n * @param {number} to\n */\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n /**\n * @param {any} keyframe\n * @param {number} time\n */\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n /**\n * @param {string} channel_name\n */\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n /**\n * @param {string} channel_name\n */\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * @param {number} value\n * @param {number} from_range_start_value\n * @param {number} from_range_end_value\n * @returns {number}\n */\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n /**\n * @param {string} channel_name\n * @param {number} time\n */\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","// @ts-check\nimport { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n /**\n * @param {string} attribute_name\n * @param {number} [from]\n * @param {number} [to]\n * @param {boolean} [initial]\n * @param {import('../utilities/EasingFunctions').EasingFunctionType | function} [easing_function]\n */\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n /**\n * @param {any} context\n * @param {number} t\n */\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n /**\n * @param {number} t\n */\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n}\n\nexport { ViewState };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.before_enter();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n // if (this.last_state.name !== this.current_state.name)\n // {\n // this.last_state.hide();\n // }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n get_current_state()\n {\n return this.transition_handler.current_state;\n }\n\n go_to_state(state, skip = false)\n {\n this.transition_handler.go_to_state(state, skip);\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_state(state)\n {\n this.transition_handler.set_state(state);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.browser_title_suffix = '';\n }\n\n update()\n {\n this.__set_views_opacities();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n TransitionManager.go_to_state(v, skip);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n set_view(view_name)\n {\n const view = this.get(view_name);\n\n TransitionManager.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return TransitionManager.get_current_state();\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","// @ts-check\nimport { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\nimport { ViewManager } from './view_components/ViewManager';\nimport { Graphics, KeyboardInput } from './index'; // eslint-disable-line no-unused-vars\n\nclass RenderLoop\n{\n /**\n * @param {BaseApplication} target_application\n * @param {Graphics} graphics\n */\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n ViewManager.update();\n ViewComponentManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n this.target_application.on_frame_end();\n this.frames_passed++;\n\n this.input.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n /**\n * @param {BaseApplication} new_state\n */\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { RenderLoop } from './RenderLoop'; // eslint-disable-line no-unused-vars\n\n// @ts-check\nclass BaseApplication\n{\n on_post_start()\n {}\n\n /**\n * @param {RenderLoop} [loop]\n */\n on_enter(loop) // eslint-disable-line no-unused-vars\n {}\n\n /**\n * @param {RenderLoop} [loop]\n */\n on_exit(loop) // eslint-disable-line no-unused-vars\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","\r\nexport class AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = this.is_number(loaded) ? loaded : 1;\r\n total = this.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n if (response.ok)\r\n {\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n else\r\n {\r\n this.__set_error(`${response.status}: ${response.statusText}`);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n\r\n is_int(n)\r\n {\r\n return Number(n) === n && n % 1 === 0;\r\n }\r\n\r\n is_float(n)\r\n {\r\n return Number(n) === n && n % 1 !== 0;\r\n }\r\n\r\n is_number(n)\r\n {\r\n return this.is_int(n) || this.is_float(n);\r\n }\r\n}\r\n","// @ts-check\nimport { AudioListener, Audio as TAudio } from 'three'; // eslint-disable-line no-unused-vars\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n /**\n * @param {AudioBuffer} buffer\n * @param {boolean} [loop]\n * @param {number} [volume]\n * @param {boolean} [positional]\n */\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n /**\n * @param {AudioListener} audio_listener\n */\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","// @ts-check\nimport { Object3D, Texture, } from 'three'; // eslint-disable-line\n\n/**\n * @typedef {Object3D | Texture} Resource\n */\n\nclass ResourceContainer\n{\n init()\n {\n /** @type {Record<string, Resource>} */\n this.resources = {};\n\n /** @type {Record<string, any>} */\n this.resources_by_url = {};\n }\n\n /**\n * @param {string} name\n * @param {string} url\n * @param {Resource} resource\n */\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n }\n\n /**\n * @param {string} name\n */\n get_resource(name)\n {\n return this.resources[name];\n }\n\n /**\n * @param {string} name\n */\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","// @ts-check\nimport { ResourceContainer } from '../ResourceContainer';\n\nclass AsyncAbstractLoader\n{\n /**\n * @param {string} name\n * @param {any[]} assets\n * @param {Worker} worker\n */\n constructor(name, assets, worker)\n {\n this.resource_container = ResourceContainer;\n this.assets = assets;\n this.name = name;\n\n this.worker = worker;\n\n this.bound_on_message = this.on_message.bind(this);\n\n this.__setup_worker();\n\n this.assets_loaders = this.__setup_loaders();\n }\n\n load()\n {\n this.worker.postMessage({ type: 'load', loader_name: this.name });\n }\n\n is_loaded()\n {\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n if (!asset_loader.has_finished)\n {\n return false;\n }\n else\n {\n if (asset_loader.has_error)\n {\n // Restore original url so the error message make more sense\n asset_loader.url = asset_loader.original_url;\n\n asset_loader.print_error();\n }\n }\n }\n\n return true;\n }\n\n get_progress()\n {\n return this.__get_loaded_bytes() / this.__get_total_bytes();\n }\n\n __get_loaded_bytes()\n {\n let loaded_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n loaded_bytes += this.assets_loaders[i].loaded_bytes;\n }\n\n return loaded_bytes;\n }\n\n __get_total_bytes()\n {\n let total_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n total_bytes += this.assets_loaders[i].total_bytes;\n }\n\n return total_bytes;\n }\n\n get_assets_names()\n {\n const names = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset = this.assets[i];\n\n names.push(asset.name);\n }\n\n return names;\n }\n\n static create_worker()\n {\n const worker = new Worker(\n new URL('./assets_loader/AsyncAssetsLoaderWorker.js', import.meta.url),\n { name: 'OHZI - AssetLoader', type: 'module' });\n\n return worker;\n }\n\n __setup_worker()\n {\n this.worker.addEventListener('message', this.bound_on_message);\n\n this.worker.postMessage({ type: 'assets', loader_name: this.name, data: this.assets });\n }\n\n /**\n * @param {MessageEvent} e\n */\n on_message(e)\n {\n const message = e.data;\n\n switch (message.type)\n {\n case `asset_loaded_${this.name}`:\n this.__on_assets_loaded(message.data);\n break;\n }\n }\n\n /**\n * @param {any} resources\n */\n __on_assets_loaded(resources)\n {\n this.worker.removeEventListener('message', this.bound_on_message);\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n // Save original url to show in a possible error\n asset_loader.original_url = asset_loader.url;\n\n asset_loader.url = resources[asset_loader.resource_id];\n\n asset_loader.on_preloaded_finished(this.resource_container);\n }\n }\n\n /**\n * @returns {any[]}\n */\n __setup_loaders()\n {\n console.warn('Not implemented');\n return [];\n }\n}\n\nexport { AsyncAbstractLoader };\n","import { AudioLoader } from '../resource_loader/AudioLoader';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncAudiosLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n loaders.push(new AudioLoader(\n asset_data.name,\n asset_data.url,\n asset_data.loop,\n asset_data.volume,\n asset_data.size,\n asset_data.positional\n ));\n }\n\n return loaders;\n }\n}\n\nexport { AsyncAudiosLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","// @ts-check\nimport { GLTFDRACOLoader } from '../resource_loader/GLTFDRACOLoader';\nimport { GLTFLoader } from '../resource_loader/GLTFLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncObjectsLoader extends AsyncAbstractLoader\n{\n /**\n * @param {string} scene_name\n * @param {any[]} assets\n * @param {Worker} worker\n */\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n if (asset_data.draco)\n {\n const draco_loader = ResourceContainer.get('draco_loader');\n\n loaders.push(new GLTFDRACOLoader(asset_data.name, asset_data.url, draco_loader, asset_data.size));\n }\n else\n {\n loaders.push(new GLTFLoader(asset_data.name, asset_data.url, asset_data.size));\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncObjectsLoader };\n","// @ts-check\nclass Browser\n{\n async init()\n {\n this.browser_name = '';\n this.agent = window.navigator.userAgent.toLowerCase();\n\n this.has_web_xr_support = 'xr' in navigator;\n this.is_vr = this.has_web_xr_support && await navigator.xr.isSessionSupported('immersive-vr');\n\n switch (true)\n {\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n // @ts-ignore\n case this.agent.indexOf('opr') > -1 && !!window.opr:\n this.browser_name = 'opera';\n break;\n // @ts-ignore\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_firefox()\n {\n return this.browser_name === 'firefox';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = [];\n let version = '0';\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nexport class AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n","import { AbstractLoader } from './AbstractLoader';\n\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","\nimport { AsyncTextureLoader } from '../resource_loader/AsyncTextureLoader';\nimport { BasisLoader } from '../resource_loader/BasisLoader';\nimport { CubemapLoader } from '../resource_loader/CubemapLoader';\nimport { RGBETextureLoader } from '../resource_loader/RGBETextureLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncTexturesLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n switch (asset_data.kind)\n {\n case 'regular':\n loaders.push(new AsyncTextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'basis':\n loaders.push(new BasisLoader(\n asset_data.name,\n asset_data.url,\n ResourceContainer.get('basis_loader'),\n asset_data.size\n ));\n\n break;\n case 'hdr':\n loaders.push(new RGBETextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'cubemap':\n loaders.push(new CubemapLoader(\n asset_data.name,\n asset_data.url,\n asset_data.extension,\n asset_data.size\n ));\n\n break;\n default:\n break;\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncTexturesLoader };\n","class CompilatorManager\n{\n constructor(compilators)\n {\n this.compilators = compilators;\n this.first_update = true;\n\n this.index = 0;\n }\n\n update()\n {\n if (!this.is_finished())\n {\n if (this.compilators[this.index].finished)\n {\n this.index++;\n this.first_update = true;\n }\n else\n {\n if (this.first_update)\n {\n this.compilators[this.index].start();\n this.first_update = false;\n }\n else\n {\n this.compilators[this.index].update();\n }\n }\n }\n }\n\n is_finished()\n {\n return this.index === this.compilators.length;\n }\n}\n\nexport { CompilatorManager };\n","import { ResourceContainer } from 'ohzi-core';\n\nimport { AsyncAudiosLoader } from '../../loaders/AsyncAudiosLoader';\nimport { AsyncObjectsLoader } from '../../loaders/AsyncObjectsLoader';\nimport { AsyncTexturesLoader } from '../../loaders/AsyncTexturesLoader';\nimport { CompilatorManager } from './CompilatorManager';\n\nexport class LoadingState\n{\n constructor(scene, { SceneCompilator, TexturesCompilator, AudiosCompilator })\n {\n this.scene = scene;\n\n this.SceneCompilator = SceneCompilator;\n this.TexturesCompilator = TexturesCompilator;\n this.AudiosCompilator = AudiosCompilator;\n\n this.loaders = [];\n this.compilators = [];\n\n this.callback_called = false;\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders = [], custom_compilators = [], custom_data = [])\n {\n this.scene_objects = scene_objects;\n this.scene_textures = scene_textures;\n this.scene_sounds = scene_sounds;\n\n this.custom_loaders = custom_loaders;\n this.custom_compilators = custom_compilators;\n this.custom_data = custom_data;\n }\n\n get loading_progress()\n {\n let progress = 0;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n progress += loader.get_progress();\n }\n return progress / this.loaders.length;\n }\n\n load()\n {\n this.setup_loader();\n\n // TODO: improve this.\n // We call load method to one of the 3 loaders because they share the same worker.\n this.loaders[0].load();\n }\n\n on_enter()\n {\n }\n\n on_exit()\n {\n }\n\n update()\n {\n\n }\n\n setup_loader()\n {\n const compilators = [];\n\n const assets_worker = ResourceContainer.get('assets_worker');\n assets_worker.postMessage({ type: 'reset', loader_name: this.scene.name });\n\n const object_loader = new AsyncObjectsLoader(this.scene.name, this.scene_objects, assets_worker);\n this.loaders.push(object_loader);\n compilators.push(new this.SceneCompilator(this.scene));\n\n const textures_loader = new AsyncTexturesLoader(this.scene.name, this.scene_textures, assets_worker);\n this.loaders.push(textures_loader);\n compilators.push(new this.TexturesCompilator(textures_loader.get_assets_names()));\n\n const audios_loader = new AsyncAudiosLoader(this.scene.name, this.scene_sounds, assets_worker);\n this.loaders.push(audios_loader);\n compilators.push(new this.AudiosCompilator(audios_loader.get_assets_names()));\n\n for (let i = 0; i < this.custom_loaders.length; i++)\n {\n const loader = new this.custom_loaders[i](this.scene.name, this.custom_data[i], assets_worker);\n this.loaders.push(loader);\n compilators.push(new this.custom_compilators[i](loader.get_assets_names()));\n }\n\n this.compilator_manager = new CompilatorManager(compilators);\n }\n\n is_loaded()\n {\n let loaded = true;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n\n loaded = loaded && loader.is_loaded();\n }\n\n return loaded;\n }\n\n is_compiled()\n {\n this.compilator_manager.update();\n return this.compilator_manager.is_finished();\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class HighQualityLoadingState extends LoadingState\n{\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n // if (this.is_compiled())\n // {\n this.scene.on_high_quality_assets_ready();\n // }\n }\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class RegularLoadingState extends LoadingState\n{\n constructor(scene, compilators)\n {\n super(scene, compilators);\n\n this.on_assets_ready_called = false;\n }\n\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n if (!this.on_assets_ready_called)\n {\n this.scene.on_assets_ready();\n this.on_assets_ready_called = true;\n }\n\n if (this.is_compiled())\n {\n this.scene.on_assets_compiled();\n }\n }\n }\n}\n","import { Scene } from 'three';\n// import { AvatarSystem } from '../../components/avatar/AvatarSystem';\n\nimport { HighQualityLoadingState } from './loading_states/HighQualityLoadingState';\nimport { LoadingState } from './loading_states/LoadingState';\nimport { RegularLoadingState } from './loading_states/RegularLoadingState';\n\nclass AbstractScene extends Scene\n{\n constructor({ name, compilators })\n {\n super();\n\n this.name = name;\n\n this.is_loaded = false;\n this.is_high_loaded = false;\n\n this.loading_states = {\n regular: new RegularLoadingState(this, compilators),\n high: new HighQualityLoadingState(this, compilators)\n };\n\n this.current_loading_state = new LoadingState(this, compilators);\n // this.set_loading_state(this.loading_states.regular);\n }\n\n get loading_progress()\n {\n return this.current_loading_state.loading_progress;\n }\n\n init()\n {\n }\n\n load()\n {\n this.init();\n\n this.set_loading_state(this.loading_states.regular);\n this.current_loading_state.load();\n }\n\n get_objects()\n {\n const objects = [];\n\n this.traverse(child =>\n {\n if (child.geometry)\n {\n objects.push(child);\n\n // if (child.name === 'pitch_floor')\n // {\n // objects.push(child);\n // }\n // else\n // {\n // child.visible = false;\n // }\n }\n });\n\n return objects;\n }\n\n dispose_cpu()\n {\n this.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.attributes.position.array = new Float32Array(3);\n if (child.geometry.attributes.normal)\n {\n child.geometry.attributes.normal.array = new Float32Array(3);\n }\n if (child.geometry.attributes.uv)\n {\n child.geometry.attributes.uv.array = new Float32Array(2);\n }\n if (child.material.map)\n {\n for (let i = 0; i < child.material.map.mipmaps.length; i++)\n {\n child.material.map.mipmaps[i] = new Uint8Array(4);\n }\n }\n }\n });\n\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n dispose()\n {\n this.traverse(child =>\n {\n if (child.material)\n {\n if (child.material.map)\n {\n child.material.map.dispose();\n }\n\n child.material.dispose();\n child.geometry.dispose();\n }\n });\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data)\n {\n this.loading_states.regular.set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data);\n }\n\n set_high_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data)\n {\n this.loading_states.high.set_assets(scene_objects, scene_textures, scene_sounds, custom_loaders, custom_compilators, custom_data);\n }\n\n set_loading_state(state)\n {\n this.current_loading_state.on_exit();\n this.current_loading_state = state;\n this.current_loading_state.on_enter();\n }\n\n // Called from transition\n update_loading_state()\n {\n if (!this.is_high_loaded)\n {\n this.current_loading_state.update();\n }\n }\n\n update()\n {\n this.update_loading_state();\n }\n\n on_assets_ready()\n {\n\n }\n\n on_assets_compiled()\n {\n this.is_loaded = true;\n\n // Load high quality assets\n this.set_loading_state(this.loading_states.high);\n this.current_loading_state.load();\n }\n\n on_high_quality_assets_ready()\n {\n this.is_high_loaded = true;\n }\n}\n\nexport { AbstractScene };\n","import { TransitionManager } from './TransitionManager';\nimport { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container, transition_data })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n this.current_opacity = 0;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n this.container.style.opacity = this.current_opacity;\n }\n }\n}\n\nexport { ApplicationView };\n","// @ts-check\nimport { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n /**\n * @param {boolean} [uses_dynamic_font]\n */\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = !!uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n /**\n * @param {string} text\n * @param {string} font\n */\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n /**\n * @param {string} text\n * @param {any} [ctxOptions]\n */\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n /**\n * @param {string} text\n * @param {any} [ctxOptions]\n */\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipmaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n /**\n * @param {string[] | string} text\n * @param {any} [ctxOptions]\n * @param {HTMLCanvasElement} [canvas]\n * @param {CanvasRenderingContext2D} [ctx]\n */\n __draw(text, ctxOptions, canvas, ctx) // eslint-disable-line no-unused-vars\n {}\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number | {tl:number, tr:number, br:number, bl:number}} radius\n * @param {boolean} fill\n * @param {boolean} stroke\n */\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n const _side = /** @type {keyof typeof defaultRadius} */ (side);\n radius[_side] = radius[_side] || defaultRadius[_side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","// @ts-check\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n /**\n * @param {string} text\n * @param {any} [ctxOptions]\n * @param {HTMLCanvasElement} [canvas]\n * @param {CanvasRenderingContext2D} [ctx]\n */\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","// @ts-check\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","// @ts-check\nimport { BufferGeometry, Vector3 } from 'three'; // eslint-disable-line\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n /**\n * @param {BufferGeometry} geometry\n */\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","// @ts-check\nimport { Vector2 } from 'three'; // eslint-disable-line no-unused-vars\nimport { UIElement } from '../../components/UIElement'; // eslint-disable-line no-unused-vars\n\nclass UIElementState\n{\n constructor()\n {\n\n }\n\n /**\n * @param {UIElement} ui_element\n * @param {Vector2} normalized_mouse_position\n */\n update(ui_element, normalized_mouse_position) // eslint-disable-line no-unused-vars\n {\n\n }\n\n /**\n * @param {UIElement} ui_element\n */\n on_enter(ui_element) // eslint-disable-line no-unused-vars\n {}\n\n /**\n * @param {UIElement} ui_element\n */\n on_exit(ui_element) // eslint-disable-line no-unused-vars\n {}\n}\n\nexport { UIElementState };\n","import { UIElement } from '../../components/UIElement'; // eslint-disable-line no-unused-vars\nimport { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n /**\n * @param {UIElement} ui_element\n * @param {Vector2} normalized_mouse_position\n */\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","// @ts-check\nimport { Vector2 } from 'three'; // eslint-disable-line no-unused-vars\nimport { UIElement } from '../../components/UIElement'; // eslint-disable-line no-unused-vars\nimport { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n /**\n *\n * @param {UIElement} ui_element\n */\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n /**\n * @param {UIElement} ui_element\n * @param {Vector2} normalized_mouse_position\n */\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","// @ts-check\nimport { UIElement } from '../../components/UIElement'; // eslint-disable-line no-unused-vars\nimport { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n /**\n * @param {UIElement} ui_element\n */\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","// @ts-check\nimport { Vector2 } from 'three'; // eslint-disable-line no-unused-vars\nimport { UIElement } from '../../components/UIElement'; // eslint-disable-line no-unused-vars\nimport { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n /**\n * @param {UIElement} ui_element\n */\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n /**\n * @param {UIElement} ui_element\n * @param {Vector2} normalized_mouse_position\n */\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n /**\n * @param {UIElement} ui_element\n */\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","// @ts-check\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh, Texture } from 'three'; // eslint-disable-line no-unused-vars\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\nimport { UIElementState } from '../ui/ui_element_state/UIElementState'; // eslint-disable-line no-unused-vars\n\nclass UIElement extends Mesh\n{\n /**\n * @param {string} [vert]\n * @param {string} [frag]\n */\n constructor(vert, frag) // eslint-disable-line no-unused-vars\n {\n const material = new UIElementMaterial();\n super(new PlaneGeometry(1, 1), material);\n this.material = material;\n\n this.is_clickable = false;\n\n /** @type {WorldSpacePosition | ScreenSpacePosition} */\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n /**\n * @param {number} value\n */\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n /**\n * @param {Vector2} offset\n */\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n /**\n *@param {UIElementState} new_state\n */\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n // @ts-ignore\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n /**\n * @param {Texture} texture\n */\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n /**\n * @param {Vector2} normalized_mouse_pos\n */\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n /**\n * @param {Vector2} normalized_mouse_pos\n */\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n /**\n * @param {Vector2} projected_pos\n */\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n /**\n * @param {Vector2} screen_pos\n */\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n /**\n * @param {Vector2} [vector2]\n */\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","// @ts-check\nimport { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from './OrthographicCamera';\nimport { UIElement } from './components/UIElement'; // eslint-disable-line\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n /** @type {UIElement[]} */\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n /**\n * @param {UIElement} elem\n */\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n /**\n * @param {UIElement} elem\n */\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n /**\n * @param {UIElement} elem\n */\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n /**\n * @param {Graphics} renderer\n */\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","// @ts-check\nimport { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\nimport { RenderLoop } from './index'; // eslint-disable-line no-unused-vars\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n /**\n * @param {RenderLoop} render_loop\n */\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","// @ts-check\nclass KeyboardInput\n{\n /**\n * @param {HTMLElement} container\n */\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n /**\n * @type {{[key:string]:{key_name: string, pressed: boolean, down: boolean, fired: boolean, released: boolean}}}\n */\n this.keys = {};\n /** @type {string[]} */\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n /**\n * @param {KeyboardEvent} e\n */\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n /**\n * @param {KeyboardEvent} e\n */\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n /**\n * @param {string} key_name\n */\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n /**\n * @param {string} key_name\n */\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n /**\n * @param {string} key_name\n * @returns {boolean}\n */\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n /**\n * @param {string} key_name\n * @returns {boolean}\n */\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n /**\n * @param {string} key_name\n * @returns {boolean}\n */\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n /**\n * @param {string} key\n */\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false,\n released: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n /**\n * @param {string} key_name\n */\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { DataTexture, Matrix4, RGBAFormat, RepeatWrapping, Vector3 } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBAFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { SceneManager } from '../SceneManager';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","// @ts-check\nimport { Vector2 } from 'three'; // eslint-disable-line\nimport { OScreen } from './OScreen';\n\nclass Screen\n{\n init()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.init();\n }\n\n /**\n * @param {number} x\n * @param {number} y\n */\n update_position(x, y)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_position(x, y);\n }\n\n update()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update();\n }\n\n /**\n * @param {number} width\n * @param {number} height\n */\n update_size(width, height)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_size(width, height);\n }\n\n /**\n * @param {Vector2} vector2\n */\n apply_pixel_density_v2(vector2)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density_v2(vector2);\n }\n\n /**\n * @param {number} value\n */\n apply_pixel_density(value)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density(value);\n }\n\n get_pixel_size()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.get_pixel_size();\n }\n\n get aspect_ratio()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.aspect_ratio;\n }\n}\n\nconst screen = new Screen();\nexport { screen as Screen };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nexport class ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n","// @ts-check\nimport { Material, Mesh } from 'three'; // eslint-disable-line no-unused-vars\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n /**\n * @param {number} [width]\n * @param {number} [height]\n * @param {number | string} [color]\n * @param {Material} [material]\n */\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","// @ts-check\nimport { Material, Mesh } from 'three'; // eslint-disable-line no-unused-vars\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n /**\n * @param {number} [width]\n * @param {number} [height]\n * @param {number | string} [color]\n * @param {Material} [material]\n */\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","// @ts-check\n// @ts-ignore\nimport grid_frag from '../shaders/grid/grid.frag';\n// @ts-ignore\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n // @ts-ignore\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","// @ts-check\n// @ts-ignore\nimport line_vs from '../shaders/basic_line/basic_line.vert';\n// @ts-ignore\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh, Vector3 } from 'three'; // eslint-disable-line no-unused-vars\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n /**\n * @param {Vector3[]} [points]\n */\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n // @ts-ignore\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n this.material = material;\n if (points)\n {\n this.setup(points);\n }\n }\n\n /**\n * @param {Vector3[]} points\n */\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n /** @type {BufferAttribute} */(this.geometry.getAttribute('position')).copy(new BufferAttribute(vertexList, 3));\n /** @type {BufferAttribute} */(this.geometry.getAttribute('next_position')).copy(new BufferAttribute(nextPositionList, 3));\n /** @type {BufferAttribute} */(this.geometry.getAttribute('previous_position')).copy(new BufferAttribute(previousPositionList, 3));\n /** @type {BufferAttribute} */(this.geometry.getAttribute('orientation')).copy(new BufferAttribute(orientationList, 1));\n /** @type {BufferAttribute} */(this.geometry.getAttribute('coverage')).copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n this.accumulated_length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n /**\n * @param {Vector3[]} points\n * @param {number} i\n * @returns {Vector3}\n */\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n /**\n * @param {Vector3[]} points\n * @param {number} i\n * @returns {Vector3}\n */\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n /**\n * @param {Color} col\n */\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","// @ts-check\n// @ts-ignore\nimport basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\n// @ts-ignore\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh, Texture } from 'three'; // eslint-disable-line no-unused-vars\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n /**\n * @param {Texture} texture\n * @param {Vector2} [pivot]\n */\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n this.material = material;\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.copy(value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","// @ts-check\nimport { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter, Vector2 } from 'three'; // eslint-disable-line no-unused-vars\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n /**\n * @param {string} text\n * @param {string} font\n * @param {string | Number} color\n * @param {Vector2} pivot\n * @param {boolean} [is_static]\n */\n constructor(text, font, color, pivot, is_static) // eslint-disable-line no-unused-vars\n {\n const simple_text_drawer = new SimpleTextDrawer();\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","// @ts-check\nimport { BufferGeometry, Material, Mesh } from 'three'; // eslint-disable-line no-unused-vars\n\nclass UpdatableMaterialMesh extends Mesh\n{\n /**\n * @param {BufferGeometry} geometry\n * @param {Material} material\n */\n constructor(geometry, material)\n {\n super(geometry, material);\n this.material = material;\n const self = this;\n\n this.onBeforeRender = () =>\n {\n if ('update' in self.material && typeof self.material.update === 'function')\n {\n self.material.update();\n }\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","// @ts-check\nimport { Vector3 } from 'three';\nimport { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n /**\n * @param {string} attribute_name\n * @param {Vector3} [from]\n * @param {Vector3} [to]\n * @param {import('../utilities/EasingFunctions').EasingFunctionType | function} [easing_function]\n */\n constructor(attribute_name, from = new Vector3(), to = new Vector3(1, 1, 1), easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n /**\n * @param {any} context\n * @param {number} t\n */\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, NearestFilter, NoColorSpace, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorScape: NoColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n // this.loader.setDataType(UnsignedByteType);\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n fetch(this.url).then((response) =>\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["AxisHelper","Object3D","constructor","scale","super","blue_points","push","Vector3","blue_axis_mat","LineBasicMaterial","color","depthFunc","AlwaysDepth","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","this","add","set","update","dispose","scene_manager","init","_current","Scene","name","add_scene","current","scene","traverse","child","geometry","mat","material","children","length","remove","Cube","Mesh","size","segments","BoxGeometry","x","y","z","MeshBasicMaterial","Sphere","radius","SphereGeometry","center","position","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeGeometries","rotateX","quaternion","setFromUnitVectors","_dir","value","oscreen","width","height","Vector2","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","multiplyScalar","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","Color","clear_alpha","copy","camera","camera_manager","undefined","_spectator","spectator","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","OrthographicCamera","TOrthographicCamera","left","right","top","bottom","BaseRender","render","on_enter","context","renderer","on_exit","resize","BlitMaterial","ShaderMaterial","frag_shader","vert_shader","defines","uniforms","_MainTex","_Resolution","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","Blitter","_blit_scene","_blit_material","_blit_quad","PlaneGeometry","_blit_camera","blit","src","dst","src_texture","isWebGLRenderTarget","texture","src_width","image","src_height","getSize","__render","material_pass","blit_with_material","blit_clear_with_material","dst_RT","RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","Vector4","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","OScreen","clear_depth_normal_mat","depth_normal_material","graphics","__resize_RT_if_necessary","clear","CameraManager","setSize","render_target","canvas","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","depth","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","Object","assign","getContext","WebGLRenderer","xr","enabled","autoClear","setPixelRatio","extensions","get","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","set_state","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","SceneManager","compile","compile_async","target_scene","promise","compileAsync","render_scene","on_pre_render","on_post_render","overrideMaterial","readback_RT","buffer","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","Math","ceil","divisions_y","old_dpr","getPixelRatio","ctx_2D","document","createElement","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","blob","link","download","href","URL","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","NearestFilter","magFilter","format","RGBAFormat","colorSpace","LinearSRGBColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","abs","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","ScreenSpaceTextureMaterial","w","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","tex","set_screen_size","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","ctx","draw_arrow","origin","arrow","clone","normalize","draw_axis","axis","set_debug_RT","rt_debug","draw_rectangle","position_2d","fillStyle","fillRect","clearRect","draw_line_2D","from","to","strokeStyle","beginPath","moveTo","lineTo","closePath","stroke","draw_line","points","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","distanceTo","sub","forward_dir","draw_plane","basic_color_vert","basic_color_frag","transparent","plane","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","i","draw_texture","mesh","time","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","elapsed_time","delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","r","round","toString","g","b","project_points_on_plane","projected_point","points_on_plane","projectPoint","matrix4_lerp","target","t","elements","lerp","equals","x1","x2","clamp","euclideanModulo","n","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","v","points_average","get_random_color","arr","col","floor","random","saturate","ActionEvent","method","args","trigger","ViewApi","application","split","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","easing_function","attribute_name","ActionSequencer","previous_elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","JSON","parse","stringify","tmp_t","channels","channel_names","keys","duration","play","stop","reset","skip","get_duration","__play_clips","set_progress","set_normalized_progress","get_progress","is_finished","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","console","error","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","__play_events","evaluate_keyframe","log","get_keyframes","channel_name","is_channel_redefined","initial","Infinity","distance","transitions_velocity","URLSearchParams","window","location","search","Number","NumberInterpolator","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","data","getAttribute","get_node_x_position","parseFloat","includes","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","find","element","sequencer","action_event","state","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","ViewState","start","before_enter","before_exit","before_update","fixed_update","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","Time","transition_manager","transition_handler","get_current_state","set_transitions_velocity","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","TransitionManager","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","warn","set_opacity","view_manager","views","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","url","__change_browser_title","go_to_scene","scene_name","next_view","transition_view","set_next_view","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_by_url","history","pushState","title","__capitalize","string","aux_string","toUpperCase","replace","__snake_to_whitespace","group","RenderLoop","target_application","input","BaseApplication","is_running","frames_passed","time_accumulator","on_post_start","ViewManager","ViewComponentManager","Debug","on_frame_end","setAnimationLoop","bind","loop","AddMaterial","nMips","_SecondTex","set_add_texture","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","AbstractLoader","resource_id","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","is_number","__loading_ended","__set_error","message","print_error","load","resource_container","resources_by_url","cache","fetch","mode","credentials","redirect","then","on_progress","catch","__on_error","set_resource","response","response_clone","reader","body","getReader","contentLength","headers","receivedLength","done","read","ok","on_preloaded_finished","status","statusText","is_int","is_float","AudioClip","volume","positional","audio","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","pause","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","createBuffer","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","resources","resource","get_resource","AsyncAbstractLoader","assets","worker","ResourceContainer","bound_on_message","on_message","__setup_worker","assets_loaders","__setup_loaders","postMessage","loader_name","is_loaded","asset_loader","original_url","__get_loaded_bytes","__get_total_bytes","get_assets_names","names","asset","create_worker","Worker","addEventListener","e","__on_assets_loaded","removeEventListener","AsyncAudiosLoader","loaders","asset_data","GLTFDRACOLoader","loader","GLTFLoader","setDRACOLoader","gltf","xhr","msg","TGLTFLoader","AsyncObjectsLoader","draco","draco_loader","browser","browser_name","agent","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","isSessionSupported","indexOf","opr","chrome","version","get_version","is_safari","is_chrome","is_firefox","is_edge","is_edge_chromium","has_webm","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","appName","appVersion","splice","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","Browser","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","NoColorSpace","needsUpdate","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","BasisLoader","basis","CubemapLoader","extension","CubeTextureLoader","setPath","urls","RGBETextureLoader","RGBELoader","hdr","AsyncTexturesLoader","kind","CompilatorManager","compilators","first_update","index","finished","LoadingState","SceneCompilator","TexturesCompilator","AudiosCompilator","callback_called","set_assets","scene_objects","scene_textures","scene_sounds","custom_loaders","custom_compilators","custom_data","loading_progress","progress","setup_loader","assets_worker","object_loader","textures_loader","audios_loader","compilator_manager","is_compiled","HighQualityLoadingState","on_high_quality_assets_ready","RegularLoadingState","on_assets_ready_called","on_assets_ready","on_assets_compiled","AbstractScene","is_high_loaded","loading_states","regular","high","current_loading_state","set_loading_state","get_objects","objects","dispose_cpu","attributes","array","normal","uv","map","mipmaps","Uint8Array","set_high_assets","update_loading_state","ApplicationView","container","current_opacity","classList","opacity","style","CanvasDrawer","uses_dynamic_font","__textHeight","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","measureText","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","generateMipmaps","roundRect","fill","tl","tr","br","bl","defaultRadius","side","_side","quadraticCurveTo","SimpleTextDrawer","text_margin","text_size","globalAlpha","textBaseline","textAlign","fillText","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","get_mesh","v3","v4","DataTexture","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","tmp_vec","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","project","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","boolean","depth_offset","clear_state","visible","set_world_space_coordinate_system","set_screen_space_coordinate_system","get_size","update_state","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","ui","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","add_world_space_element","NDC","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","cross","inverse_mat","getInverse","applyMatrix4","projected_center","zoom","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","world_pos_to_screen","update_projection","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","render_loop","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","screen","ViewComponent","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Validation","is_json","str","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","generateMipMaps","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","colorScape","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}