ohzi-core 10.7.0 → 10.7.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 +8 -7
- package/src/Browser.js +2 -13
- package/src/Graphics.js +35 -10
- package/src/components/EdgeMesh.js +6 -15
- package/src/data_textures/RGBDataTexture.js +2 -2
- package/src/data_textures/RGBFloatDataTexture.js +2 -3
- package/src/gpu_particles/ParticleAttribute.js +2 -7
- package/src/materials/SSAOMaterial.js +2 -6
- package/src/primitives/Arrow.js +4 -7
- package/src/primitives/Sphere.js +2 -4
- package/src/render_mode/DeferredRender.js +5 -9
- package/src/resource_loader/HDRCubeTextureLoader.js +25 -19
- package/src/static_batcher/GeometryBatch.js +2 -8
- 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/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.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/ViewContext.js","../src/action_sequencer/ActionEvent.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/EventManager.js","../src/ResourceContainer.js","../src/utilities/HTMLUtilities.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/ViewManager.js","../src/view_components/ApplicationView.js","../src/BaseApplication.js","../src/render_mode/BaseRender.js","../src/materials/BaseShaderMaterial.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/CameraManager.js","../src/Capabilities.js","../src/canvas_drawer/CanvasDrawer.js","../src/Configuration.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.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/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/render_utilities/Blitter.js","../src/Graphics.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/KeyboardInput.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/materials/SSAOMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/render_mode/VRRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/OrthographicCamera.js","../src/view_components/ViewComponentManager.js","../src/RenderLoop.js","../src/Screen.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/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/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.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/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/GLTFLoader.js","../src/resource_loader/GLTFDRACOLoader.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/AsyncTextureLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["\nclass Browser\n{\n init()\n {\n this.browser_name = '';\n this.agent = window.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 && !!window.opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get 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","import { Vector3 } from 'three';\n\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = new Vector3();\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 = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","class ViewContext\n{\n constructor()\n {\n this.app = undefined;\n }\n\n set_app(app)\n {\n this.app = app;\n }\n}\n\nconst view_context = new ViewContext();\nexport { view_context as ViewContext };\n","import { ViewContext } from '../view_components/ViewContext';\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 ViewContext.app[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","class EventManager\n{\n init()\n {\n this.queue = {};\n\n this.zoom_changed_evt = 'zoom_changed';\n this.store_clickd_evt = 'store_clicked';\n this.point_selected_evt = 'point_selected';\n this.config_changed = 'config_changed';\n\n this.path_substep_completed = 'path_substep_completed';\n this.path_completed = 'path_completed';\n this.go_to_store_requested_evt = 'go_to_store_requested';\n\n this.resource_loaded_evt = 'resource_loaded';\n this.service_clicked_evt = 'service_clicked';\n this.unit_pos_updated_evt = 'unit_position_updated';\n\n this.floor_changed_evt = 'floor_changed';\n\n this.on_enter_floor_navigation = 'on_enter_floor_navigation';\n this.on_exit_floor_navigation = 'on_exit_floor_navigation';\n\n this.on_enter_floor_selection = 'on_enter_floor_selection';\n this.on_exit_floor_selection = 'on_exit_floor_selection';\n\n this.on_enter_outside_navigation = 'on_enter_outside_navigation';\n this.on_exit_outside_navigation = 'on_exit_outside_navigation';\n\n this.step_selected_evt = 'step_selected';\n }\n\n fire(event, payload)\n {\n const queue = this.queue[event];\n\n if (queue === undefined)\n {\n return;\n }\n let i = queue.length;\n while (i--)\n {\n queue[i](payload);\n }\n }\n\n on(event, callback)\n {\n if (typeof this.queue[event] === 'undefined')\n {\n this.queue[event] = [];\n }\n\n this.queue[event].push(callback);\n }\n\n fire_zoom_changed(zoom)\n {\n this.fire(this.zoom_changed_evt, zoom);\n }\n\n fire_store_selected(store_id)\n {\n this.fire(this.store_clickd_evt, store_id);\n }\n\n fire_point_selected(hit_data)\n {\n this.fire(this.point_selected_evt, hit_data);\n }\n\n fire_config_changed()\n {\n this.fire(this.config_changed);\n }\n\n fire_path_substep_completed(step_number)\n {\n this.fire(this.path_substep_completed, step_number);\n }\n\n fire_path_completed()\n {\n this.fire(this.path_completed);\n }\n\n fire_step_selected(step_index)\n {\n this.fire(this.step_selected_evt, step_index);\n }\n\n fire_go_to_store_requested(store_id)\n {\n this.fire(this.go_to_store_requested_evt, store_id);\n }\n\n fire_resource_loaded(resource)\n {\n this.fire(this.resource_loaded_evt, resource);\n }\n\n fire_service_clicked(service)\n {\n this.fire(this.service_clicked_evt, service);\n }\n\n fire_unit_position_updated(unit_data)\n {\n this.fire(this.unit_pos_updated_evt, unit_data);\n }\n\n fire_floor_switched(floor_id)\n {\n this.fire(this.floor_changed_evt, floor_id);\n }\n\n fire_on_enter_floor_navigation(state)\n {\n this.fire(this.on_enter_floor_navigation, state);\n }\n\n fire_on_exit_floor_navigation(state)\n {\n this.fire(this.on_exit_floor_navigation, state);\n }\n\n fire_on_enter_floor_selection(state)\n {\n this.fire(this.on_enter_floor_selection, state);\n }\n\n fire_on_exit_floor_selection(state)\n {\n this.fire(this.on_exit_floor_selection, state);\n }\n\n fire_on_enter_outside_navigation(state)\n {\n this.fire(this.on_enter_outside_navigation, state);\n }\n\n fire_on_exit_outside_navigation(state)\n {\n this.fire(this.on_exit_outside_navigation, state);\n }\n}\n\nconst event_manager = new EventManager();\nexport { event_manager as EventManager };\n","import { EventManager } from './EventManager';\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 EventManager.fire_resource_loaded({ name: name, value: resource });\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","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 { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n show()\n {\n }\n\n hide()\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 // Backward compatibility. It will be removed in future releases.\n this.update_transition(global_view_data, transition_progress, action_sequencer);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n // Deprecated\n update_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 { 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.show();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.current_state.before_enter();\n\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 ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n\n this.view_change_subscribers = [];\n\n this.browser_title_suffix = '';\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n\n this.__set_views_opacities();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n this.transition_handler.go_to_state(v, skip);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n this.notify_view_change(view_name);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n subscribe_to_view_change(subscriber)\n {\n this.view_change_subscribers.push(subscriber);\n }\n\n notify_view_change(view_name)\n {\n for (let i = 0; i < this.view_change_subscribers.length; i++)\n {\n const subscriber = this.view_change_subscribers[i];\n subscriber.on_view_change(view_name);\n }\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n 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_view(view_name)\n {\n const view = this.get(view_name);\n\n this.transition_handler.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return this.transition_handler.current_state;\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_view_by_url(url)\n {\n console.warn('DEPRECATED. Use ViewManager.get_by_url instead');\n this.get_by_url(url);\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 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 __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(this.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\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","import { ResourceContainer } from '../ResourceContainer';\nimport { HTMLUtilities } from '../utilities/HTMLUtilities';\nimport { 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 let transition_data = ResourceContainer.get(`${name}_data`);\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n ViewManager.add_transitions(transitions);\n }\n\n show()\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 hide()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n load_html_images()\n {\n HTMLUtilities.load_images(this.container);\n }\n\n load_html_videos()\n {\n HTMLUtilities.load_videos(this.container);\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n }\n}\n\nexport { ApplicationView };\n","class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","import 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 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 { 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 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","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","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","/*\n\n A configuration class used as a singleton\n\n*/\n\nclass Configuration\n{\n init(parameters = {})\n {\n this.dpr = 1;\n\n this.app = {}; // for arbitrary use in end application\n }\n\n from_json(json)\n {\n\n }\n}\n\nconst configuration = new Configuration();\nexport { configuration as Configuration };\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","\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 } from 'three';\nimport { SphereBufferGeometry } from 'three';\nimport { MeshBasicMaterial } 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 SphereBufferGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { CylinderBufferGeometry } from 'three';\nimport { ConeBufferGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { Vector3, Mesh } 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 CylinderBufferGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeBufferGeometry(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 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 { 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 { Configuration } from './Configuration';\nimport { BaseRender } from './render_mode/BaseRender';\nimport { OScreen } from './OScreen';\nimport { CameraManager } from './CameraManager';\nimport { SceneManager } from './SceneManager';\nimport { Capabilities } from './Capabilities';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\nimport { Blitter } from './render_utilities/Blitter';\n\nimport {\n NearestFilter,\n RGBAFormat,\n LinearEncoding,\n FloatType,\n WebGLRenderTarget,\n ShaderMaterial,\n NoBlending,\n AlwaysDepth\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init(canvas, core_attributes, context_attributes, threejs_attributes)\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 this._renderer.setPixelRatio(1);\n\n OScreen.dpr = Configuration.dpr;\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 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 this.resize_observer = new ResizeObserver(this.on_resize.bind(this));\n this.resize_observer.observe(this.canvas);\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)\n {\n for (const entry of entries)\n {\n OScreen.dpr = Configuration.dpr;\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 encoding: LinearEncoding,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","import 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","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","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Mesh } from 'three';\nimport { DataTexture } from 'three';\nimport { RGBAFormat } from 'three';\nimport { RGBFormat } from 'three';\nimport { FloatType } 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, RGBFormat);\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 { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Configuration } from './Configuration';\nimport { Debug } from './Debug';\nimport { EventManager } from './EventManager';\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 Configuration.init();\n EventManager.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\nimport { Vector3 } from 'three';\nimport { DataTexture } from 'three';\nimport { RGBFormat } from 'three';\nimport { RepeatWrapping } 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, RGBFormat);\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/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/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/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 { SceneManager } from '../SceneManager';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Configuration } from '../Configuration';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor()\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 = Configuration.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 { 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 { 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 { 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 { ViewManager } from './ViewManager';\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(ViewManager.transition_handler.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(ViewManager.transition_handler.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { Time } from './Time';\nimport { UI } from './UI';\nimport { Debug } from './Debug';\nimport { BaseApplication } from './BaseApplication';\nimport { ViewManager } from './view_components/ViewManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n ViewManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n ViewManager.fixed_update();\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n ViewManager.update();\n ViewComponentManager.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 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 this.frames_passed++;\n\n this.input.clear();\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 { OScreen } from './OScreen';\n\nclass Screen\n{\n init()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.init();\n }\n\n update_position(x, y)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_position(x, y);\n }\n\n update()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update();\n }\n\n update_size(width, height)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_size(width, height);\n }\n\n apply_pixel_density_v2(vector2)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density_v2(vector2);\n }\n\n apply_pixel_density(value)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density(value);\n }\n\n get_pixel_size()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.get_pixel_size();\n }\n\n get aspect_ratio()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.aspect_ratio;\n }\n}\n\nconst screen = new Screen();\nexport { screen as Screen };\n","\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","import { HTMLUtilities } from '../utilities/HTMLUtilities';\nimport { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n\n load_html_images()\n {\n HTMLUtilities.load_images(this.container);\n }\n\n load_html_videos()\n {\n HTMLUtilities.load_videos(this.container);\n }\n}\n\nexport { ViewComponent };\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","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 '../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 { 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 { Graphics } from '../Graphics';\n\nimport { NearestFilter } from 'three';\nimport { RGBAFormat } from 'three';\nimport { LinearEncoding } from 'three';\nimport { HalfFloatType } from 'three';\nimport { FloatType } from 'three';\nimport { 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 encoding: LinearEncoding,\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 { CustomDataTexture } from './CustomDataTexture';\nimport { RGBFormat } from 'three';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBFormat);\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 { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBFormat } from 'three';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBFormat, 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 { 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\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\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 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 { 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 { 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 { 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.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('Error loading texture. Maybe the resource is not an image?', this.url, 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(function(e)\r\n {\r\n console.error(e);\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 { 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":["browser","init","this","browser_name","agent","window","navigator","userAgent","toLowerCase","vr_browser_keywords","vr_browser_name","find","keyword","includes","has_web_xr_support","undefined","indexOf","opr","chrome","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","constructor","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","value","read","length","on_preloaded_finished","data","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","Vector3","points_on_plane","i","projectPoint","push","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","v","w","z","points_average","center","add","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","context","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","skip","get_duration","__play_clips","update","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","trigger","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","transitions_velocity","URLSearchParams","location","search","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","super","view_context","app","set_app","ActionEvent","args","ViewContext","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","event_manager","queue","zoom_changed_evt","store_clickd_evt","point_selected_evt","config_changed","path_substep_completed","path_completed","go_to_store_requested_evt","resource_loaded_evt","service_clicked_evt","unit_pos_updated_evt","floor_changed_evt","on_enter_floor_navigation","on_exit_floor_navigation","on_enter_floor_selection","on_exit_floor_selection","on_enter_outside_navigation","on_exit_outside_navigation","step_selected_evt","fire","event","payload","on","callback","fire_zoom_changed","zoom","fire_store_selected","store_id","fire_point_selected","hit_data","fire_config_changed","fire_path_substep_completed","step_number","fire_path_completed","fire_step_selected","step_index","fire_go_to_store_requested","fire_resource_loaded","resource","fire_service_clicked","service","fire_unit_position_updated","unit_data","fire_floor_switched","floor_id","fire_on_enter_floor_navigation","fire_on_exit_floor_navigation","fire_on_enter_floor_selection","fire_on_exit_floor_selection","fire_on_enter_outside_navigation","fire_on_exit_outside_navigation","resources","EventManager","get_resource","HTMLUtilities","load_images","container","images","image","dataset","src","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","Vector2","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewState","start","show","hide","before_enter","on_enter","before_update","fixed_update","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_transition","update_exit_transition","before_exit","on_exit","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","view_manager","views","transition_handler","view_change_subscribers","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","__change_browser_title","notify_view_change","go_to_scene","scene_name","next_view","transition_view","set_next_view","subscribe_to_view_change","subscriber","on_view_change","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_view_by_url","get_by_url","history","pushState","title","__capitalize","document","set_opacity","string","aux_string","toUpperCase","__snake_to_whitespace","group","ApplicationView","ResourceContainer","ViewManager","classList","remove","load_html_images","load_html_videos","style","opacity","BaseApplication","on_post_start","on_post_render","on_pre_render","on_frame_end","BaseRender","render","renderer","resize","dispose","BaseShaderMaterial","ShaderMaterial","vert","frag","uniforms","vertexShader","basic_vert","fragmentShader","basic_frag","_Color","Color","BlitMaterial","frag_shader","vert_shader","defines","_MainTex","_Resolution","_TargetResolution","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","_SecondTex","set_add_texture","tex","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","camera_manager","_current","_spectator","camera","spectator","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","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","configuration","parameters","dpr","from_json","json","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","AxisHelper","Object3D","scale","blue_points","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","SphereBufferGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderBufferGeometry","translate","cone_geometry","ConeBufferGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeBufferGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","position","render_width","render_height","width_height","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","fillStyle","fillRect","clear","clearRect","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","SphereGeometry","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","blit_clear_with_material","setSize","render_target","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","dst","src_texture","isWebGLRenderTarget","texture","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","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","Configuration","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","resize_observer","ResizeObserver","on_resize","observe","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","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","encoding","LinearEncoding","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","NormalMaterial","DebugNormalsRender","Graphics","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","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","index","get_mesh","v3","v4","Uint8Array","DataTexture","RGBFormat","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","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","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","Debug","render_loop","SSAOMaterial","_InverseProjMatrix","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","SSAOComposeMaterial","_AO","DisplayNormalTextureMaterial","depth_normals_vert","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","ssao_mat","ssao_compose_mat","debug_normals","ssaa","use_ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","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","TOrthographicCamera","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentManager","setAnimationLoop","screen","SimpleTextDrawer","text_margin","text_size","globalAlpha","textBaseline","textAlign","fillText","ViewComponent","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","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","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","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","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","GLTFLoader","TGLTFLoader","GLTFDRACOLoader","setDRACOLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","url_suffix","setDataType","UnsignedByteType","hdr","JSONLoader","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","load_with_old_method","load_with_new_method","Texture","Image","onload","colorSpace","SRGBColorSpace","NoColorSpace","onerror","original_url","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","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/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.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/ViewContext.js","../src/action_sequencer/ActionEvent.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/EventManager.js","../src/ResourceContainer.js","../src/utilities/HTMLUtilities.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/ViewManager.js","../src/view_components/ApplicationView.js","../src/BaseApplication.js","../src/render_mode/BaseRender.js","../src/materials/BaseShaderMaterial.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/CameraManager.js","../src/Capabilities.js","../src/canvas_drawer/CanvasDrawer.js","../src/Configuration.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.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/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/KeyboardInput.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/materials/SSAOMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/render_mode/VRRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/OrthographicCamera.js","../src/view_components/ViewComponentManager.js","../src/RenderLoop.js","../src/Screen.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/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/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.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/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/GLTFLoader.js","../src/resource_loader/GLTFDRACOLoader.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/AsyncTextureLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["\nclass Browser\n{\n async init()\n {\n this.browser_name = '';\n this.agent = window.navigator.userAgent.toLowerCase();\n\n this.has_web_xr_support = 'xr' in navigator;\n this.is_vr = this.has_web_xr_support && await navigator.xr.isSessionSupported('immersive-vr');\n\n switch (true)\n {\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!window.opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","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","import { Vector3 } from 'three';\n\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = new Vector3();\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 = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","class ViewContext\n{\n constructor()\n {\n this.app = undefined;\n }\n\n set_app(app)\n {\n this.app = app;\n }\n}\n\nconst view_context = new ViewContext();\nexport { view_context as ViewContext };\n","import { ViewContext } from '../view_components/ViewContext';\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 ViewContext.app[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","class EventManager\n{\n init()\n {\n this.queue = {};\n\n this.zoom_changed_evt = 'zoom_changed';\n this.store_clickd_evt = 'store_clicked';\n this.point_selected_evt = 'point_selected';\n this.config_changed = 'config_changed';\n\n this.path_substep_completed = 'path_substep_completed';\n this.path_completed = 'path_completed';\n this.go_to_store_requested_evt = 'go_to_store_requested';\n\n this.resource_loaded_evt = 'resource_loaded';\n this.service_clicked_evt = 'service_clicked';\n this.unit_pos_updated_evt = 'unit_position_updated';\n\n this.floor_changed_evt = 'floor_changed';\n\n this.on_enter_floor_navigation = 'on_enter_floor_navigation';\n this.on_exit_floor_navigation = 'on_exit_floor_navigation';\n\n this.on_enter_floor_selection = 'on_enter_floor_selection';\n this.on_exit_floor_selection = 'on_exit_floor_selection';\n\n this.on_enter_outside_navigation = 'on_enter_outside_navigation';\n this.on_exit_outside_navigation = 'on_exit_outside_navigation';\n\n this.step_selected_evt = 'step_selected';\n }\n\n fire(event, payload)\n {\n const queue = this.queue[event];\n\n if (queue === undefined)\n {\n return;\n }\n let i = queue.length;\n while (i--)\n {\n queue[i](payload);\n }\n }\n\n on(event, callback)\n {\n if (typeof this.queue[event] === 'undefined')\n {\n this.queue[event] = [];\n }\n\n this.queue[event].push(callback);\n }\n\n fire_zoom_changed(zoom)\n {\n this.fire(this.zoom_changed_evt, zoom);\n }\n\n fire_store_selected(store_id)\n {\n this.fire(this.store_clickd_evt, store_id);\n }\n\n fire_point_selected(hit_data)\n {\n this.fire(this.point_selected_evt, hit_data);\n }\n\n fire_config_changed()\n {\n this.fire(this.config_changed);\n }\n\n fire_path_substep_completed(step_number)\n {\n this.fire(this.path_substep_completed, step_number);\n }\n\n fire_path_completed()\n {\n this.fire(this.path_completed);\n }\n\n fire_step_selected(step_index)\n {\n this.fire(this.step_selected_evt, step_index);\n }\n\n fire_go_to_store_requested(store_id)\n {\n this.fire(this.go_to_store_requested_evt, store_id);\n }\n\n fire_resource_loaded(resource)\n {\n this.fire(this.resource_loaded_evt, resource);\n }\n\n fire_service_clicked(service)\n {\n this.fire(this.service_clicked_evt, service);\n }\n\n fire_unit_position_updated(unit_data)\n {\n this.fire(this.unit_pos_updated_evt, unit_data);\n }\n\n fire_floor_switched(floor_id)\n {\n this.fire(this.floor_changed_evt, floor_id);\n }\n\n fire_on_enter_floor_navigation(state)\n {\n this.fire(this.on_enter_floor_navigation, state);\n }\n\n fire_on_exit_floor_navigation(state)\n {\n this.fire(this.on_exit_floor_navigation, state);\n }\n\n fire_on_enter_floor_selection(state)\n {\n this.fire(this.on_enter_floor_selection, state);\n }\n\n fire_on_exit_floor_selection(state)\n {\n this.fire(this.on_exit_floor_selection, state);\n }\n\n fire_on_enter_outside_navigation(state)\n {\n this.fire(this.on_enter_outside_navigation, state);\n }\n\n fire_on_exit_outside_navigation(state)\n {\n this.fire(this.on_exit_outside_navigation, state);\n }\n}\n\nconst event_manager = new EventManager();\nexport { event_manager as EventManager };\n","import { EventManager } from './EventManager';\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 EventManager.fire_resource_loaded({ name: name, value: resource });\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","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 { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n show()\n {\n }\n\n hide()\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 // Backward compatibility. It will be removed in future releases.\n this.update_transition(global_view_data, transition_progress, action_sequencer);\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n // Deprecated\n update_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 { 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.show();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.current_state.before_enter();\n\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 ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n\n this.view_change_subscribers = [];\n\n this.browser_title_suffix = '';\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n\n this.__set_views_opacities();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n this.transition_handler.go_to_state(v, skip);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n this.notify_view_change(view_name);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n subscribe_to_view_change(subscriber)\n {\n this.view_change_subscribers.push(subscriber);\n }\n\n notify_view_change(view_name)\n {\n for (let i = 0; i < this.view_change_subscribers.length; i++)\n {\n const subscriber = this.view_change_subscribers[i];\n subscriber.on_view_change(view_name);\n }\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n 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_view(view_name)\n {\n const view = this.get(view_name);\n\n this.transition_handler.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return this.transition_handler.current_state;\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_view_by_url(url)\n {\n console.warn('DEPRECATED. Use ViewManager.get_by_url instead');\n this.get_by_url(url);\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 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 __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(this.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\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","import { ResourceContainer } from '../ResourceContainer';\nimport { HTMLUtilities } from '../utilities/HTMLUtilities';\nimport { 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 let transition_data = ResourceContainer.get(`${name}_data`);\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n ViewManager.add_transitions(transitions);\n }\n\n show()\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 hide()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n load_html_images()\n {\n HTMLUtilities.load_images(this.container);\n }\n\n load_html_videos()\n {\n HTMLUtilities.load_videos(this.container);\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n }\n}\n\nexport { ApplicationView };\n","class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","import 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 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 { 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 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","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","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","/*\n\n A configuration class used as a singleton\n\n*/\n\nclass Configuration\n{\n init(parameters = {})\n {\n this.dpr = 1;\n\n this.app = {}; // for arbitrary use in end application\n }\n\n from_json(json)\n {\n\n }\n}\n\nconst configuration = new Configuration();\nexport { configuration as Configuration };\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","\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 { Configuration } from './Configuration';\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 NearestFilter,\n NoBlending,\n NoColorSpace,\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)\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 this._renderer.setPixelRatio(1);\n\n OScreen.dpr = Configuration.dpr;\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 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 this.resize_observer = new ResizeObserver(this.on_resize.bind(this));\n this.resize_observer.observe(this.canvas);\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)\n {\n for (const entry of entries)\n {\n OScreen.dpr = Configuration.dpr;\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: NoColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","import 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","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","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Configuration } from './Configuration';\nimport { Debug } from './Debug';\nimport { EventManager } from './EventManager';\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 Configuration.init();\n EventManager.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","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/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/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/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 { SceneManager } from '../SceneManager';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Configuration } from '../Configuration';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor()\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 = Configuration.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 { 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 { 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 { 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 { ViewManager } from './ViewManager';\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(ViewManager.transition_handler.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(ViewManager.transition_handler.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { Time } from './Time';\nimport { UI } from './UI';\nimport { Debug } from './Debug';\nimport { BaseApplication } from './BaseApplication';\nimport { ViewManager } from './view_components/ViewManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n ViewManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n ViewManager.fixed_update();\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n ViewManager.update();\n ViewComponentManager.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 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 this.frames_passed++;\n\n this.input.clear();\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 { OScreen } from './OScreen';\n\nclass Screen\n{\n init()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.init();\n }\n\n update_position(x, y)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_position(x, y);\n }\n\n update()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update();\n }\n\n update_size(width, height)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_size(width, height);\n }\n\n apply_pixel_density_v2(vector2)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density_v2(vector2);\n }\n\n apply_pixel_density(value)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density(value);\n }\n\n get_pixel_size()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.get_pixel_size();\n }\n\n get aspect_ratio()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.aspect_ratio;\n }\n}\n\nconst screen = new Screen();\nexport { screen as Screen };\n","\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","import { HTMLUtilities } from '../utilities/HTMLUtilities';\nimport { ViewComponentManager } from './ViewComponentManager';\n\nclass ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n\n load_html_images()\n {\n HTMLUtilities.load_images(this.container);\n }\n\n load_html_videos()\n {\n HTMLUtilities.load_videos(this.container);\n }\n}\n\nexport { ViewComponent };\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","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 '../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 { 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 { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, NearestFilter, NoColorSpace, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorScape: NoColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { 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\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\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 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 { 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 { 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 { 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.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('Error loading texture. Maybe the resource is not an image?', this.url, 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(function(e)\r\n {\r\n console.error(e);\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 { 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":["browser","async","this","browser_name","agent","window","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","xr","isSessionSupported","indexOf","opr","chrome","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","constructor","static","n","is_int","is_float","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","is_number","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","undefined","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","value","read","length","on_preloaded_finished","data","OMath","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","min","max","number","divisor","rgb","r","Math","round","toString","g","b","points","plane","projected_point","Vector3","points_on_plane","i","projectPoint","push","from","to","target","t","elements","lerp","x1","x2","abs","x","y","m","euclideanModulo","degrees","PI","radians","v","w","z","center","add","multiplyScalar","arr","col","floor","random","clamp","ActionSequencer","context","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","skip","get_duration","__play_clips","update","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","between","log","trigger","get_keyframes","channel_name","is_channel_redefined","initial","saturate","current","Infinity","distance","transitions_velocity","URLSearchParams","location","search","EasingFunctions","cos","sin","pow","sqrt","c4","ease_out_bounce","n1","d1","sign","ActionInterpolator","NumberInterpolator","super","view_context","app","set_app","ActionEvent","args","ViewContext","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","event_manager","init","queue","zoom_changed_evt","store_clickd_evt","point_selected_evt","config_changed","path_substep_completed","path_completed","go_to_store_requested_evt","resource_loaded_evt","service_clicked_evt","unit_pos_updated_evt","floor_changed_evt","on_enter_floor_navigation","on_exit_floor_navigation","on_enter_floor_selection","on_exit_floor_selection","on_enter_outside_navigation","on_exit_outside_navigation","step_selected_evt","fire","event","payload","on","callback","fire_zoom_changed","zoom","fire_store_selected","store_id","fire_point_selected","hit_data","fire_config_changed","fire_path_substep_completed","step_number","fire_path_completed","fire_step_selected","step_index","fire_go_to_store_requested","fire_resource_loaded","resource","fire_service_clicked","service","fire_unit_position_updated","unit_data","fire_floor_switched","floor_id","fire_on_enter_floor_navigation","fire_on_exit_floor_navigation","fire_on_enter_floor_selection","fire_on_exit_floor_selection","fire_on_enter_outside_navigation","fire_on_exit_outside_navigation","resources","EventManager","get_resource","HTMLUtilities","container","images","image","dataset","src","image_objects","image_object","videos","video","iframes","iframe","selector","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","Vector2","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewState","start","show","hide","before_enter","on_enter","before_update","fixed_update","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_transition","update_exit_transition","before_exit","on_exit","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","view_manager","views","transition_handler","view_change_subscribers","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","__change_browser_title","notify_view_change","go_to_scene","scene_name","next_view","transition_view","set_next_view","subscribe_to_view_change","subscriber","on_view_change","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_view_by_url","get_by_url","history","pushState","title","__capitalize","document","set_opacity","string","aux_string","toUpperCase","__snake_to_whitespace","group","ApplicationView","ResourceContainer","ViewManager","classList","remove","load_html_images","load_images","load_html_videos","load_videos","style","opacity","BaseApplication","on_post_start","on_post_render","on_pre_render","on_frame_end","BaseRender","render","renderer","resize","dispose","BaseShaderMaterial","ShaderMaterial","vert","frag","uniforms","vertexShader","basic_vert","fragmentShader","basic_frag","_Color","Color","BlitMaterial","frag_shader","vert_shader","defines","_MainTex","_Resolution","_TargetResolution","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","_SecondTex","set_add_texture","tex","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","camera_manager","_current","_spectator","camera","spectator","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","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","configuration","parameters","dpr","from_json","json","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","ease_in_out_cubic","animate","AxisHelper","Object3D","scale","blue_points","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","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","fillStyle","fillRect","clear","clearRect","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","dst","src_texture","isWebGLRenderTarget","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","Configuration","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","resize_observer","ResizeObserver","on_resize","observe","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","compile","target_scene","promise","compileAsync","render_scene","overrideMaterial","readback_RT","buffer","readRenderTargetPixels","clear_stencil","setClearColor","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","NoColorSpace","type","FloatType","stencilBuffer","depthBuffer","output","Float32Array","NormalMaterial","DebugNormalsRender","Graphics","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","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","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","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","degToRad","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","project_points_on_plane","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","Debug","render_loop","SSAOMaterial","_InverseProjMatrix","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","SSAOComposeMaterial","_AO","DisplayNormalTextureMaterial","depth_normals_vert","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","ssao_mat","ssao_compose_mat","debug_normals","ssaa","use_ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","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","TOrthographicCamera","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentManager","setAnimationLoop","screen","SimpleTextDrawer","text_margin","text_size","globalAlpha","textBaseline","textAlign","fillText","ViewComponent","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","source","apply","array","items_left_count","closest_point","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","ImageUtilities","getImageData","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","item","Array","isArray","sources","is_object","merge_deep","nodeType","attributes","attribute","nodeName","nodeValue","hasChildNodes","childNodes","xml_to_json","old","StringUtilities","hexValues","hex","words","substr","charAt","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Grid","derivatives","plane_geometry","convert_to_non_indexed_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","remove_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","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","colorScape","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","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","GLTFLoader","TGLTFLoader","GLTFDRACOLoader","setDRACOLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","hdr","JSONLoader","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","RGBETextureLoader","RGBELoader","TextLoader","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","load_with_old_method","load_with_new_method","Texture","Image","onload","SRGBColorSpace","onerror","original_url","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","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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"}
|