ohzi-core 11.2.0 → 11.2.2
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.
- package/build/index.module.js +1 -1
- package/build/index.module.js.map +1 -1
- package/package.json +2 -2
- package/src/Browser.js +2 -13
- package/src/Graphics.js +25 -0
- package/src/components/EdgeMesh.js +6 -15
- package/src/primitives/Arrow.js +1 -1
- package/src/resource_loader/HDRCubeTextureLoader.js +25 -19
- package/src/static_batcher/GeometryBatcher.js +1 -1
- package/src/static_batcher/MeshBatcher.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.js","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/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.js","../src/view_components/ViewManager.js","../src/view_components/ViewState.js","../src/view_components/ApplicationView.js","../src/action_sequencer/ActionEvent.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/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewControllerManager.js","../src/view_components/VCManager.js","../src/view_components/WorkerToMain.js","../src/view_components/ApplicationViewController.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/ResourceContainer.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/ViewComponentControllerManager.js","../src/RenderLoop.js","../src/view_components/ViewComponentManager.js","../src/view_components/ViewComponent.js","../src/view_components/ViewComponentController.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/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/AsyncTextureLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/RGBETextureLoader.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 dispose()\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","\nclass Browser\n{\n init(opr, chrome)\n {\n this.browser_name = '';\n this.agent = navigator.userAgent.toLowerCase();\n\n // vr specific\n this.vr_browser_keywords = ['oculusbrowser', 'oculus', 'vive', 'rift', 'windowsmr', 'cardboard', 'daydream', 'wolvic'];\n this.vr_browser_name = this.vr_browser_keywords.find(keyword => this.agent.includes(keyword));\n // Check for WebXR support (indicating VR capabilities)\n this.has_web_xr_support = 'xr' in navigator;\n\n switch (true)\n {\n case this.vr_browser_name !== undefined && this.has_web_xr_support:\n this.browser_name = this.vr_browser_name;\n break;\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 && !!opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!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 is_vr()\n {\n return this.vr_browser_keywords.includes(this.browser_name);\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","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 { Browser } from '../Browser';\r\nimport { Validation } from '../utilities/Validation';\r\n\r\nclass 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 = Validation.is_number(loaded) ? loaded : 1;\r\n total = Validation.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 = Browser.is_safari ? 'no-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 this.on_preloaded_finished(resource_container, response_clone);\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\r\nexport { AbstractLoader };\r\n","\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n this.main_to_worker = undefined;\n\n this.browser_title_suffix = '';\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 this.main_to_worker.push('go_to_view_controller', [view_name, skip]);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const transition_view = this.get('transition');\n\n transition_view.set_next_view_name(scene_name);\n\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\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 register_view(view)\n {\n this.views.push(view);\n }\n\n set_main_to_worker(main_to_worker)\n {\n this.main_to_worker = main_to_worker;\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 __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","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_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 before_exit()\n {\n }\n\n on_exit()\n {\n }\n}\n\nexport { ViewState };\n","import { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n ViewManager.register_view(this);\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(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ApplicationView };\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 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 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 = {}, transitions_velocity)\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed(transitions_velocity);\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(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","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 { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\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, transitions_velocity)\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, transitions_velocity);\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 this.transitions_velocity = 1;\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, this.transitions_velocity);\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, this.transitions_velocity);\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 set_transitions_velocity(transitions_velocity)\n {\n this.transitions_velocity = transitions_velocity;\n }\n}\n\nexport { TransitionTable };\n","import { Clock, Vector2 } 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 to_json()\n {\n const data = {\n\n elapsed_time: this.elapsed_time,\n delta_time: this.delta_time,\n smooth_delta_time: this.smooth_delta_time\n\n };\n\n return data;\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","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 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_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 ViewControllerManager\n{\n constructor()\n {\n this.view_controllers = [];\n }\n\n go_to_view_controller(view_controller_name, skip = false)\n {\n const v = this.get(view_controller_name);\n TransitionManager.transition_handler.go_to_state(v, skip);\n }\n\n update()\n {\n this.__set_view_controllers_opacities();\n }\n\n register_view_controller(view_controller)\n {\n this.view_controllers.push(view_controller);\n }\n\n set_view_controller(view_controller_name)\n {\n const view_controller = this.get(view_controller_name);\n\n TransitionManager.transition_handler.set_state(view_controller);\n }\n\n get_current_view_controller()\n {\n return TransitionManager.transition_handler.current_state;\n }\n\n get(view_controller_name)\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n if (this.view_controllers[i].name === view_controller_name)\n {\n return this.view_controllers[i];\n }\n }\n console.error('[ViewControllerManager.get] no view controller found for: ', view_controller_name);\n return undefined;\n }\n\n // get_by_url(url)\n // {\n // for (let i = 0; i < this.view_controllers.length; i++)\n // {\n // if (this.view_controllers[i].url === url)\n // {\n // return this.view_controllers[i];\n // }\n // }\n // console.error('[ViewControllerManager.get_by_url] no view controller found for: ', url);\n // return undefined;\n // }\n\n __set_view_controllers_opacities()\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n this.view_controllers[i].set_opacity(TransitionManager.transition_handler.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\nexport { ViewControllerManager };\n","import { ViewControllerManager } from './ViewControllerManager';\n\n// Formerly ViewControllerManager\nclass VCManager extends ViewControllerManager\n{\n}\n\nconst v_c_manager = new VCManager();\nexport { v_c_manager as VCManager };\n","\nclass WorkerToMain\n{\n constructor()\n {\n // TODO: Use SharedArrayBuffer?\n this.methods = [];\n this.args = [];\n }\n\n push(method, args = [])\n {\n this.methods.push(method);\n this.args.push(args);\n }\n\n clear()\n {\n this.methods = [];\n this.args = [];\n }\n}\n\nconst worker_to_main = new WorkerToMain();\nexport { worker_to_main as WorkerToMain };\n","import { TransitionManager } from './TransitionManager';\nimport { VCManager } from './VCManager';\nimport { ViewState } from './ViewState';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ApplicationViewController extends ViewState\n{\n constructor({ name, url, transition_data })\n {\n super(name);\n\n this.url = url;\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 this.current_opacity = 0;\n\n VCManager.register_view_controller(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n WorkerToMain.push(`${this.name}_view.before_enter`);\n }\n\n on_enter()\n {\n WorkerToMain.push(`${this.name}_view.on_enter`);\n }\n\n before_exit()\n {\n WorkerToMain.push(`${this.name}_view.before_exit`);\n }\n\n on_exit()\n {\n WorkerToMain.push(`${this.name}_view.on_exit`);\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_view.update`);\n }\n\n fixed_update()\n {\n // TODO: Evaluate if a fixed update is necessary on the main thread\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_enter_transition`, [global_view_data, transition_progress]);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_exit_transition`, [global_view_data, transition_progress]);\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 WorkerToMain.push(`${this.name}_view.set_opacity`, [opacity]);\n }\n }\n}\n\nexport { ApplicationViewController };\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.mergeBufferGeometries([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 = 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 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';\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 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 = navigator.userAgent;\n const platform = 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","\nclass 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 { 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.mergeBufferGeometries(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 { 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 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()\n {\n Graphics.dispose();\n SceneManager.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 { OScreen } from '../OScreen';\nimport { SceneManager } from '../SceneManager';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\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 ViewComponentControllerManager\n{\n constructor()\n {\n this.component_controllers = [];\n this.enabled_component_controllers = new Set();\n }\n\n update()\n {\n this.__set_component_controllers_opacities();\n\n for (const component_controller of this.enabled_component_controllers)\n {\n component_controller.update(TransitionManager.current_state_data);\n }\n }\n\n register_component_controller(component_controller)\n {\n this.component_controllers.push(component_controller);\n }\n\n enable_component_controller(component_controller)\n {\n this.enabled_component_controllers.add(component_controller);\n }\n\n disable_component_controller(component_controller)\n {\n this.enabled_component_controllers.delete(component_controller);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n if (this.component_controllers[i].name === component_name)\n {\n return this.component_controllers[i];\n }\n }\n console.error('[ViewComponentControllerManager.get] no component_controller found for: ', component_name);\n return undefined;\n }\n\n __set_component_controllers_opacities()\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n this.component_controllers[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_contorller_manager = new ViewComponentControllerManager();\nexport { view_component_contorller_manager as ViewComponentControllerManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { VCManager } from './view_components/VCManager';\nimport { ViewComponentControllerManager } from './view_components/ViewComponentControllerManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\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\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.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\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n VCManager.update();\n ViewComponentControllerManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n\n this.frames_passed++;\n\n UI.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 { 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 this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n this.enabled_components.delete(component);\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 { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n\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\n // this.hidden = false;\n\n ViewComponentManager.enable_component(this);\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n\n // this.hidden = true;\n\n ViewComponentManager.disable_component(this);\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ViewComponent };\n","import { ViewComponentControllerManager } from './ViewComponentControllerManager';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ViewComponentController\n{\n constructor({ name })\n {\n this.name = name;\n\n this.current_opacity = 0;\n this.hidden = true;\n\n ViewComponentControllerManager.register_component_controller(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n ViewComponentControllerManager.enable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_enter`);\n\n this.hidden = false;\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_component.update`);\n }\n\n on_exit()\n {\n ViewComponentControllerManager.disable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_exit`);\n\n this.hidden = true;\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 WorkerToMain.push(`${this.name}_component.set_opacity`, [opacity]);\n this.toggle_hidden();\n }\n }\n\n toggle_hidden()\n {\n if (this.current_opacity > 0.0001)\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\nexport { ViewComponentController };\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","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, LinearSRGBColorSpace, NearestFilter, 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 colorSpace: LinearSRGBColorSpace,\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.mergeBufferGeometries(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 { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nclass 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\r\nexport { AsyncTextureLoader };\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","import { AbstractLoader } from './AbstractLoader';\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 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';\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 { 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 { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\nimport { UnsignedByteType } from 'three';\r\n\r\nclass HDRCubeTextureLoader 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 THDRCubeTextureLoader();\r\n this.url_suffix = ['/px.hdr', '/nx.hdr', '/py.hdr', '/ny.hdr', '/pz.hdr', '/nz.hdr'];\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.setPath(this.url)\r\n .setDataType(UnsignedByteType)\r\n .load(this.url_suffix, (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, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\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 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';\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","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","dispose","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","browser","init","opr","chrome","browser_name","agent","navigator","userAgent","toLowerCase","vr_browser_keywords","vr_browser_name","find","keyword","includes","has_web_xr_support","indexOf","version","get_version","name","is_safari","is_chrome","is_edge","is_edge_chromium","is_vr","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","Number","split","Validation","is_int","n","is_float","is_number","is_json","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","Browser","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","on_preloaded_finished","data","view_manager","views","main_to_worker","browser_title_suffix","go_to_view","view_name","change_url","skip","v","__change_browser_url","__change_browser_title","push","go_to_scene","scene_name","transition_view","set_next_view_name","set_browser_title_suffix","title_suffix","i","get_by_url","register_view","view","set_main_to_worker","window","history","pushState","title","__capitalize","document","string","aux_string","toUpperCase","__snake_to_whitespace","group","ViewState","start","before_enter","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","before_exit","ApplicationView","container","ViewManager","classList","add","remove","set_opacity","opacity","style","ActionEvent","args","trigger","ViewApi","application","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","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","w","z","points_average","center","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","transitions_velocity","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","stringify","tmp_t","channels","channel_names","Object","keys","duration","play","stop","reset","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","get_progress","is_finished","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","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","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","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","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","set_transitions_velocity","__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","to_json","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","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","ViewControllerManager","view_controllers","go_to_view_controller","view_controller_name","TransitionManager","__set_view_controllers_opacities","register_view_controller","view_controller","set_view_controller","get_current_view_controller","v_c_manager","worker_to_main","methods","clear","ApplicationViewController","current_opacity","VCManager","WorkerToMain","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getContext","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","needsUpdate","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","Scene","add_scene","scene","traverse","child","geometry","material","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeBufferGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","position","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","image","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","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","src","dst","src_texture","isWebGLRenderTarget","texture","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","xr","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","render_scene","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","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","blob","link","download","href","URL","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","colorSpace","LinearSRGBColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","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","resources","resource","get_resource","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","index","get_mesh","v3","v4","Uint8Array","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","ResourceContainer","UI","Debug","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","addEventListener","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","removeEventListener","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_contorller_manager","component_controllers","enabled_component_controllers","Set","__set_component_controllers_opacities","component_controller","register_component_controller","enable_component_controller","disable_component_controller","delete","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentControllerManager","setAnimationLoop","view_component_manager","components","enabled_components","__set_components_opacities","component","register_component","enable_component","disable_component","ViewComponent","ViewComponentManager","ViewComponentController","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","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","normal","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","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","attributes","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","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","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","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","original_url","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","NoColorSpace","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","AudioClip","loop","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","BasisLoader","loader","basis","xhr","msg","CubemapLoader","extension","CubeTextureLoader","setPath","urls","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","GLTFDRACOLoader","GLTFLoader","setDRACOLoader","TGLTFLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","url_suffix","setDataType","UnsignedByteType","hdr","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.module.js","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/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.js","../src/view_components/ViewManager.js","../src/view_components/ViewState.js","../src/view_components/ApplicationView.js","../src/action_sequencer/ActionEvent.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/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewControllerManager.js","../src/view_components/VCManager.js","../src/view_components/WorkerToMain.js","../src/view_components/ApplicationViewController.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/ResourceContainer.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/ViewComponentControllerManager.js","../src/RenderLoop.js","../src/view_components/ViewComponentManager.js","../src/view_components/ViewComponent.js","../src/view_components/ViewComponentController.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/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/AsyncTextureLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/RGBETextureLoader.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 dispose()\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","\nclass Browser\n{\n async init(opr, chrome)\n {\n this.browser_name = '';\n this.agent = 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 && !!opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!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","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 { Browser } from '../Browser';\r\nimport { Validation } from '../utilities/Validation';\r\n\r\nclass 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 = Validation.is_number(loaded) ? loaded : 1;\r\n total = Validation.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 = Browser.is_safari ? 'no-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 this.on_preloaded_finished(resource_container, response_clone);\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\r\nexport { AbstractLoader };\r\n","\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n this.main_to_worker = undefined;\n\n this.browser_title_suffix = '';\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 this.main_to_worker.push('go_to_view_controller', [view_name, skip]);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const transition_view = this.get('transition');\n\n transition_view.set_next_view_name(scene_name);\n\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\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 register_view(view)\n {\n this.views.push(view);\n }\n\n set_main_to_worker(main_to_worker)\n {\n this.main_to_worker = main_to_worker;\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 __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","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_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 before_exit()\n {\n }\n\n on_exit()\n {\n }\n}\n\nexport { ViewState };\n","import { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n ViewManager.register_view(this);\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(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ApplicationView };\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 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 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 = {}, transitions_velocity)\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed(transitions_velocity);\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(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","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 { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\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, transitions_velocity)\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, transitions_velocity);\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 this.transitions_velocity = 1;\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, this.transitions_velocity);\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, this.transitions_velocity);\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 set_transitions_velocity(transitions_velocity)\n {\n this.transitions_velocity = transitions_velocity;\n }\n}\n\nexport { TransitionTable };\n","import { Clock, Vector2 } 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 to_json()\n {\n const data = {\n\n elapsed_time: this.elapsed_time,\n delta_time: this.delta_time,\n smooth_delta_time: this.smooth_delta_time\n\n };\n\n return data;\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","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 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_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 ViewControllerManager\n{\n constructor()\n {\n this.view_controllers = [];\n }\n\n go_to_view_controller(view_controller_name, skip = false)\n {\n const v = this.get(view_controller_name);\n TransitionManager.transition_handler.go_to_state(v, skip);\n }\n\n update()\n {\n this.__set_view_controllers_opacities();\n }\n\n register_view_controller(view_controller)\n {\n this.view_controllers.push(view_controller);\n }\n\n set_view_controller(view_controller_name)\n {\n const view_controller = this.get(view_controller_name);\n\n TransitionManager.transition_handler.set_state(view_controller);\n }\n\n get_current_view_controller()\n {\n return TransitionManager.transition_handler.current_state;\n }\n\n get(view_controller_name)\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n if (this.view_controllers[i].name === view_controller_name)\n {\n return this.view_controllers[i];\n }\n }\n console.error('[ViewControllerManager.get] no view controller found for: ', view_controller_name);\n return undefined;\n }\n\n // get_by_url(url)\n // {\n // for (let i = 0; i < this.view_controllers.length; i++)\n // {\n // if (this.view_controllers[i].url === url)\n // {\n // return this.view_controllers[i];\n // }\n // }\n // console.error('[ViewControllerManager.get_by_url] no view controller found for: ', url);\n // return undefined;\n // }\n\n __set_view_controllers_opacities()\n {\n for (let i = 0; i < this.view_controllers.length; i++)\n {\n this.view_controllers[i].set_opacity(TransitionManager.transition_handler.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\nexport { ViewControllerManager };\n","import { ViewControllerManager } from './ViewControllerManager';\n\n// Formerly ViewControllerManager\nclass VCManager extends ViewControllerManager\n{\n}\n\nconst v_c_manager = new VCManager();\nexport { v_c_manager as VCManager };\n","\nclass WorkerToMain\n{\n constructor()\n {\n // TODO: Use SharedArrayBuffer?\n this.methods = [];\n this.args = [];\n }\n\n push(method, args = [])\n {\n this.methods.push(method);\n this.args.push(args);\n }\n\n clear()\n {\n this.methods = [];\n this.args = [];\n }\n}\n\nconst worker_to_main = new WorkerToMain();\nexport { worker_to_main as WorkerToMain };\n","import { TransitionManager } from './TransitionManager';\nimport { VCManager } from './VCManager';\nimport { ViewState } from './ViewState';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ApplicationViewController extends ViewState\n{\n constructor({ name, url, transition_data })\n {\n super(name);\n\n this.url = url;\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 this.current_opacity = 0;\n\n VCManager.register_view_controller(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n WorkerToMain.push(`${this.name}_view.before_enter`);\n }\n\n on_enter()\n {\n WorkerToMain.push(`${this.name}_view.on_enter`);\n }\n\n before_exit()\n {\n WorkerToMain.push(`${this.name}_view.before_exit`);\n }\n\n on_exit()\n {\n WorkerToMain.push(`${this.name}_view.on_exit`);\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_view.update`);\n }\n\n fixed_update()\n {\n // TODO: Evaluate if a fixed update is necessary on the main thread\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_enter_transition`, [global_view_data, transition_progress]);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n WorkerToMain.push(`${this.name}_view.update_exit_transition`, [global_view_data, transition_progress]);\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 WorkerToMain.push(`${this.name}_view.set_opacity`, [opacity]);\n }\n }\n}\n\nexport { ApplicationViewController };\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 = 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 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 = navigator.userAgent;\n const platform = 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","\nclass 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 { 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 { 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 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()\n {\n Graphics.dispose();\n SceneManager.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 { OScreen } from '../OScreen';\nimport { SceneManager } from '../SceneManager';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\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 ViewComponentControllerManager\n{\n constructor()\n {\n this.component_controllers = [];\n this.enabled_component_controllers = new Set();\n }\n\n update()\n {\n this.__set_component_controllers_opacities();\n\n for (const component_controller of this.enabled_component_controllers)\n {\n component_controller.update(TransitionManager.current_state_data);\n }\n }\n\n register_component_controller(component_controller)\n {\n this.component_controllers.push(component_controller);\n }\n\n enable_component_controller(component_controller)\n {\n this.enabled_component_controllers.add(component_controller);\n }\n\n disable_component_controller(component_controller)\n {\n this.enabled_component_controllers.delete(component_controller);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n if (this.component_controllers[i].name === component_name)\n {\n return this.component_controllers[i];\n }\n }\n console.error('[ViewComponentControllerManager.get] no component_controller found for: ', component_name);\n return undefined;\n }\n\n __set_component_controllers_opacities()\n {\n for (let i = 0; i < this.component_controllers.length; i++)\n {\n this.component_controllers[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_contorller_manager = new ViewComponentControllerManager();\nexport { view_component_contorller_manager as ViewComponentControllerManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { VCManager } from './view_components/VCManager';\nimport { ViewComponentControllerManager } from './view_components/ViewComponentControllerManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\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\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.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\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n VCManager.update();\n ViewComponentControllerManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n\n this.frames_passed++;\n\n UI.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 { 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 this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n this.enabled_components.delete(component);\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 { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n\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\n // this.hidden = false;\n\n ViewComponentManager.enable_component(this);\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n\n // this.hidden = true;\n\n ViewComponentManager.disable_component(this);\n }\n\n set_opacity(opacity)\n {\n this.container.style.opacity = opacity;\n }\n}\n\nexport { ViewComponent };\n","import { ViewComponentControllerManager } from './ViewComponentControllerManager';\nimport { WorkerToMain } from './WorkerToMain';\n\nclass ViewComponentController\n{\n constructor({ name })\n {\n this.name = name;\n\n this.current_opacity = 0;\n this.hidden = true;\n\n ViewComponentControllerManager.register_component_controller(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n ViewComponentControllerManager.enable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_enter`);\n\n this.hidden = false;\n }\n\n update()\n {\n WorkerToMain.push(`${this.name}_component.update`);\n }\n\n on_exit()\n {\n ViewComponentControllerManager.disable_component_controller(this);\n WorkerToMain.push(`${this.name}_component.on_exit`);\n\n this.hidden = true;\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 WorkerToMain.push(`${this.name}_component.set_opacity`, [opacity]);\n this.toggle_hidden();\n }\n }\n\n toggle_hidden()\n {\n if (this.current_opacity > 0.0001)\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\nexport { ViewComponentController };\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","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, LinearSRGBColorSpace, NearestFilter, 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 colorSpace: LinearSRGBColorSpace,\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 { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nclass 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\r\nexport { AsyncTextureLoader };\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","import { AbstractLoader } from './AbstractLoader';\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 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';\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 { 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 { 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, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\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 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';\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","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","dispose","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","browser","init","opr","chrome","browser_name","agent","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","xr","isSessionSupported","indexOf","version","get_version","name","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","Number","split","Validation","is_int","n","is_float","is_number","is_json","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","Browser","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","on_preloaded_finished","data","view_manager","views","main_to_worker","browser_title_suffix","go_to_view","view_name","change_url","skip","v","__change_browser_url","__change_browser_title","push","go_to_scene","scene_name","transition_view","set_next_view_name","set_browser_title_suffix","title_suffix","i","get_by_url","register_view","view","set_main_to_worker","window","history","pushState","title","__capitalize","document","string","aux_string","toUpperCase","__snake_to_whitespace","group","ViewState","start","before_enter","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","before_exit","ApplicationView","container","ViewManager","classList","add","remove","set_opacity","opacity","style","ActionEvent","args","trigger","ViewApi","application","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","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","w","z","points_average","center","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","transitions_velocity","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","stringify","tmp_t","channels","channel_names","Object","keys","duration","play","stop","reset","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","get_progress","is_finished","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","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","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","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","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","set_transitions_velocity","__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","to_json","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","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","ViewControllerManager","view_controllers","go_to_view_controller","view_controller_name","TransitionManager","__set_view_controllers_opacities","register_view_controller","view_controller","set_view_controller","get_current_view_controller","v_c_manager","worker_to_main","methods","clear","ApplicationViewController","current_opacity","VCManager","WorkerToMain","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getContext","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","needsUpdate","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","Scene","add_scene","scene","traverse","child","geometry","material","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","position","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","image","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","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","src","dst","src_texture","isWebGLRenderTarget","texture","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","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","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","blob","link","download","href","URL","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","colorSpace","LinearSRGBColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","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","resources","resource","get_resource","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","index","get_mesh","v3","v4","Uint8Array","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","ResourceContainer","UI","Debug","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","addEventListener","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","removeEventListener","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_contorller_manager","component_controllers","enabled_component_controllers","Set","__set_component_controllers_opacities","component_controller","register_component_controller","enable_component_controller","disable_component_controller","delete","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentControllerManager","setAnimationLoop","view_component_manager","components","enabled_components","__set_components_opacities","component","register_component","enable_component","disable_component","ViewComponent","ViewComponentManager","ViewComponentController","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","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","normal","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","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","attributes","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","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","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","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","original_url","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","NoColorSpace","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","AudioClip","loop","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","BasisLoader","loader","basis","xhr","msg","CubemapLoader","extension","CubeTextureLoader","setPath","urls","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","GLTFDRACOLoader","GLTFLoader","setDRACOLoader","TGLTFLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","hdr","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}
|