ohzi-core 11.1.2 → 11.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.module.js +1 -1
- package/build/index.module.js.map +1 -1
- package/package.json +2 -2
- package/src/Initializer.js +0 -2
- package/src/ResourceContainer.js +0 -3
- package/src/editor/ObjectManipulator.js +1 -9
- package/src/index.js +1 -2
- package/types/index.d.ts +74 -74
- package/src/EventManager.js +0 -151
- package/types/EventManager.d.ts +0 -44
package/build/index.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ShaderMaterial as e,Vector2 as t,NoBlending as s,AlwaysDepth as i,Color as r,Clock as n,CanvasTexture as o,UVMapping as a,ClampToEdgeWrapping as _,NearestFilter as l,Object3D as h,Vector3 as c,LineBasicMaterial as u,BufferGeometry as d,Line as p,Scene as m,Mesh as g,BoxGeometry as f,MeshBasicMaterial as v,SphereGeometry as x,CylinderGeometry as w,ConeGeometry as b,PerspectiveCamera as y,PlaneGeometry as T,Vector4 as M,Box3 as S,Box3Helper as z,CatmullRomCurve3 as F,OrthographicCamera as A,WebGLRenderTarget as R,WebGLRenderer as C,RGBAFormat as k,LinearSRGBColorSpace as P,FloatType as D,DataTexture as L,BufferAttribute as U,Sphere as j,Plane as O,Line3 as I,Quaternion as N,Matrix4 as B,Ray as q,RepeatWrapping as V,LinearFilter as Y,Skeleton as G,DoubleSide as E,LinearMipMapLinearFilter as W,Box2 as X,InstancedBufferGeometry as Q,Float32BufferAttribute as $,InstancedBufferAttribute as H,DynamicDrawUsage as Z,HalfFloatType as J,Points as K,Texture as ee,SRGBColorSpace as te,NoColorSpace as se,PositionalAudio as ie,Audio as re,AudioContext as ne,CubeTextureLoader as oe,FileLoader as ae,UnsignedByteType as _e}from"three";import*as le from"three/examples/jsm/utils/BufferGeometryUtils.js";export{le as BufferGeometryUtils};import{ColladaLoader as he}from"three/examples/jsm/loaders/ColladaLoader.js";import{FontLoader as ce}from"three/examples/jsm/loaders/FontLoader.js";import{GLTFLoader as ue}from"three/examples/jsm/loaders/GLTFLoader.js";import{HDRCubeTextureLoader as de}from"three/examples/jsm/loaders/HDRCubeTextureLoader.js";import{OBJLoader as pe}from"three/examples/jsm/loaders/OBJLoader.js";import{RGBELoader as me}from"three/examples/jsm/loaders/RGBELoader.js";class ge{on_post_start(){}on_enter(){}on_exit(){}before_update(){}update(){}fixed_update(){}on_post_render(){}on_pre_render(){}on_frame_end(){}dispose(){}}class fe extends e{constructor(e,r,n){super({uniforms:{_MainTex:{value:null},_Resolution:{value:new t(0,0)},_TargetResolution:{value:new t(0,0)}},defines:n||{},vertexShader:r||"#define GLSLIFY 1\nvarying vec2 vUv;void main(){gl_Position=vec4(uv*2.0-1.0,1.0,1.0);vUv=uv;}",fragmentShader:e||"#define GLSLIFY 1\nuniform sampler2D _MainTex;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv);}",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i})}}class ve extends fe{constructor(e){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform sampler2D _SecondTex;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv);gl_FragColor+=texture2D(_SecondTex,vUv);}"),this.uniforms._SecondTex={value:void 0}}set_add_texture(e){this.uniforms._SecondTex.value=e}}var xe="#define GLSLIFY 1\nvarying vec2 vUv;void main(){vec3 pos=position;mat4 MVP=projectionMatrix*modelViewMatrix;gl_Position=MVP*vec4(pos,1.0);vUv=uv;}",we="#define GLSLIFY 1\nuniform vec3 _Color;void main(){gl_FragColor=vec4(_Color,1.0);}";class be extends e{constructor(e,t,s){super({vertexShader:e||xe,fragmentShader:t||we,uniforms:s||{_Color:{value:new r("#FF0000")}}})}}class ye extends fe{constructor(e){super("#define GLSLIFY 1\nvarying vec2 vUv;uniform sampler2D blurTexture1;uniform sampler2D blurTexture2;uniform sampler2D blurTexture3;uniform sampler2D blurTexture4;uniform sampler2D blurTexture5;uniform float bloomStrength;uniform float bloomRadius;uniform float bloomFactors[NUM_MIPS];uniform vec3 bloomTintColors[NUM_MIPS];float lerpBloomFactor(const in float factor){float mirrorFactor=1.2-factor;return mix(factor,mirrorFactor,bloomRadius);}void main(){gl_FragColor=bloomStrength*(lerpBloomFactor(bloomFactors[0])*vec4(bloomTintColors[0],1.0)*texture2D(blurTexture1,vUv)+lerpBloomFactor(bloomFactors[1])*vec4(bloomTintColors[1],1.0)*texture2D(blurTexture2,vUv)+lerpBloomFactor(bloomFactors[2])*vec4(bloomTintColors[2],1.0)*texture2D(blurTexture3,vUv)+lerpBloomFactor(bloomFactors[3])*vec4(bloomTintColors[3],1.0)*texture2D(blurTexture4,vUv)+lerpBloomFactor(bloomFactors[4])*vec4(bloomTintColors[4],1.0)*texture2D(blurTexture5,vUv));}",void 0,{NUM_MIPS:e}),this.uniforms._MainTex={value:void 0},this.uniforms._BlurredTex={value:void 0},this.uniforms._BloomStrength={value:1},this.uniforms.blurTexture1={value:null},this.uniforms.blurTexture2={value:null},this.uniforms.blurTexture3={value:null},this.uniforms.blurTexture4={value:null},this.uniforms.blurTexture5={value:null},this.uniforms.bloomStrength={value:1},this.uniforms.bloomFactors={value:[1,.8,.6,.4,.2]},this.uniforms.bloomRadius={value:0};const t=[new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF")];this.uniforms.bloomTintColors={value:t}}set_RT_0(e){this.uniforms.blurTexture1.value=e}set_RT_1(e){this.uniforms.blurTexture2.value=e}set_RT_2(e){this.uniforms.blurTexture3.value=e}set_RT_3(e){this.uniforms.blurTexture4.value=e}set_RT_4(e){this.uniforms.blurTexture5.value=e}set_bloom_strength(e){this.uniforms.bloomStrength.value=e}set_bloom_radius(e){this.uniforms.bloomRadius.value=e}set_tint_color_0(e){this.uniforms.bloomTintColors.value[0].set(e)}set_tint_color_1(e){this.uniforms.bloomTintColors.value[1].set(e)}set_tint_color_2(e){this.uniforms.bloomTintColors.value[2].set(e)}set_tint_color_3(e){this.uniforms.bloomTintColors.value[3].set(e)}set_tint_color_4(e){this.uniforms.bloomTintColors.value[4].set(e)}}class Te{constructor(){}render(){}on_enter(e,t){}on_exit(e,t){}resize(){}dispose(){}}const Me=new class{init(e,t){switch(this.browser_name="",this.agent=navigator.userAgent.toLowerCase(),this.vr_browser_keywords=["oculusbrowser","oculus","vive","rift","windowsmr","cardboard","daydream","wolvic"],this.vr_browser_name=this.vr_browser_keywords.find((e=>this.agent.includes(e))),this.has_web_xr_support="xr"in navigator,!0){case void 0!==this.vr_browser_name&&this.has_web_xr_support:this.browser_name=this.vr_browser_name;break;case this.agent.indexOf("edge")>-1:this.browser_name="edge_ie";break;case this.agent.indexOf("edg")>-1:this.browser_name="edge_chromium";break;case this.agent.indexOf("opr")>-1&&!!e:this.browser_name="opera";break;case this.agent.indexOf("chrome")>-1&&!!t:this.browser_name="chrome";break;case this.agent.indexOf("trident")>-1:this.browser_name="iexplorer";break;case this.agent.indexOf("firefox")>-1:this.browser_name="firefox";break;case this.agent.indexOf("safari")>-1:this.browser_name="safari";break;default:this.browser_name="other"}this.version=this.get_version()}get name(){return this.browser_name}get is_safari(){return"safari"===this.browser_name}get is_chrome(){return"chrome"===this.browser_name}get is_edge(){return"edge_ie"===this.browser_name}get is_edge_chromium(){return"edge_chromium"===this.browser_name}get is_vr(){return this.vr_browser_keywords.includes(this.browser_name)}get has_webm(){return!!(this.is_chrome||this.is_firefox||this.is_edge_chromium)}get has_hvec(){return this.is_safari}get preferred_video_extension(){return this.has_webm?"webm":this.has_hvec?"hvec.mp4":"mp4"}get_version(){const e=navigator.userAgent;let t="",s=0,i=e.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(i[1])&&(t=/\brv[ :]+(\d+)/g.exec(e)||[],s="IE "+(t[1]||"")),"Chrome"===i[1]&&(t=e.match(/\b(OPR|Edge)\/(\d+)/),null!=t&&(s=t.slice(1).join(" ").replace("OPR","Opera"))),i=i[2]?[i[1],i[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(t=e.match(/version\/(\d+(\.\d+)?)/i))&&i.splice(1,1,t[1]),s=i.join(" "),Number(s.split(" ")[1])}};class Se{constructor(){}static is_int(e){return Number(e)===e&&e%1==0}static is_float(e){return Number(e)===e&&e%1!=0}static is_number(e){return this.is_int(e)||this.is_float(e)}static is_json(e){try{JSON.parse(e)}catch(e){return!1}return!0}}class ze{constructor(e,t,s=1){this.resource_id=e,this.url=t,this.loaded_bytes=0,this.total_bytes=s,this.has_finished=!1,this.has_error=!1,this.error_message="none"}__update_downloaded_bytes(e,t){e=Se.is_number(e)?e:1,t=Se.is_number(t)?t:1,this.loaded_bytes=e,t>0&&(this.total_bytes=t),this.loaded_bytes>this.total_bytes&&console.warn("Total bytes is smaller than loaded ones. Please set total bytes by hand to:",this.url)}__loading_ended(){this.has_finished=!0}__set_error(e){this.has_error=!0,this.error_message=e}print_error(){console.error("Error while loading "+this.resource_id+"\n\t path: "+this.url+"\n\t\t"+this.error_message)}load(e){if(void 0===e.resources_by_url[this.url]){const t=Me.is_safari?"no-cache":"default";fetch(this.url,{method:"GET",mode:"cors",cache:t,credentials:"same-origin",redirect:"follow"}).then(this.on_progress.bind(this,e)).catch(this.__on_error.bind(this))}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}async on_progress(e,t){const s=t.clone(),i=t.body.getReader(),r=+t.headers.get("Content-Length");let n=0;for(;;){const{done:e,value:t}=await i.read();if(e)break;n+=t.length,this.__update_downloaded_bytes(n,r)}this.on_preloaded_finished(e,s)}on_preloaded_finished(e,t){}__on_error(e){console.error(e)}}const Fe=new class{constructor(){this.views=[],this.main_to_worker=void 0,this.browser_title_suffix=""}go_to_view(e,t=!0,s=!1){const i=this.get(e);t&&(this.__change_browser_url(i.url),this.__change_browser_title(i.url)),this.main_to_worker.push("go_to_view_controller",[e,s])}go_to_scene(e,t=!1,s=!1){const i=this.get("transition");i.set_next_view_name(e),this.go_to_view(i.name,t,s)}set_browser_title_suffix(e){this.browser_title_suffix=e}get(e){for(let t=0;t<this.views.length;t++)if(this.views[t].name===e)return this.views[t];console.error("[ViewManager.get] no view found for: ",e)}get_by_url(e){for(let t=0;t<this.views.length;t++)if(this.views[t].url===e)return this.views[t];console.error("[ViewManager.get_by_url] no view found for: ",e)}register_view(e){this.views.push(e)}set_main_to_worker(e){this.main_to_worker=e}__change_browser_url(e){window.history.pushState("","",e)}__change_browser_title(e){const t=this.__capitalize(e);document.title=t?`${t} | ${this.browser_title_suffix}`:this.browser_title_suffix}__capitalize(e){let t=e.toUpperCase().replace("/","");return t=this.__snake_to_whitespace(t),t}__snake_to_whitespace(e){return e.replace(/([-_][A-Z])/g,(e=>e.replace("-"," ").replace("_"," ")))}};class Ae{constructor(e){this.name=e}start(){}before_enter(){}on_enter(){}before_update(){}update(){}fixed_update(){}update_enter_transition(e,t,s){}update_exit_transition(e,t,s){}before_exit(){}on_exit(){}}class Re extends Ae{constructor({name:e,url:t,container:s}){super(e),this.container=s,this.url=t,Fe.register_view(this)}before_enter(){this.container.classList.add("before_enter"),this.container.classList.remove("before_exit"),this.container.classList.remove("hidden")}on_enter(){this.container.classList.remove("before_enter"),this.container.classList.remove("before_exit"),this.container.classList.remove("hidden")}before_exit(){this.container.classList.add("before_exit"),this.container.classList.remove("before_enter"),this.container.classList.remove("hidden")}on_exit(){this.container.classList.add("hidden"),this.container.classList.remove("before_enter"),this.container.classList.remove("before_exit")}set_opacity(e){this.container.style.opacity=e}}class Ce{constructor(e,t,s){this.name=e,this.method=t,this.args=s}trigger(){ViewApi.application[this.name][this.method](...this.args.split(","))}}class ke{constructor(){}static linear_map(e,t,s,i,r){return(e-t)/(s-t)*(r-i)+i}static between(e,t,s){return e>=t&&e<=s}static mod(e,t){return(e%t+t)%t}static rgb_to_hex(e){return e.r=Math.round(255*e.r).toString(16),e.g=Math.round(255*e.g).toString(16),e.b=Math.round(255*e.b).toString(16),1===e.r.length&&(e.r="0"+e.r),1===e.g.length&&(e.g="0"+e.g),1===e.b.length&&(e.b="0"+e.b),"#"+e.r+e.g+e.b}static project_points_on_plane(e,t){const s=e[0].clone();s.set(0,0,0);const i=[];for(let r=0;r<e.length;r++)t.projectPoint(e[r],s),i.push(s.clone());return i}static matrix4_lerp(e,t,s,i){for(let r=0;r<16;r++)s.elements[r]=this.lerp(e.elements[r],t.elements[r],i)}static equals(e,t){return Math.abs(e-t)<1e-6}static lerp(e,t,s){return(1-s)*e+s*t}static clamp(e,t,s){return Math.max(t,Math.min(s,e))}static euclideanModulo(e,t){return(e%t+t)%t}static pingpong(e,t=1){return t-Math.abs(ke.euclideanModulo(e,2*t)-t)}static degToRad(e){return e*(Math.PI/180)}static radToDeg(e){return e*(180/Math.PI)}static deg_to_rad(e){return e*(Math.PI/180)}static rad_to_deg(e){return e*(180/Math.PI)}static perspective_divide(e){return e.x/=e.w,e.y/=e.w,e.z/=e.w,e}static points_average(e){const t=e[0].clone();for(let s=1;s<e.length;s++)t.add(e[s]);return t.multiplyScalar(1/e.length),t}static get_random_color(){const e=[0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f"];let t="#";return t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t}static saturate(e){return ke.clamp(e,0,1)}}class Pe{constructor(e={},t){this.previous_elapsed_time=-1e-5,this.elapsed_time=-1e-5,this.playback_speed=this.__get_playback_speed(t),this.playing=!0,this.action_events=[],this.context=e,this.initial_context=JSON.parse(JSON.stringify(e)),this.tmp_t=0,this.channels={};const s=Object.keys(e);for(let e=0;e<s.length;e++)this.channels[s[e]]=[];this.duration=0}play(){this.playing=!0}stop(){this.playing=!1}reset(){this.elapsed_time=-1e-5}skip(){const e=this.get_duration();this.__play_clips(this.elapsed_time,e+1e-4),this.elapsed_time=e}update(e){this.playing&&(this.previous_elapsed_time=this.elapsed_time,this.elapsed_time+=e*this.playback_speed,this.__play_clips(this.previous_elapsed_time,this.elapsed_time))}set_progress(e){this.previous_elapsed_time=this.elapsed_time,this.elapsed_time=ke.clamp(e,0,this.duration),this.__play_clips(this.elapsed_time,this.elapsed_time)}set_normalized_progress(e){this.previous_elapsed_time=this.elapsed_time,this.elapsed_time=ke.clamp(e,0,1)*this.duration,this.__play_clips(this.elapsed_time,this.elapsed_time)}get_progress(){return ke.clamp(this.elapsed_time/this.get_duration(),0,1)}is_finished(){return this.elapsed_time>this.get_duration()}add_action_event(e,t){this.action_events.push({trigger_time:e,action:t}),this.duration=Math.max(this.duration,e)}add_action_interpolator(e,t,s,i=!1){if(i){const e=this.channels[s.attribute_name];void 0===e&&console.error(`${s.attribute_name} missing in initial state data.`),0===e.length?s.from=this.initial_context[s.attribute_name]:s.from=e[e.length-1].interpolator.to}const r={from:e,to:t,interpolator:s};this.duration=Math.max(this.duration,t),this.channels[s.attribute_name].push(r)}get_current_target_value(e){const t=this.__get_current_keyframe(e,this.elapsed_time);return this.elapsed_time<t.from?t.interpolator.evaluate(0):t.interpolator.evaluate(1)}get_current_starting_value(e){return this.__get_current_keyframe(e,this.elapsed_time).interpolator.evaluate(0)}get_current_progress(e){const t=this.__get_current_keyframe(e,this.elapsed_time),s=this.__linear_map_01(this.elapsed_time,t.from,t.to);return t.interpolator.easing_function(s)}get_duration(){return this.duration}__play_clips(e,t){this.elapsed_time>this.previous_elapsed_time&&this.__play_events(this.previous_elapsed_time,this.elapsed_time);const s=Object.keys(this.initial_context);for(let t=0;t<s.length;t++){const i=s[t],r=this.__get_current_keyframe(i,e);this.context[i]=this.evaluate_keyframe(r,e)}}__play_events(e,t){for(let s=0;s<this.action_events.length;s++){const i=this.action_events[s].trigger_time;ke.between(i,e,t)&&(console.log("Play event: "+this.action_events[s].action.constructor.name+" at "+this.action_events[s].trigger_time),this.action_events[s].action.trigger())}}evaluate_keyframe(e,t){return this.tmp_t=this.__linear_map_01(t,e.from,e.to),e.interpolator.evaluate(ke.clamp(this.tmp_t,0,1))}get_keyframes(e){return this.channels[e]}is_channel_redefined(e){for(let t=0;t<this.channels[e].length;t++){if(this.channels[e][t].interpolator.initial)return!1}return!0}__linear_map_01(e,t,s){return ke.saturate((e-t)/(s-t)*1+0)}__get_current_keyframe(e,t){let s;const i=this.channels[e];for(let e=0;e<i.length;e++){const r=i[e];if(t>=r.from&&t<=r.to)return s=r,s}let r=1/0;for(let e=0;e<i.length;e++){const n=i[e],o=Math.abs(n.to-t);o<r&&(s=n,r=o)}return s}__get_playback_speed(e){return e?Number(e):1}}class De{constructor(){}static linear(e){return e}static triangular(e){return 1-Math.abs(2*e%2-1)}static ease_in_sine(e){return 1-Math.cos(3.1415926*e/2)}static ease_out_sine(e){return Math.sin(3.1415926*e/2)}static ease_in_out_sine(e){return-(Math.cos(3.1415926*e)-1)/2}static ease_in_cubic(e){return e*e*e}static ease_out_cubic(e){return 1-Math.pow(1-e,3)}static ease_in_out_cubic(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}static ease_in_quad(e){return e*e}static ease_out_quad(e){return 1-(1-e)*(1-e)}static ease_in_out_quad(e){return e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2}static ease_in_quart(e){return e*e*e*e}static ease_out_quart(e){return 1-Math.pow(1-e,4)}static ease_in_out_quart(e){return e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2}static ease_in_quint(e){return e*e*e*e*e}static ease_out_quint(e){return 1-Math.pow(1-e,5)}static ease_in_out_quint(e){return e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2}static ease_in_expo(e){return 0===e?0:Math.pow(2,10*e-10)}static ease_out_expo(e){return 1===e?1:1-Math.pow(2,-10*e)}static ease_in_out_expo(e){return 0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2}static ease_in_circ(e){return 1-Math.sqrt(1-Math.pow(e,2))}static ease_out_circ(e){return Math.sqrt(1-Math.pow(e-1,2))}static ease_in_out_circ(e){return e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2}static ease_in_back(e){return 2.7015*e*e*e-1.7015*e*e}static ease_out_back(e){return 1+2.7015*Math.pow(e-1,3)+1.7015*Math.pow(e-1,2)}static ease_in_out_back(e){return e<.5?Math.pow(2*e,2)*(7.189819*e-2.5949095)/2:(Math.pow(2*e-2,2)*(3.5949095*(2*e-2)+2.5949095)+2)/2}static ease_in_elastic(e){const t=2*Math.PI/3;return 0===e?0:1===e?1:-Math.pow(2,10*e-10)*Math.sin((10*e-10.75)*t)}static ease_out_elastic(e){return 0===e?0:1===e?1:Math.pow(2,-10*e)*Math.sin(2.094395*(10*e-.75))+1}static ease_in_out_elastic(e){return 0===e?0:1===e?1:e<.5?-Math.pow(2,20*e-10)*Math.sin(1.3962633*(20*e-11.125))/2:Math.pow(2,-20*e+10)*Math.sin(1.3962633*(20*e-11.125))/2+1}static ease_in_bounce(e){return 1-this.ease_out_bounce(1-e)}static ease_out_bounce(e){const t=7.5625,s=2.75;return e<1/s?t*e*e:e<2/s?t*(e-=1.5/s)*e+.75:e<2.5/s?t*(e-=2.25/s)*e+.9375:t*(e-=2.625/s)*e+.984375}static ease_in_out_bounce(e){return e<.5?(1-this.ease_out_bounce(1-2*e))/2:(1+this.ease_out_bounce(2*e-1))/2}static heartbeat(e){return 1-Math.pow(Math.abs(Math.sin(e+1)),63)*Math.sign(Math.sin(e))*Math.sin(e+1.5+1)*.8}}class Le{constructor(e="linear"){this.easing_function=void 0,this.easing_function="string"==typeof e?De[e]:e}update(e,t){}}class Ue extends Le{constructor(e,t=0,s=1,i=!1,r="linear"){super(r),this.attribute_name=e,this.from=t,this.to=s,this.initial=i}update(e,t){e[this.attribute_name]=ke.lerp(this.from,this.to,this.easing_function(t))}evaluate(e){return ke.lerp(this.from,this.to,this.easing_function(e))}}class je{constructor(){}parse(e){const t=(new DOMParser).parseFromString(e,"text/xml").querySelectorAll("mxGeometry"),s=[],i=[];for(let e=0;e<t.length;e++){const r=t[e],n=r.parentElement,o=n.getAttribute("value"),a=this.get_node_x_position(r)/100,_=parseFloat(r.getAttribute("width"))/100;if(n.getAttribute("style").includes("rhombus;")){const e=o.split("."),t=e[0],s=e[1];i.push({name:t,method:s,at_time:a+.5*_})}if(n.getAttribute("style").includes("rounded=0;")&&!n.getAttribute("style").includes("text;")&&""!==o&&!o.includes(" ")){const e=o.split("="),t=e[0],i=e[1].split("--"),r=parseFloat(i[0]),n=i[1];2!==e.length&&console.error("DrawIO data is malformed:",o),2!==i.length&&console.error("DrawIO data is malformed:",o),s.push({attribute_name:t,from_time:a,to_time:a+_,to_value:r,easing_function:n})}}return s.sort(((e,t)=>e.from_time-t.from_time)),{animation_tracks:s,triggers:i}}get_node_x_position(e){const t=e.getAttribute("x");return null===t?0:parseFloat(t)}}class Oe{constructor(e){this.default_state_data=e}from_animation_sheet(e,t,s,i){s=s||this.default_state_data;const r=e.animation_tracks,n=e.triggers,o=this.state_to_tracks(this.default_state_data,this.get_longest_time(e.animation_tracks));for(let e=0;e<o.length;e++)void 0===r.find((t=>t.attribute_name===o[e].attribute_name))&&r.push(o[e]);const a=new Pe(t,i);for(let e=0;e<r.length;e++){const s=r[e],i=new Ue(s.attribute_name,t[s.attribute_name],s.to_value,s.initial,s.easing_function);a.add_action_interpolator(s.from_time,s.to_time,i,!0)}for(let e=0;e<n.length;e++){const t=n[e],s=new Ce(t.name,t.method,t.args);a.add_action_event(t.at_time,s)}return a}state_to_tracks(e,t){const s=[],i=Object.keys(e);for(let r=0;r<i.length;r++)s.push({attribute_name:i[r],from_time:0,to_time:t<1?t:1,to_value:e[i[r]],initial:!0,easing_function:"ease_in_out_cubic"});return s}from_draw_io(e,t){const s=(new je).parse(e),i=s.animation_tracks,r=s.triggers,n=new Pe(t);for(let e=0;e<i.length;e++){const s=i[e],r=new Ue(s.attribute_name,t[s.attribute_name],s.to_value,s.initial,s.easing_function);n.add_action_interpolator(s.from_time,s.to_time,r,!0)}for(let e=0;e<r.length;e++){const t=r[e],s=new Ce(t.name,t.method);n.add_action_event(t.at_time,s)}return n}get_longest_time(e){let t=-1;for(let s=0;s<e.length;s++){const i=e[s].to_time;t=i>t?i:t}return t}}class Ie{constructor(){this.transitions=[],this.default_state_data={},this.transitions_velocity=1}get(e,t,s){for(let i=0;i<this.transitions.length;i++)if(this.transitions[i].from===e&&this.transitions[i].to===t){return new Oe(this.default_state_data).from_animation_sheet(this.transitions[i].data,s,this.transitions_velocity)}for(let e=0;e<this.transitions.length;e++)if(this.transitions[e].to===t&&void 0===this.transitions[e].from){return new Oe(this.default_state_data).from_animation_sheet(this.transitions[e].data,s,this.transitions_velocity)}console.error("TransitionTable.get no data found for: ",e,t)}add_transitions(e){for(let t=0;t<e.length;t++)this.transitions.push(e[t])}set_transitions(e){this.transitions=e}set_default_state_data(e){this.default_state_data=e}set_transitions_velocity(e){this.transitions_velocity=e}}const Ne=new class{constructor(){this.__delta_buffer=[.016,.016,.016,.016,.016,.016,.016,.016,.016,.016]}init(){this.___time=new n,this.__delta_time=0,this.__smooth_delta_time=0,this.__elapsed_time=0,this.__allocated_time=new t(0,0),this.__frame_interpolation_t=0,this.fixed_delta_time=1/30}get elapsed_time(){return this.__elapsed_time}get delta_time(){return this.__delta_time}get smooth_delta_time(){return this.__smooth_delta_time}get shader_time(){return this.__allocated_time.x=this.delta_time,this.__allocated_time.y=this.elapsed_time,this.__allocated_time}get frame_interpolation(){return this.__frame_interpolation_t}get fdt(){return this.fixed_delta_time}get dt(){return this.delta_time}get sdt(){return this.smooth_delta_time}to_json(){return{elapsed_time:this.elapsed_time,delta_time:this.delta_time,smooth_delta_time:this.smooth_delta_time}}__set_frame_interpolation(e){this.__frame_interpolation_t=e}__update(){this.__delta_time=this.___time.getDelta(),this.__elapsed_time=this.___time.getElapsedTime(),this.__delta_buffer.shift(),this.__delta_buffer.push(this.delta_time<.32?this.delta_time:.032),this.__calculate_smooth_delta_time()}__calculate_smooth_delta_time(){this.__smooth_delta_time=0;for(let e=0;e<this.__delta_buffer.length;e++)this.__smooth_delta_time+=this.__delta_buffer[e];this.__smooth_delta_time=this.__smooth_delta_time/this.__delta_buffer.length}};class Be{constructor(e){this.last_state=new Ae,this.current_state=new Ae,this.default_state_data={},this.current_state_data={},this.transition_table=e,this.transitioning=!1}go_to_state(e,t=!1){this.transitioning&&this.__exit_last_state(),this.last_state=this.current_state,this.current_state=e,this.last_state.before_exit(),this.current_state.before_enter(),this.action_sequencer=this.transition_table.get(this.last_state.name,this.current_state.name,this.current_state_data),this.action_sequencer.play(),this.transitioning=!0,t&&(this.action_sequencer.skip(),this.update())}update(){this.transitioning?(this.__update_transitions(),this.action_sequencer.is_finished()&&(this.transitioning=!1,this.__update_transitions(),this.__exit_last_state(),this.current_state.on_enter())):this.current_state.update()}before_update(){this.current_state.before_update()}fixed_update(){this.current_state.fixed_update()}set_state(e){this.current_state=e}set_default_state_data(e){Object.assign(this.default_state_data,e),Object.assign(this.current_state_data,e)}__update_transitions(){this.action_sequencer.update(Ne.delta_time),this.last_state.update_exit_transition(this.current_state_data,this.action_sequencer.get_progress(),this.action_sequencer),this.current_state.update_enter_transition(this.current_state_data,this.action_sequencer.get_progress(),this.action_sequencer)}__exit_last_state(){this.last_state.on_exit()}}const qe=new class{constructor(){this.transition_table=new Ie,this.transition_handler=new Be(this.transition_table)}get action_sequencer(){return this.transition_handler.action_sequencer}get current_state_data(){return this.transition_handler.current_state_data}before_update(){this.transition_handler.before_update()}update(){this.transition_handler.update()}fixed_update(){this.transition_handler.fixed_update()}add_transitions(e){this.transition_table.add_transitions(e)}set_transitions(e){this.transition_table.set_transitions(e)}set_default_state_data(e){this.transition_table.set_default_state_data(e),this.transition_handler.set_default_state_data(e)}set_transitions_velocity(e){this.transition_table.set_transitions_velocity(e)}};class Ve{constructor(){this.view_controllers=[]}go_to_view_controller(e,t=!1){const s=this.get(e);qe.transition_handler.go_to_state(s,t)}update(){this.__set_view_controllers_opacities()}register_view_controller(e){this.view_controllers.push(e)}set_view_controller(e){const t=this.get(e);qe.transition_handler.set_state(t)}get_current_view_controller(){return qe.transition_handler.current_state}get(e){for(let t=0;t<this.view_controllers.length;t++)if(this.view_controllers[t].name===e)return this.view_controllers[t];console.error("[ViewControllerManager.get] no view controller found for: ",e)}__set_view_controllers_opacities(){for(let e=0;e<this.view_controllers.length;e++)this.view_controllers[e].set_opacity(qe.transition_handler.current_state_data)}__capitalize(e){let t=e.toUpperCase().replace("/","");return t=this.__snake_to_whitespace(t),t}__snake_to_whitespace(e){return e.replace(/([-_][A-Z])/g,(e=>e.replace("-"," ").replace("_"," ")))}}const Ye=new class extends Ve{};const Ge=new class{constructor(){this.methods=[],this.args=[]}push(e,t=[]){this.methods.push(e),this.args.push(t)}clear(){this.methods=[],this.args=[]}};class Ee extends Ae{constructor({name:e,url:t,transition_data:s}){super(e),this.url=t;const i=[{to:e,data:s=s||{animation_tracks:[],triggers:[]}}];this.current_opacity=0,Ye.register_view_controller(this),qe.add_transitions(i)}before_enter(){Ge.push(`${this.name}_view.before_enter`)}on_enter(){Ge.push(`${this.name}_view.on_enter`)}before_exit(){Ge.push(`${this.name}_view.before_exit`)}on_exit(){Ge.push(`${this.name}_view.on_exit`)}update(){Ge.push(`${this.name}_view.update`)}fixed_update(){}update_enter_transition(e,t,s){Ge.push(`${this.name}_view.update_enter_transition`,[e,t])}update_exit_transition(e,t,s){Ge.push(`${this.name}_view.update_exit_transition`,[e,t])}set_opacity(e){const t=e[`${this.name}_opacity`];(this.current_opacity>t||this.current_opacity<t)&&(this.current_opacity=t,Ge.push(`${this.name}_view.set_opacity`,[t]))}}const We=new class{init(){this._current=void 0,this._spectator=void 0}set current(e){this._current=e}get current(){return this._current}set spectator(e){this._spectator=e}get spectator(){return this._spectator}};class Xe{constructor(e){this.uses_dynamic_font=e,this.__textHeight=null,this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d")}getFontHeight(e="Arial"){if(null==this.__textHeight||this.uses_dynamic_font){const t=document.getElementsByTagName("body")[0],s=document.createElement("div"),i=document.createTextNode("MÉqgOLAKTAL");s.appendChild(i),s.setAttribute("style",`font:${e};position:absolute;top:0;left:0`),t.appendChild(s),this.__textHeight=s.offsetHeight,t.removeChild(s)}return this.__textHeight}get_text_size(e,s="24px Arial"){const i=new t;return this.ctx.font=s,i.x=Math.ceil(this.ctx.measureText(e).width),i.y=Math.ceil(this.getFontHeight(s)),i}draw_canvas(e,t={}){return t.font=t.font||"24px Arial",t.font_color=t.font_color||"#000000",this.__draw(e,t,this.canvas,this.ctx),this.canvas}draw_on_texture(e,t){const s=this.draw_canvas(e,t),i=new o(s,a,_,_,l,l);return i.generateMipMaps=!1,i.needsUpdate=!0,i}__draw(e,t){}roundRect(e,t,s,i,r,n,o,a){if(void 0===a&&(a=!0),void 0===n&&(n=5),"number"==typeof n)n={tl:n,tr:n,br:n,bl:n};else{const e={tl:0,tr:0,br:0,bl:0};for(const t in e)n[t]=n[t]||e[t]}e.beginPath(),e.moveTo(t+n.tl,s),e.lineTo(t+i-n.tr,s),e.quadraticCurveTo(t+i,s,t+i,s+n.tr),e.lineTo(t+i,s+r-n.br),e.quadraticCurveTo(t+i,s+r,t+i-n.br,s+r),e.lineTo(t+n.bl,s+r),e.quadraticCurveTo(t,s+r,t,s+r-n.bl),e.lineTo(t,s+n.tl),e.quadraticCurveTo(t,s,t+n.tl,s),e.closePath(),o&&e.fill(),a&&e.stroke()}}class Qe extends Xe{constructor(){super(),this.text_margin=new t(2,0)}__draw(e,t,s,i){i.font=t.font;const r=this.get_text_size(e,t.font);s.width=Math.ceil(r.x+2*this.text_margin.x),s.height=Math.ceil(r.y+2*this.text_margin.y),i.clearRect(0,0,s.width,s.height),i.globalAlpha=0,i.fillStyle=t.font_color||"#000000",i.fillRect(0,0,s.width,s.height),i.globalAlpha=1,i.globalAlpha=1,i.font=t.font,i.fillStyle=t.font_color||"#000000",i.textBaseline="middle",i.textAlign=t.textAlign||"center","center"===i.textAlign?i.fillText(e,s.width/2,s.height/2):i.fillText(e,0,s.height/2)}}const $e=new class{init(){this.max_anisotropy=0,this.vertex_texture_sampler_available=!1,this.fp_textures_available=!1}};class He extends h{constructor(e=1){super();const t=[];t.push(new c(0,0,0)),t.push(new c(0,0,1e3));const s=new u({color:4474111,depthFunc:i}),r=(new d).setFromPoints(t),n=new p(r,s);n.renderOrder=5e4;const o=[];o.push(new c(0,0,0)),o.push(new c(0,1e3,0));const a=new u({color:4521796,depthFunc:i}),_=(new d).setFromPoints(o),l=new p(_,a);l.renderOrder=5e4;const h=[];h.push(new c(0,0,0)),h.push(new c(1e3,0,0));const m=new u({color:16729156,depthFunc:i}),g=(new d).setFromPoints(h),f=new p(g,m);f.renderOrder=5e4,this.renderOrder=1e5,this.add(n),this.add(l),this.add(f),this.scale.set(e,e,e)}update(){}dispose(){}}const Ze=new class{init(){this._current=new m,this._current.name="default_scene"}add_scene(e){}get current(){return this._current}set current(e){this._current=e}dispose(){for(this.current.traverse((e=>{e.geometry&&(e.geometry.dispose(),e.material.dispose())}));this.current.children.length>0;)this.current.remove(this.current.children[0])}};class Je extends g{constructor(e,t,s){e=e||new c(1,1,1),t=t||new c(1,1,1),s=s||16711680;super(new f(e.x,e.y,e.z,t.x,t.y,t.z),new v({color:s}))}}class Ke extends g{constructor(e,t){t=t||"#FF0000";super(new x(e=e||1,64,64),new v({color:t}))}}class et extends g{constructor(e,t,s){e=e||"#FF0000";const i=(t=t||1)-.4,r=new w(.01,.01,i,32);r.translate(0,i/2,0);const n=new b(.1,.4,32);n.translate(0,i+.2,0);const o=le.mergeBufferGeometries([r,n]);o.rotateX(1.57);super(o,new v({color:e})),s&&this.quaternion.setFromUnitVectors(new c(0,0,1),s),this._dir=s}set dir(e){this.quaternion.setFromUnitVectors(new c(0,0,1),e),this._dir=e}get dir(){return this._dir}set length(e){this.scale.z=e}get length(){return this.scale.z}}const tt=new class{init(){this.width=1,this.height=1,this.position=new t,this.render_width=1,this.render_height=1,this.width_height=new t(this.width,this.height),this.dpr=1,this.pixel_size=new t(1/this.width,1/this.height)}update_position(e,t){this.position.set(e,t)}update(){this.size_changed=!1}update_size(e,s){this.width=e,this.height=s,this.pixel_size=new t(1/this.width,1/this.height),this.width_height.x=e,this.width_height.y=s,this.render_width=e*this.dpr,this.render_height=s*this.dpr,this.size_changed=!0}apply_pixel_density_v2(e){return e.multiplyScalar(1/this.dpr),e}apply_pixel_density(e){return e*(1/this.dpr)}get_pixel_size(){return this.pixel_size}get aspect_ratio(){return this.width/this.height}get portrait(){return this.width<this.height}};class st extends be{constructor(e,s,i,r){super("\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 uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n ",{_MainTex:{value:void 0},_ScreenSpacePosition:{value:new t},_ScreenSize:{value:new t},_TextureSize:{value:new t}})}set_position(e,t){this.uniforms._ScreenSpacePosition.value.set(e,t)}set_texture(e,t,s){this.uniforms._MainTex.value=e,this.uniforms._TextureSize.value.set(e.image.width,e.image.height),void 0!==t&&(this.uniforms._TextureSize.value.x=t),void 0!==s&&(this.uniforms._TextureSize.value.y=s)}set_screen_size(e,t){this.uniforms._ScreenSize.value.set(e,t)}}class it extends y{constructor(e,t,s,i){super(e,t,s,i),this.clear_color=new r("#000000"),this.clear_alpha=1}copy(e){return super.copy(e),this.clear_color.copy(e.clear_color),this.clear_alpha=e.clear_alpha,this}}const rt=new class{init(){this.Vector3_one=new c(1,1,1),this.Vector3_zero=new c(0,0,0),this.canvas_renderer=void 0,this.display_texture_meshes=[],this.ctx=void 0,this.scene=new m,this.camera=new it(60,tt.aspect_ratio,.1,1e3),this.camera.clear_alpha=0}draw_arrow(e,t,s=16711680){const i=new et(s,t.length(),t.clone().normalize());return i.position.copy(e),this.scene.add(i),i}draw_axis(){const e=new He;return this.scene.add(e),e}set_debug_RT(e){this.rt_debug=e}draw_rectangle(e,t,s,i){t=t||100,s=s||100,this.ctx.fillStyle=i||"rgba(255, 0, 0, 1)",this.ctx.fillRect(e.x-t/2,this.ctx.canvas.height-e.y-s/2,t,s)}clear(){this.ctx&&this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}draw_line_2D(e,t,s){this.ctx.strokeStyle=s||"rgba(255, 0, 0, 1)",this.ctx.beginPath(),this.ctx.moveTo(e.x,e.y),this.ctx.lineTo(t.x,t.y),this.ctx.closePath(),this.ctx.stroke()}draw_line(e,t=16711680){const s=new u({color:t}),i=(new d).setFromPoints(e),r=new p(i,s);return r.frustumCulled=!1,this.scene.add(r),r}draw_cube(e,t,s){t=t||1,s=s||16711680,e=e||new c;const i=new Je(new c(t,t,t),void 0,s);return i.position.copy(e),this.scene.add(i),i}draw_oriented_cube(e,t,s=1,i="#FF0000",r=.1){const n=e.distanceTo(t),o=new Je(new c(r,s,n),void 0,i),a=t.clone().sub(e).multiplyScalar(.5),_=a.clone().normalize();return a.add(e),o.position.copy(a),o.quaternion.setFromUnitVectors(new c(0,0,-1),_),this.scene.add(o),o}draw_plane(t,s,i){const r=new T(t,s),n=new e({uniforms:{_Color:{value:new M(0,1,0,.2)}},vertexShader:xe,fragmentShader:we,transparent:!0,depthWrite:!1}),o=new g(r,n);return o.renderOrder=-1e4,this.scene.add(o),o}draw_empty_cube(e,t,s){t=t||1,s=s||16711680;const i=(new S).setFromCenterAndSize(new c,new c(t,t,t)),r=new z(i,s);return r.position.copy(e||new c),r}draw_sphere(e,t,s){t=t||1,s=s||16711680,e=e||new c;const i=new Ke(t,s);return i.position.copy(e),this.scene.add(i),i}draw_point_array(e,t=!1,s=16711680){const i=new F(e,t);i.updateArcLengths();const r=i.getSpacedPoints(200);return this.draw_line(r,65280)}draw_sphere_helper(e,t){t=t||16711680;const s=new x(e.radius,32,32),i=new v({color:t}),r=new g(s,i);return r.position.copy(e.center),Ze.current.add(r),r}draw_math_sphere(t){const s=new x(t.radius,32,32),i=new e({uniforms:{_Color:{value:new M(1,0,0,.2)}},vertexShader:xe,fragmentShader:we,transparent:!0}),r=new g(s,i);r.position.copy(t.center),Ze.current.add(r)}draw_bounding_box(e){const t=new z(e,16776960);Ze.current.add(t)}draw_curve(e,t){const s=new c(0,0,0);t&&(s.y=t.offset||0);for(let t=0;t<e.length-1;t++)this.draw_line(e[t].clone().add(s),e[t+1].clone().add(s))}draw_texture(e,t,s){const i=new g(new T(1,1),new st);return this.display_texture_meshes.push(i),this.scene.add(i),i.material.set_texture(e,t,s),i}render(e){for(let e=0;e<this.display_texture_meshes.length;e++)this.display_texture_meshes[e].material.set_screen_size(tt.width,tt.height);this.scene.children.length>0&&e.render(this.scene,We.current)}};const nt=new class{init(){this.queue={},this.zoom_changed_evt="zoom_changed",this.store_clickd_evt="store_clicked",this.point_selected_evt="point_selected",this.config_changed="config_changed",this.path_substep_completed="path_substep_completed",this.path_completed="path_completed",this.go_to_store_requested_evt="go_to_store_requested",this.resource_loaded_evt="resource_loaded",this.service_clicked_evt="service_clicked",this.unit_pos_updated_evt="unit_position_updated",this.floor_changed_evt="floor_changed",this.on_enter_floor_navigation="on_enter_floor_navigation",this.on_exit_floor_navigation="on_exit_floor_navigation",this.on_enter_floor_selection="on_enter_floor_selection",this.on_exit_floor_selection="on_exit_floor_selection",this.on_enter_outside_navigation="on_enter_outside_navigation",this.on_exit_outside_navigation="on_exit_outside_navigation",this.step_selected_evt="step_selected"}fire(e,t){const s=this.queue[e];if(void 0===s)return;let i=s.length;for(;i--;)s[i](t)}on(e,t){void 0===this.queue[e]&&(this.queue[e]=[]),this.queue[e].push(t)}fire_zoom_changed(e){this.fire(this.zoom_changed_evt,e)}fire_store_selected(e){this.fire(this.store_clickd_evt,e)}fire_point_selected(e){this.fire(this.point_selected_evt,e)}fire_config_changed(){this.fire(this.config_changed)}fire_path_substep_completed(e){this.fire(this.path_substep_completed,e)}fire_path_completed(){this.fire(this.path_completed)}fire_step_selected(e){this.fire(this.step_selected_evt,e)}fire_go_to_store_requested(e){this.fire(this.go_to_store_requested_evt,e)}fire_resource_loaded(e){this.fire(this.resource_loaded_evt,e)}fire_service_clicked(e){this.fire(this.service_clicked_evt,e)}fire_unit_position_updated(e){this.fire(this.unit_pos_updated_evt,e)}fire_floor_switched(e){this.fire(this.floor_changed_evt,e)}fire_on_enter_floor_navigation(e){this.fire(this.on_enter_floor_navigation,e)}fire_on_exit_floor_navigation(e){this.fire(this.on_exit_floor_navigation,e)}fire_on_enter_floor_selection(e){this.fire(this.on_enter_floor_selection,e)}fire_on_exit_floor_selection(e){this.fire(this.on_exit_floor_selection,e)}fire_on_enter_outside_navigation(e){this.fire(this.on_enter_outside_navigation,e)}fire_on_exit_outside_navigation(e){this.fire(this.on_exit_outside_navigation,e)}};class ot{constructor(e){this.renderer=e,this._blit_scene=new m,this._blit_material=new fe,this._blit_quad=new g(new T(1,1),this._blit_material),this._blit_scene.add(this._blit_quad),this._blit_camera=new A(-1,1,1,-1,-1e4,1e4)}blit(e,t){this._blit_quad.material=this._blit_material;const s=!0===e.isWebGLRenderTarget?e.texture:e,i=!0===e.isWebGLRenderTarget?e.width:e.image.width,r=!0===e.isWebGLRenderTarget?e.height:e.image.height;this._blit_quad.material.uniforms._MainTex.value=s,this._blit_quad.material.uniforms._Resolution.value.set(i,r),t?this._blit_quad.material.uniforms._TargetResolution.value.set(t.width,t.height):this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value),this.__render(t)}material_pass(e,t){this._blit_quad.material=e,this.__render(t)}blit_with_material(e,t,s){const i=!0===e.isWebGLRenderTarget?e.texture:e,r=!0===e.isWebGLRenderTarget?e.width:e.image.width,n=!0===e.isWebGLRenderTarget?e.height:e.image.height;this._blit_quad.material=s,this._blit_quad.material.uniforms._MainTex.value=i,this._blit_quad.material.uniforms._Resolution.value.set(r,n),t?this._blit_quad.material.uniforms._TargetResolution.value.set(t.width,t.height):this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value),this.__render(t)}blit_clear_with_material(e,t){this._blit_quad.material=t,this.__render(e)}dispose(){this._blit_quad.geometry.dispose(),this._blit_quad.material.dispose()}__render(e){e=void 0===e?null:e;const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(void 0===e?null:e),this.renderer.render(this._blit_scene,this._blit_camera),this.renderer.setRenderTarget(t)}}class at extends fe{constructor(e,t){super("#define GLSLIFY 1\nuniform vec4 _DepthNormal;vec2 EncodeFloatRG(float v){vec2 kEncodeMul=vec2(1.0,255.0);float kEncodeBit=1.0/255.0;vec2 enc=kEncodeMul*v;enc=fract(enc);enc.x-=enc.y*kEncodeBit;return enc;}vec2 EncodeNormal(vec3 n){float scale=1.7777;vec2 enc=n.xy/(n.z+1.0);enc/=scale;enc=enc*0.5+0.5;return enc;}void main(){gl_FragColor=vec4(EncodeFloatRG(_DepthNormal.x),EncodeNormal(normalize(_DepthNormal.yzw)));}"),this.uniforms._DepthNormal={value:new M(e,t.x,t.y,t.z)}}}class _t extends e{constructor(){super({uniforms:{_FarPlane:{value:1}},vertexShader:"#define GLSLIFY 1\nvarying vec3 v_normal;varying vec3 v_pos;void main(){vec3 pos=position;mat4 MVP=projectionMatrix*modelViewMatrix;v_normal=(modelViewMatrix*vec4(normal,0.0)).xyz;v_pos=(modelViewMatrix*vec4(pos,1.0)).xyz;gl_Position=MVP*vec4(pos,1.0);}",fragmentShader:"#define GLSLIFY 1\nvarying vec3 v_normal;varying vec3 v_pos;uniform float _FarPlane;vec2 EncodeFloatRG(float v){vec2 kEncodeMul=vec2(1.0,255.0);float kEncodeBit=1.0/255.0;vec2 enc=kEncodeMul*v;enc=fract(enc);enc.x-=enc.y*kEncodeBit;return enc;}vec2 EncodeNormal(vec3 n){float scale=1.7777;vec2 enc=n.xy/(n.z+1.0);enc/=scale;enc=enc*0.5+0.5;return enc;}void main(){gl_FragColor=vec4(EncodeFloatRG(length(v_pos.z)/_FarPlane),EncodeNormal(normalize(v_normal)));}"})}set far_plane(e){this.uniforms._FarPlane.value=e}get far_plane(){return this.uniforms._FarPlane.value}}class lt{constructor(){this.RT=new R(tt.width,tt.height),this.clear_depth_normal_mat=new at(1,new c(0,0,1)),this.depth_normal_material=new _t}render(e){this.__resize_RT_if_necessary(),e.clear(this.RT,void 0,!0,!0),e.blit_clear_with_material(this.RT,this.clear_depth_normal_mat),this.depth_normal_material.far_plane=We.current.far,e.render(void 0,void 0,this.RT,this.depth_normal_material)}__resize_RT_if_necessary(){this.RT.width===tt.width&&this.RT.height===tt.height||this.RT.setSize(tt.width,tt.height)}get render_target(){return this.RT}}const ht=new class{init({canvas:e,core_attributes:t,context_attributes:s,threejs_attributes:i,dpr:r}){this._renderer=void 0,this.blitter=void 0,this.canvas=void 0,this.no_render=void 0,this.current_render_mode=void 0,this.generateDepthNormalTexture=!1,this.depth_and_normals_renderer=void 0,this.is_webgl2=!1,this.canvas_context=void 0,this.context_attributes=void 0,this.core_attributes={force_webgl2:!0,xr_enabled:!1},this.context_attributes={alpha:!0,antialias:!1,depth:!0,desynchronized:!1,failIfMajorPerformanceCaveat:!1,powerPreference:"high-performance",premultipliedAlpha:!0,preserveDrawingBuffer:!0,stencil:!1},this.threejs_attributes={logarithmicDepthBuffer:!1},Object.assign(this.core_attributes,t),Object.assign(this.context_attributes,s),Object.assign(this.threejs_attributes,this.context_attributes),Object.assign(this.threejs_attributes,i),this.core_attributes.force_webgl2?this.canvas_context=e.getContext("webgl2",this.context_attributes)||e.getContext("webgl",this.context_attributes)||e.getContext("experimental-webgl",this.context_attributes):this.canvas_context=e.getContext("webgl",this.context_attributes)||e.getContext("experimental-webgl",this.context_attributes),this.is_webgl2="WebGL2RenderingContext"===this.canvas_context.constructor.name,this.threejs_attributes.canvas=e,this.threejs_attributes.context=this.canvas_context,this._renderer=new C(this.threejs_attributes),this.core_attributes.xr_enabled?this._renderer.xr.enabled=!0:this._renderer.autoClear=!1,tt.dpr=r,this._renderer.setPixelRatio(1),this.is_webgl2||this._renderer.extensions.get("ANGLE_instanced_arrays"),this.blitter=new ot(this._renderer),this.canvas=this._renderer.domElement,this.no_render=new Te,this.current_render_mode=this.no_render,$e.max_anisotropy=this._renderer.capabilities.getMaxAnisotropy(),$e.vertex_texture_sampler_available=this._renderer.capabilities.maxVertexTextures>0,$e.fp_textures_available=this.is_floating_point_texture_available(),this.generateDepthNormalTexture=!1,this.depth_and_normals_renderer=new lt}get dom_element(){return this._renderer.domElement}get depth_normals_RT(){return this.depth_and_normals_renderer.render_target}set_state(e){this.current_render_mode.on_exit(this,this._renderer),this.current_render_mode=e,this.current_render_mode.on_enter(this,this._renderer)}update(){this.generateDepthNormalTexture&&this.depth_and_normals_renderer.render(this),this.__update_current_camera(),We.current&&this.current_render_mode.render(),tt.update()}__update_current_camera(){We.current&&(We.current.aspect=tt.aspect_ratio,We.current.updateProjectionMatrix(),We.current.updateMatrix(),We.current.updateMatrixWorld(!0))}render(e,t,s,i){this.__apply_override_material(e,i),this._renderer.setRenderTarget(void 0===s?null:s),this._renderer.render(e||Ze.current,t||We.current),this.__apply_override_material(e,void 0)}render_scene(e){e.on_pre_render&&e.on_pre_render(),e.render?e.render():this.render(e,void 0),e.on_post_render&&e.on_post_render()}__apply_override_material(e,t){t=void 0===t?null:t,e?e.overrideMaterial=t:Ze.current.overrideMaterial=t}readback_RT(e,t){this._renderer.readRenderTargetPixels(e,0,0,e.width,e.height,t)}clear(e,t,s,i){this._renderer.setRenderTarget(void 0===e?null:e),t&&this._renderer.setClearColor(t.clear_color,t.clear_alpha),this._renderer.clear(!!t,!!s,!!i)}on_resize(e,t){for(const s of e)tt.dpr=t,tt.update_position(s.contentRect.x,s.contentRect.y),tt.update_size(s.contentRect.width,s.contentRect.height),this.canvas.width=tt.render_width,this.canvas.height=tt.render_height,this._renderer.setViewport(0,0,tt.render_width,tt.render_height),this.__update_current_camera()}material_pass(e,t){this.blitter.material_pass(e,t)}blit(e,t,s){s?this.blitter.blit_with_material(e,t,s):this.blitter.blit(e,t)}blit_clear_with_material(e,t){this.blitter.blit_clear_with_material(e,t)}take_screenshot(e,t=tt.width,s=tt.height){const i=tt.width,r=tt.height,n=t,o=s,a=1024,_=1024,l=parseInt(Math.ceil(n/a)),h=parseInt(Math.ceil(o/_));tt.update_size(a,_);const c=this._renderer.getPixelRatio();this._renderer.setPixelRatio(1),this._renderer.setSize(a,_,!1);const u=document.createElement("canvas").getContext("2d");u.canvas.width=n,u.canvas.height=o,We.current.aspect=tt.aspect_ratio,We.current.updateMatrix(),We.current.updateMatrixWorld(!0);for(let e=0;e<l;e++)for(let t=0;t<h;t++)We.current.setViewOffset(n,o,tt.width*e,tt.height*t,tt.width,tt.height),this.current_render_mode.render(),u.drawImage(this._renderer.domElement,tt.width*e,tt.height*t);u.canvas.toBlob(e,"image/png;base64;"),We.current.clearViewOffset(),tt.update_size(i,r),this._renderer.setPixelRatio(c),this._renderer.setSize(i,r,!1),We.current.aspect=tt.aspect_ratio,We.current.updateMatrix(),We.current.updateMatrixWorld(!0)}download_screenshot(e){const t=document.createElement("a");t.download="Snapshot.png",t.href=URL.createObjectURL(e),t.click(),t.onclick=function(){requestAnimationFrame((function(){URL.revokeObjectURL(t.href)})),t.removeAttribute("href")}}dispose(){this._renderer.dispose(),this.current_render_mode.dispose(),this.blitter.dispose()}is_floating_point_texture_available(){const t=new R(1,1,{minFilter:l,magFilter:l,format:k,colorSpace:P,type:D,stencilBuffer:!1,depthBuffer:!1}),r=new e({vertexShader:"\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n ",fragmentShader:"\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n ",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i});this.material_pass(r,t);const n=new Float32Array(4);return this._renderer.readRenderTargetPixels(t,0,0,1,1,n),Math.abs(n[1]-4865.35)<.001}};class ct{constructor(){}get is_animating(){return!1}on_enter(e){}update(e){}on_exit(e){}}class ut{constructor(){this.t=0,this.easing_function_t=0}get is_animating(){return!0}on_enter(e){}update(e){this.t+=Ne.delta_time/e.duration,this.easing_function_t=e.easing_function(this.t),this.easing_function_t=ke.clamp(this.easing_function_t,0,1),e.set_property_value(ke.lerp(e.from,e.to,this.easing_function_t)),this.easing_function_t>=.9999&&(e.set_property_value(e.to),e.set_current_state(new ct),e.finished_callback(e))}on_exit(e){}}class dt{constructor({element:e,css_property:t,from:s=0,to:i=1,duration:r=1,value_prefix:n="",value_suffix:o="",easing_function:a=De.ease_in_out_cubic,finished_callback:_=(()=>{})}){this.element=e,this.css_property=t,this.from=s,this.to=i,this.value_prefix=n,this.value_suffix=o,this.duration=r,this.easing_function=a,this.finished_callback=_,this.current_state=new ct}animate(){this.set_current_state(new ut)}stop(){this.set_current_state(new ct)}set_property_value(e){this.element.style[this.css_property]=`${this.value_prefix}${e}${this.value_suffix}`}update(){this.current_state.update(this)}get is_animating(){return this.current_state.is_animating}set_current_state(e){this.current_state.on_exit(this),this.current_state=e,this.current_state.on_enter(this)}}const pt=new class{init(){this.operating_systems={ANDROID:"android",IOS:"ios",LINUX:"linux",MAC:"mac",WINDOWS:"windows"},this.is_mobile=!!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/),this.is_ipad=!!(navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2),this.is_ios=!!navigator.userAgent.match(/(iPhone|iPod|iPad)/)||this.is_ipad,this.is_android=this.get_os()===this.operating_systems.ANDROID,this.is_linux=this.get_os()===this.operating_systems.LINUX,this.is_mac=this.get_os()===this.operating_systems.MAC,this.is_windows=this.get_os()===this.operating_systems.WINDOWS}get_os(){const e=navigator.userAgent,t=navigator.platform;let s=null;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?s=this.operating_systems.MAC:-1!==["iPhone","iPad","iPod"].indexOf(t)?s=this.operating_systems.IOS:-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?s=this.operating_systems.WINDOWS:/Android/.test(e)?s=this.operating_systems.ANDROID:!s&&/Linux/.test(t)&&(s=this.operating_systems.LINUX),s}};const mt=new class{init(){this.target_geometry=void 0,this.target_position=new c}set_target_geometry(e){this.target_geometry=e}};const gt=new class{init(){this.resources={},this.resources_by_url={}}set_resource(e,t,s){Object.keys(this.resources_by_url).includes(t)?this.resources[e]=this.resources_by_url[t]:(this.resources[e]=s,this.resources_by_url[t]=s),nt.fire_resource_loaded({name:e,value:s})}get_resource(e){return this.resources[e]}get(e){return this.resources[e]}};class ft{constructor(e,s){this.geometry=e,this.material=void 0,this.uniforms={},this.batch_width=s,this.data_textures=[],this.object_names=void 0,this.zero_offset=new t,this.write_offset=new t,this.uniform_dirty_count=0,this.tmp_uploaded_data_count=0}init(t,s,i){this.material=new e({uniforms:this.uniforms,vertexShader:s,fragmentShader:i}),this.object_names=t}add_global_uniform(e,t){this.uniforms[e]={value:t},this.material.needsUpdate=!0}set_global_uniform(e,t){this.uniforms[e].value=t}add_object_uniform_v3(e,t){const s=this.__create_rgb_texture(this.batch_width),i=this.__create_rgb_texture(this.batch_width),r=this.__create_rgb_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgb(n,t)}add_object_uniform_v4(e,t){const s=this.__create_rgba_texture(this.batch_width),i=this.__create_rgba_texture(this.batch_width),r=this.__create_rgba_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgba(n,t)}add_object_uniform_v4_float(e,t){const s=this.__create_rgba_float_texture(this.batch_width),i=this.__create_rgba_float_texture(this.batch_width),r=this.__create_rgba_float_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgba(n,t)}set_object_uniform_v3(e,t,s,i,r,n){const o=this.__get_object_index(e),a=this.__get_data_texture(t);this.__set_pixel_rgb(a.src,o,s,i,r,n),this.__set_pixel_rgb(a.one_pixel,0,s,i,r,n),a.last_accessed_index=o,a.dirty_count++}set_object_uniform_v4(e,t,s,i,r,n,o){const a=this.__get_object_index(e),_=this.__get_data_texture(t);this.__set_pixel_rgba(_.src,a,s,i,r,n,o),this.__set_pixel_rgba(_.one_pixel,0,s,i,r,n,o),_.last_accessed_index=a,_.dirty_count++}upload_texture_data(e,t){for(let s=0;s<this.data_textures.length;s++)t>0&&this.data_textures[s].dirty_count>0&&(1===this.data_textures[s].dirty_count&&this.__partial_texture_data_upload(e,this.data_textures[s]),this.data_textures[s].dirty_count>1&&this.__full_texture_data_upload(e,this.data_textures[s]),this.data_textures[s].dirty_count=0,t--)}get_uniform_dirty_count(){this.uniform_dirty_count=0;for(let e=0;e<this.data_textures.length;e++)this.data_textures[e].dirty_count>0&&this.uniform_dirty_count++;return this.uniform_dirty_count}__full_texture_data_upload(e,t){t.dst.needsUpdate=!0,e.copyTextureToTexture(this.zero_offset,t.src,t.dst)}__partial_texture_data_upload(e,t){const s=t.last_accessed_index;-1!==s&&(this.write_offset.y=Math.floor(s/this.batch_width),this.write_offset.x=s-this.batch_width*this.write_offset.y,e.copyTextureToTexture(this.write_offset,t.one_pixel,t.dst))}get_mesh(){return new g(this.geometry,this.material)}__set_pixel_rgb(e,t,s,i,r,n){i&&(e.image.data[3*t+0]=s.x),r&&(e.image.data[3*t+1]=s.y),n&&(e.image.data[3*t+2]=s.z)}__set_pixel_rgba(e,t,s,i,r,n,o){i&&(e.image.data[4*t+0]=s.x),r&&(e.image.data[4*t+1]=s.y),n&&(e.image.data[4*t+2]=s.z),o&&(e.image.data[4*t+3]=s.w)}__flood_data_texture_rgb(e,t){for(let s=0;s<this.batch_width*this.batch_width;s++)this.__set_pixel_rgb(e.src,s,t,!0,!0,!0),e.dirty_count++}__flood_data_texture_rgba(e,t){for(let s=0;s<this.batch_width*this.batch_width;s++)this.__set_pixel_rgba(e.src,s,t,!0,!0,!0,!0),e.dirty_count++}__create_rgb_texture(e){const t=new Uint8Array(3*e*e);return new L(t,e,e,k)}__create_rgba_texture(e){const t=new Uint8Array(4*e*e);return new L(t,e,e,k)}__create_rgba_float_texture(e){const t=new Float32Array(4*e*e);return new L(t,e,e,k,D)}__get_data_texture(e){for(let t=0;t<this.data_textures.length;t++)if(this.data_textures[t].name===e)return this.data_textures[t];console.error("Data texture "+e+" does not exist")}__get_object_index(e){for(let t=0;t<this.object_names.length;t++)if(this.object_names[t]===e)return t;console.error("the name "+e+" is not contained in this batch")}__add_data_texture(e,t,s,i){return s.needsUpdate=!0,this.data_textures.push({name:e,src:t,dst:s,one_pixel:i,last_accessed_index:-1,dirty_count:0}),this.uniforms[e]={value:s},this.data_textures[this.data_textures.length-1]}dispose(){for(let e=0;e<this.data_textures.length;e++)this.data_textures[e].src.dispose(),this.data_textures[e].dst.dispose(),this.data_textures[e].one_pixel.dispose()}}const vt=new class{init(){this.batches=[]}batch(e){const t=[],s=ke.ceilPowerOfTwo(Math.sqrt(e.length));this.__init_uv_array(t,s);let i=0;for(let r=0;r<e.length;r++){const n=e[r].getAttribute("position").count,o=Math.floor(r/s),a=r-s*o;for(let e=0;e<n;e++)t[i]=a/s+.5/s,t[i+1]=o/s+.5/s,i+=2}const r=new U(new Float32Array(t),2),n=le.mergeBufferGeometries(e);return n.setAttribute("attr_accessor_uv",r),this.batches.push(new ft(n,s)),this.batches[this.batches.length-1]}upload_texture_data(e){for(let t=0;t<this.batches.length;t++)this.batches[t].upload_texture_data(e,1)}__init_uv_array(e,t){for(let s=0;s<t*t*2;s++)e.push(0)}};const xt=new class{init(e){this.input=e,this.ui_elements=[],this._tmp_normalized_pos=new t,this.ss_scene=new m,this.ss_scene.matrixWorldAutoUpdate=!1,this.ss_scene.frustumCulled=!1,this.ws_scene=new m,this.ws_scene.matrixWorldAutoUpdate=!1,this.ws_scene.frustumCulled=!1,this.ss_camera=new A(-1,1,1,-1,-100,100)}delete_element(e){const t=this.ui_elements.indexOf(e);t>-1&&this.ui_elements.splice(t,1),this.ss_scene.remove(e),this.ws_scene.remove(e),e.dispose()}add_screen_space_element(e){this.ui_elements.push(e),this.ss_scene.add(e),e.set_screen_space_coordinate_system()}add_world_space_element(e){this.ui_elements.push(e),this.ws_scene.add(e),e.set_world_space_coordinate_system()}update(){this.ss_camera.updateProjectionMatrix(),this._tmp_normalized_pos.copy(this.input.NDC);for(let e=0;e<this.ui_elements.length;e++)this.ui_elements[e].update_state(this._tmp_normalized_pos)}render(e){this.ss_scene.children.length>0&&ht.render(this.ss_scene,this.ss_camera),this.ws_scene.children.length>0&&ht.render(this.ws_scene,We.current)}clear(){this.current_clicked_element=void 0}};class wt{constructor(){this.sphere=new j}fit_points(e,t,s,i){this.sphere.setFromPoints(e);const r=ke.degToRad(s/2),n=2*Math.atan(Math.tan(r)*i)/2,o=this.get_up_plane_normal(t,r),a=this.get_down_plane_normal(t,r),_=this.get_left_plane_normal(t,n),l=this.get_right_plane_normal(t,n),h=new c(0,0,-1).applyQuaternion(t),u=this.sphere.center.clone(),d=this.get_distance_to_fit_rect(2*this.sphere.radius,2*this.sphere.radius,s,i),p=u.clone().add(h.clone().multiplyScalar(-1*d)),m=(new O).setFromNormalAndCoplanarPoint(o,p),g=(new O).setFromNormalAndCoplanarPoint(a,p),f=(new O).setFromNormalAndCoplanarPoint(_,p),v=(new O).setFromNormalAndCoplanarPoint(l,p);this.apply_center_correction_to_pos(p,e,t,m,g,f,v),m.setFromNormalAndCoplanarPoint(o,p),g.setFromNormalAndCoplanarPoint(a,p),f.setFromNormalAndCoplanarPoint(_,p),v.setFromNormalAndCoplanarPoint(l,p);let x=1/0;const w=h.clone().multiplyScalar(-2*d);for(let t=0;t<e.length;t++){const s=new I(e[t].clone(),e[t].clone().add(w)),i=new c,r=new c,n=new c,o=new c;m.intersectLine(s,i),g.intersectLine(s,r),f.intersectLine(s,n),v.intersectLine(s,o),i.length()<1e-4&&console.log("up intersection not found",t),r.length()<1e-4&&console.log("down intersection not found",t),n.length()<1e-4&&console.log("left intersection not found",t),o.length()<1e-4&&console.log("right intersection not found",t);const a=e[t].clone().sub(i).length(),_=e[t].clone().sub(r).length(),l=e[t].clone().sub(n).length(),h=e[t].clone().sub(o).length(),u=Math.min(a,_),d=Math.min(l,h),p=Math.min(u,d);p<x&&(x=p)}const b=h.clone().multiplyScalar(x);return p.clone().add(b)}apply_center_correction_to_pos(e,t,s,i,r,n,o){const a=this.get_vertical_correction(t,r,i,s),_=this.get_horizontal_correction(t,n,o,s);e.add(a),e.add(_)}get_vertical_correction(e,t,s,i){let r=1/0,n=1/0;const o=new c(0,1,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const a=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(-5e6))),_=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(5e6))),l=new c,h=new c;t.intersectLine(a,l),s.intersectLine(_,h);const u=l.distanceTo(e[i]),d=h.distanceTo(e[i]);h.length()<1e-4&&console.log("vertical up intersection not found",i),l.length()<1e-4&&console.log("vertical down intersection not found",i),u<n&&(n=u),d<r&&(r=d)}const a=(r-n)/2;return o.clone().multiplyScalar(-a)}get_horizontal_correction(e,t,s,i){let r=1/0,n=1/0;const o=new c(1,0,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const a=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(-5e6))),_=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(5e6))),l=new c,h=new c;t.intersectLine(a,l),s.intersectLine(_,h);const u=l.distanceTo(e[i]),d=h.distanceTo(e[i]);l.length()<1e-4&&console.log("left intersection not found",i),h.length()<1e-4&&console.log("right intersection not found",i),u<n&&(n=u),d<r&&(r=d)}const a=(r-n)/2;return o.clone().multiplyScalar(-a)}get_up_plane_normal(e,t){const s=new c(0,-1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),t)),s.applyQuaternion(e),s}get_down_plane_normal(e,t){const s=new c(0,1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),-t)),s.applyQuaternion(e),s}get_left_plane_normal(e,t){const s=new c(1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),t)),s.applyQuaternion(e),s}get_right_plane_normal(e,t){const s=new c(-1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),-t)),s.applyQuaternion(e),s}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}class bt{constructor(){}fit_points(e,t,s,i){const r=t.clone().inverse(),n=[];for(let t=0;t<e.length;t++)n.push(e[t].clone().applyQuaternion(r));const o=(new S).setFromPoints(n),a=new c;o.getSize(a);const _=this.get_distance_to_fit_rect(a.x/2,a.y/2,s,i),l=new c;return o.getCenter(l),l.applyQuaternion(t),{center:l,distance_to_center:_}}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}const yt=new class{init(e){this.tmp_mat=new B,this.plane=new O,this.ray=new q,this.tmp_size=new c,this.tmp_unproj=new c,this.input=e}get_up_dir(e){e=e||We.current;const t=new c;return t.set(0,1,0),t.applyQuaternion(e.quaternion),t}get_forward_dir(e){e=e||We.current;const t=new c;return t.set(0,0,-1),t.applyQuaternion(e.quaternion),t}get_right_dir(e){e=e||We.current;const t=new c;return t.set(1,0,0),t.applyQuaternion(e.quaternion),t}unproject_mouse_position(e,t){t=t||We.current;const s=new c,i=t.fov/2*Math.PI/180,r=2*Math.atan(Math.tan(i)*t.aspect)/2,n=Math.tan(i)*t.far,o=Math.tan(r)*t.far;return s.set(o*e.x,n*e.y,-t.far).normalize(),s.applyQuaternion(t.quaternion)}get_plane_intersection(e,t,s,i){i=i||We.current,s=s||this.input.NDC;const r=new c;return this.plane.setFromNormalAndCoplanarPoint(t||this.get_forward_dir(i),e),i.isPerspectiveCamera?this.ray.set(i.position,this.unproject_mouse_position(s,i)):(this.tmp_unproj.set(s.x,s.y,1).unproject(i),this.ray.set(i.position,this.tmp_unproj)),this.ray.intersectPlane(this.plane,r),r}fit_points_on_camera(e,t=1){const s=(new j).setFromPoints(e).center,i=this.get_forward_dir(We.current).clone(),r=(new O).setFromNormalAndCoplanarPoint(i,s),n=ke.project_points_on_plane(e,r),o=new c;let a=(new S).setFromPoints(n);a.getCenter(o);const _=new c(0,1,0).applyQuaternion(We.current.quaternion),l=_.clone().cross(i).normalize(),h=(new B).set(l.x,_.x,i.x,s.x,l.y,_.y,i.y,s.y,l.z,_.z,i.z,s.z,0,0,0,1),u=(new B).getInverse(h);for(let e=0;e<n.length;e++)n[e].applyMatrix4(u);const d=new c;a=(new S).setFromPoints(n),a.getSize(d),d.multiplyScalar(t);const p=new c;return a.getCenter(p),{position:o,zoom:this.get_zoom_to_fit_rect(d.x/2,d.y/2)}}get_zoom_to_fit_rect(e,t){const s=We.current.fov/2*Math.PI/180,i=2*Math.atan(Math.tan(s)*We.current.aspect)/2,r=t/Math.tan(s),n=e/Math.tan(i);return Math.max(Math.abs(n),Math.abs(r))}get_zoom_to_fit_box(e,t){if(t.isOrthographicCamera){e.getSize(this.tmp_size);const t=this.tmp_size.x,s=this.tmp_size.y,i=t/s;return tt.aspect_ratio/i>1?tt.height/s:tt.width/t}{const t=new c;return e.getSize(t),this.get_zoom_to_fit_rect(t.x,t.y)}}get_html_screen_pos(e,t){t=t||We.current;const s=new c;return e.getWorldPosition(s),s.project(t),s.x=(.5*s.x+.5)*tt.width,s.y=(1-(.5*s.y+.5))*tt.height,s}world_pos_to_screen(e,t){t=t||We.current;const s=new c;return s.copy(e),s.project(t),s.x=(.5*s.x+.5)*tt.width,s.y=(1-(.5*s.y+.5))*tt.height,s}update_projection(e){e.left=-tt.width/2,e.right=tt.width/2,e.top=tt.height/2,e.bottom=-tt.height/2,e.aspect=tt.aspect_ratio,e.updateProjectionMatrix(!0)}fit_bounding_box_points(e,t,s=1){const i=new c;i.copy(t.max).sub(t.min);const r=t.min.clone(),n=r.clone().add(new c(i.x,0,0)),o=r.clone().add(new c(0,i.y,0)),a=r.clone().add(new c(0,0,i.z)),_=r.clone().add(new c(i.x,0,i.z)),l=r.clone().add(new c(0,i.y,i.z)),h=t.max.clone(),u=r.clone().add(new c(i.x,i.y,0));return this.fit_points(e,[r,n,o,a,_,l,h,u],s)}fit_points(e,t,s=1){if(e.isPerspectiveCamera){const i=new c(0,0,-1).applyQuaternion(e.quaternion),r=i.clone().multiplyScalar(-1),n=new wt,o=tt.aspect_ratio,a=n.fit_points(t,e.quaternion,e.fov*s,o),_=(new S).setFromPoints(t),l=new c;_.getCenter(l);const h=(new O).setFromNormalAndCoplanarPoint(r,l),u=new q(a,i),d=new c;u.intersectPlane(h,d);return{zoom:a.distanceTo(d),reference_position:d,camera_position:a}}{const i=(new bt).fit_points(t,this.reference_rotation,e.fov*s,tt.aspect_ratio);this.reference_position.copy(i.center),this.reference_zoom=i.distance_to_center;const r=new c(0,0,1).applyQuaternion(e.quaternion);return{zoom:i.distance_to_center,reference_position:i.center,camera_position:r.multiplyScalar(i.distance_to_center)}}}};const Tt=new class{constructor(){}init(e){We.init(),yt.init(e),$e.init(),nt.init(),vt.init(),pt.init(),mt.init(),gt.init(),Ze.init(),tt.init(),Ne.init(),xt.init(e),rt.init()}dispose(){ht.dispose(),Ze.dispose()}};class Mt{init(e){this.ctrlz_pressed=!1,this.ctrlz_fired=!1,this.keys={},this.keys_keys=[],this.container=e,this.container.addEventListener("keydown",this.on_key_down.bind(this),!1),this.container.addEventListener("keyup",this.on_key_up.bind(this),!1)}on_key_down(e){90===e.keyCode&&e.ctrlKey&&!this.ctrlz_fired&&(this.ctrlz_pressed=!0,this.ctrlz_fired=!0),e.code&&this.press_key(e.code)}on_key_up(e){this.release_key(e.code)}clear(){this.ctrlz_pressed=!1;for(let e=0;e<this.keys_keys.length;e++)this.keys[this.keys_keys[e]].pressed=!1,this.keys[this.keys_keys[e]].released=!1}release_key(e){const t=this.keys[e];t&&(t.fired=!1,t.down=!1,t.released=!0)}release_keys(){this.ctrlz_fired=!1;for(let e=0;e<this.keys_keys.length;e++)this.keys[this.keys_keys[e]].fired=!1,this.keys[this.keys_keys[e]].down=!1}press_key(e){const t=this.keys[e];t&&(!1===t.down&&(t.pressed=!0),t.down=!0,t.fired=!0)}is_key_pressed(e){const t=this.keys[e];return!!t&&t.pressed}is_key_down(e){const t=this.keys[e];return!!t&&t.down}is_key_released(e){const t=this.keys[e];return!!t&&t.released}register_key(e){this.keys[e]={key_name:e,pressed:!1,down:!1,fired:!1},this.keys_keys=Object.keys(this.keys)}unregister_key(e){delete this.keys[e]}dispose(){this.container.removeEventListener("keydown",this.on_key_down.bind(this),!1),this.container.removeEventListener("keyup",this.on_key_up.bind(this),!1)}}class St extends A{constructor(e,t,s,i,n,o){super(e,t,s,i,n,o),this.clear_color=new r("#000000"),this.clear_alpha=1}copy(e){return super.copy(e),this.clear_color.copy(e.clear_color),this.clear_alpha=e.clear_alpha,this}}class zt extends e{constructor(){super({uniforms:{},vertexShader:"#define GLSLIFY 1\nvarying vec3 v_normal;void main(){gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);v_normal=(modelMatrix*vec4(normal,0.0)).xyz;}",fragmentShader:"#define GLSLIFY 1\nvarying vec3 v_normal;void main(){gl_FragColor=vec4(v_normal*0.5+vec3(0.5),1.0);}"})}}class Ft extends Te{constructor(){super()}render(){ht.clear(void 0,We.current,!0,!0),ht.render(Ze.current,We.current,void 0,new zt)}}var At="#define GLSLIFY 1\nvarying vec2 vUv;varying vec4 vRay;uniform mat4 _InverseProjMatrix;void main(){gl_Position=vec4(uv*2.0-1.0,1.0,1.0);vRay=_InverseProjMatrix*vec4(uv*2.0-1.0,1.0,1.0);vUv=uv;}";class Rt extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;uniform float _FarPlane;varying vec2 vUv;varying vec4 vRay;vec3 decode_normal(vec4 enc){float scale=1.7777;vec3 nn=enc.xyz*vec3(2.0*scale,2.0*scale,0.0)+vec3(-scale,-scale,1.0);float g=2.0/dot(nn.xyz,nn.xyz);vec3 n;n.xy=g*nn.xy;n.z=g-1.0;return n;}float DecodeFloatRG(vec2 enc){vec2 kDecodeDot=vec2(1.0,1.0/255.0);return dot(enc,kDecodeDot);}vec3 DecodeNormal(vec2 uv){vec4 depthNormal=texture2D(_MainTex,uv);vec3 normalValue=normalize(decode_normal(vec4(depthNormal.zw,0.,0.)));return normalize(normalValue);}vec3 DecodeViewPos(vec2 uv){vec2 depth=texture2D(_MainTex,uv).xy;return DecodeFloatRG(depth)*(vRay.xyz/vRay.w);}void main(){vec3 viewPos=DecodeViewPos(vUv);vec3 normalValue=DecodeNormal(vUv);float vDepth=clamp(0.0,1.0,length(viewPos)/_FarPlane);vDepth=length(viewPos)/_FarPlane;gl_FragColor=vec4(vDepth,vDepth,vDepth,1.0);}",At),this.uniforms._FarPlane={value:1},this.uniforms._InverseProjMatrix={value:new B}}}class Ct extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform sampler2D _AO;uniform vec2 _Resolution;uniform vec2 _SampleDir;varying vec2 vUv;void main(){gl_FragColor.rgb=texture2D(_MainTex,vUv).rgb*(1.0-texture2D(_AO,vUv).r);gl_FragColor.a=1.0;}"),this.uniforms._AO={value:void 0}}}class kt extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform mat4 _InverseProjMatrix;uniform float _Bias;uniform float _Radius;uniform vec2 _Resolution;uniform float _FarPlane;varying vec2 vUv;varying vec4 vRay;uniform vec3 _SampleKernel[64];uniform sampler2D _RandomRotation;uniform mat4 _ProjectionMatrix;vec3 decode_normal(vec4 enc){float scale=1.7777;vec3 nn=enc.xyz*vec3(2.0*scale,2.0*scale,0.0)+vec3(-scale,-scale,1.0);float g=2.0/dot(nn.xyz,nn.xyz);vec3 n;n.xy=g*nn.xy;n.z=g-1.0;return n;}float DecodeFloatRG(vec2 enc){vec2 kDecodeDot=vec2(1.0,1.0/255.0);return dot(enc,kDecodeDot);}vec3 DecodeNormal(vec2 uv){vec2 encoded_normal=texture2D(_MainTex,uv).zw;vec3 normalValue=normalize(decode_normal(vec4(encoded_normal,0.,0.)));return normalize(normalValue);}vec3 DecodeViewPos(vec2 uv){vec2 depth=texture2D(_MainTex,uv).xy;vec4 inv_proj=_InverseProjMatrix*vec4(vUv*2.0-1.0,1.0,1.0);return DecodeFloatRG(depth)*(vRay.xyz/vRay.w);}void main(){vec2 noiseScale=vec2(_Resolution.x/4.0,_Resolution.y/4.0);vec3 fragPos=DecodeViewPos(vUv);vec3 normal=DecodeNormal(vUv);vec3 randomVec=texture2D(_RandomRotation,vUv*noiseScale).xyz;randomVec=vec3(randomVec.xy*2.0-1.0,0);randomVec=normalize(randomVec);vec3 tangent=normalize(randomVec-normal*dot(randomVec,normal));vec3 bitangent=normalize(cross(normal,tangent));mat3 TBN=mat3(tangent,bitangent,normal);float occlusion=0.0;const int kernelSize=64;for(int i=0;i<kernelSize;++i){vec3 sample=TBN*_SampleKernel[i];sample=fragPos+sample*_Radius;vec4 projPos=_ProjectionMatrix*vec4(sample,1.0);vec2 screenPos=projPos.xy/projPos.w;screenPos=screenPos*0.5+0.5;float sampled_depth=DecodeViewPos(screenPos).z;float rangeCheck=smoothstep(0.0,1.0,_Radius/abs(fragPos.z-sampled_depth));occlusion+=step(sample.z+_Bias,sampled_depth)*rangeCheck;}occlusion=(occlusion/float(kernelSize));gl_FragColor.rgb=vec3(occlusion,occlusion,occlusion);gl_FragColor.a=1.0;}",At),this.uniforms._InverseProjMatrix={value:new B},this.uniforms._ProjectionMatrix={value:new B},this.uniforms._Bias={value:.0125},this.uniforms._Radius={value:.3},this.uniforms._FarPlane={value:100},this.uniforms._SampleKernel={value:this.__get_sample_kernel()},this.uniforms._RandomRotation={value:this.__get_rotation_kernel()}}__get_sample_kernel(){const e=[];for(let t=0;t<64;t++){const s=new c(2*Math.random()-1,2*Math.random()-1,Math.random());s.normalize();let i=t/64;i=ke.lerp(.1,1,i*i),s.multiplyScalar(i),e.push(s)}return e}__get_rotation_kernel(){const e=new Uint8Array(48);for(let t=0;t<16;t++)e[3*t+1]=Math.floor(255*Math.random()),e[3*t+2]=Math.floor(255*Math.random()),e[3*t+3]=0;const t=new L(e,4,4,k);return t.wrapS=V,t.wrapT=V,t.needsUpdate=!0,t}}class Pt extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;uniform vec2 _SampleDir;varying vec2 vUv;void main(){vec4 sum=vec4(0.,0.,0.,0.);vec2 dir=(0.5/_Resolution)*_SampleDir;float _Distance=2.0;sum+=texture2D(_MainTex,vUv+dir*-4.*_Distance)*0.0525;sum+=texture2D(_MainTex,vUv+dir*-3.*_Distance)*0.075;sum+=texture2D(_MainTex,vUv+dir*-2.*_Distance)*0.110;sum+=texture2D(_MainTex,vUv+dir*-1.*_Distance)*0.150;sum+=texture2D(_MainTex,vUv+dir*0.*_Distance)*0.225;sum+=texture2D(_MainTex,vUv+dir*1.*_Distance)*0.150;sum+=texture2D(_MainTex,vUv+dir*2.*_Distance)*0.110;sum+=texture2D(_MainTex,vUv+dir*3.*_Distance)*0.075;sum+=texture2D(_MainTex,vUv+dir*4.*_Distance)*0.0525;gl_FragColor=vec4(sum);}"),this.uniforms._SampleDir={value:new t}}}class Dt{constructor(e){this.RT1=new R(1,1),this.RT2=new R(1,1),this.box_blur_mat=new Pt}blur(e){e.width===this.RT1.width&&e.height===this.RT1.height||(this.RT1.setSize(e.width,e.height),this.RT2.setSize(e.width,e.height)),this.box_blur_mat.uniforms._SampleDir.value.set(1,0),ht.blit(e,this.RT1,this.box_blur_mat),this.box_blur_mat.uniforms._SampleDir.value.set(0,1),ht.blit(this.RT1,e,this.box_blur_mat)}}class Lt extends Te{constructor(e=!1){super(),this.ssao_mat=new kt,this.ssao_compose_mat=new Ct,this.debug_normals=new Rt,this.ssaa=e?2:1,this.main_RT=new R(tt.width*this.ssaa,tt.height*this.ssaa),this.SSAO_RT=new R(tt.width,tt.height),this.blurrer=new Dt,ht.generateDepthNormalTexture=!0}render(){this.__check_RT_size(),ht.clear(this.main_RT,We.current,!0,!1),ht.render(Ze.current,We.current,this.main_RT),this.__update_uniforms(),ht.blit(ht.depth_normals_RT,this.SSAO_RT,this.ssao_mat),this.blurrer.blur(this.SSAO_RT),ht.blit(this.SSAO_RT,void 0),this.ssao_compose_mat.uniforms._AO.value=this.SSAO_RT.texture,ht.blit(this.main_RT,void 0,this.ssao_compose_mat)}__update_uniforms(){this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(We.current.projectionMatrix),this.ssao_mat.uniforms._ProjectionMatrix.value.copy(We.current.projectionMatrix),this.ssao_mat.uniforms._FarPlane.value=We.current.far}__check_RT_size(){this.main_RT.width===tt.width*this.ssaa&&this.main_RT.height===tt.height*this.ssaa||(this.main_RT.setSize(tt.width*this.ssaa,tt.height*this.ssaa),this.SSAO_RT.setSize(tt.width,tt.height))}}class Ut extends Te{constructor(){super()}render(){ht.clear(void 0,We.current,!0,!0),Ze.current.on_pre_render&&Ze.current.on_pre_render(),Ze.current.render?Ze.current.render():ht.render(Ze.current,We.current),Ze.current.on_post_render&&Ze.current.on_post_render()}}class jt extends fe{constructor(e){super("#define GLSLIFY 1\n#include <common>\nvarying vec2 vUv;uniform sampler2D _MainTex;uniform vec2 texSize;uniform vec2 direction;float gaussianPdf(in float x,in float sigma){return 0.39894*exp(-0.5*x*x/(sigma*sigma))/sigma;}void main(){vec2 invSize=1.0/texSize;float fSigma=float(SIGMA);float weightSum=gaussianPdf(0.0,fSigma);vec4 diffuseSum=texture2D(_MainTex,vUv)*weightSum;for(int i=1;i<KERNEL_RADIUS;i++){float x=float(i);float w=gaussianPdf(x,fSigma);vec2 uvOffset=direction*invSize*x;vec4 sample1=texture2D(_MainTex,vUv+uvOffset);vec4 sample2=texture2D(_MainTex,vUv-uvOffset);diffuseSum+=(sample1+sample2)*w;weightSum+=2.0*w;}gl_FragColor=vec4(diffuseSum/weightSum);}",void 0,{KERNEL_RADIUS:e,SIGMA:e}),this.uniforms.texSize={value:new t(.5,.5)},this.uniforms.direction={value:new t(.5,.5)}}set_size(e,t){this.uniforms.texSize.value.x=e,this.uniforms.texSize.value.y=t}set_direction(e,t){this.uniforms.direction.value.set(e,t)}}class Ot extends fe{constructor(e){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec3 defaultColor;uniform float defaultOpacity;uniform float luminosityThreshold;uniform float smoothWidth;varying vec2 vUv;void main(){vec4 texel=texture2D(_MainTex,vUv);vec3 luma=vec3(0.299,0.587,0.114);float v=dot(texel.xyz,luma);vec4 outputColor=vec4(defaultColor.rgb,defaultOpacity);float alpha=smoothstep(luminosityThreshold,luminosityThreshold+smoothWidth,v);gl_FragColor=mix(outputColor,texel,alpha);}"),this.uniforms.luminosityThreshold={value:.23},this.uniforms.smoothWidth={value:.01},this.uniforms.defaultColor={value:new r("#000000")},this.uniforms.defaultOpacity={value:0}}}class It{constructor(e=5){this.current_width=1,this.current_height=1,this.separableBlurMaterials=[],this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=e,this.kernelSizeArray=[3,5,7,9,11],this.rt_pars={minFilter:Y,magFilter:Y,format:k},this.renderTargetBright=new R(1,1,this.rt_pars),this.renderTargetBright.texture.generateMipmaps=!1,this.init_materials(),this.init_RT(),this.luminosity_high_pass_mat=new Ot}blur(e,t){this.resize_RT(e.width,e.height),t?ht.blit(e,this.renderTargetBright,this.luminosity_high_pass_mat):ht.blit(e,this.renderTargetBright);let s=this.renderTargetBright;for(let e=0;e<this.nMips;e++){const t=this.separableBlurMaterials[e];t.set_direction(1,0),ht.blit(s,this.renderTargetsHorizontal[e],t),t.set_direction(0,1),ht.blit(this.renderTargetsHorizontal[e],this.renderTargetsVertical[e],t),s=this.renderTargetsVertical[e]}}get_blurred_texture(){return this.renderTargetsHorizontal[0].texture}get_blurred_RT(){return this.renderTargetsHorizontal[0]}init_RT(){this.dispose_RT(),this.renderTargetBright.setSize(1,1);for(let e=0;e<this.nMips;e++){const e=new R(1,1,this.rt_pars),t=new R(1,1,this.rt_pars);e.texture.generateMipmaps=!1,t.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(e),this.renderTargetsVertical.push(t)}}resize_RT(e,t){if(this.current_width===e&&this.current_height===t)return;this.current_width=e,this.current_height=t;let s=Math.round(e/2),i=Math.round(t/2);this.renderTargetBright.setSize(s,i);for(let e=0;e<this.nMips;e++)this.renderTargetsVertical[e].setSize(s,i),this.renderTargetsHorizontal[e].setSize(s,i),this.separableBlurMaterials[e].set_size(s,i),s=Math.round(s/2),i=Math.round(i/2)}init_materials(e,t){this.dispose_materials();for(let e=0;e<this.nMips;e++)this.separableBlurMaterials.push(new jt(this.kernelSizeArray[e]))}dispose_materials(){for(let e=0;e<this.separableBlurMaterials.length;e++)this.separableBlurMaterials[e].dispose();this.separableBlurMaterials.length=0}dispose_RT(){for(let e=0;e<this.renderTargetsVertical.length;e++)this.renderTargetsHorizontal[e].dispose(),this.renderTargetsVertical[e].dispose();this.renderTargetBright.dispose(),this.renderTargetsHorizontal.length=0,this.renderTargetsVertical.length=0}}class Nt extends Te{constructor(){super(),this.bloom_compose_mat=void 0,this.main_RT=void 0,this.blur_RT=void 0,this.blurrer=void 0,this.add_mat=new ve}on_enter(){this.blurrer=new It,this.main_RT=new R(tt.width,tt.height),this.blur_RT=new R(tt.width,tt.height),this.bloom_compose_mat=new ye(5),this.blurrer=new It(5),this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture),this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture),this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture),this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture),this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture),this.bloom_compose_mat.set_bloom_strength(1),this.bloom_compose_mat.set_bloom_radius(1),this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture)}set_bloom_strength(e){this.bloom_compose_mat.set_bloom_strength(e)}set_bloom_radius(e){this.bloom_compose_mat.set_bloom_radius(e)}set_tint_color_0(e){this.bloom_compose_mat.set_tint_color_0(e)}set_tint_color_1(e){this.bloom_compose_mat.set_tint_color_1(e)}set_tint_color_2(e){this.bloom_compose_mat.set_tint_color_2(e)}set_tint_color_3(e){this.bloom_compose_mat.set_tint_color_3(e)}set_tint_color_4(e){this.bloom_compose_mat.set_tint_color_4(e)}render(){this.__check_RT_size(),ht.clear(this.main_RT,We.current,!0,!1),ht.render(Ze.current,We.current,this.main_RT),this.blurrer.blur(this.main_RT,!0),ht.material_pass(this.bloom_compose_mat,this.blurrer.renderTargetsHorizontal[0]),ht.blit(this.main_RT,void 0,this.add_mat)}__check_RT_size(){this.main_RT.width===tt.width&&this.main_RT.height===tt.height||(this.main_RT.setSize(tt.width,tt.height),this.blur_RT.setSize(tt.width,tt.height))}}class Bt extends Te{constructor(){super()}render(){Ze.current.on_pre_render&&Ze.current.on_pre_render(),Ze.current.render?Ze.current.render():ht.render(Ze.current,We.current,ht._renderer.getRenderTarget()),this.render_spectator_camera(),Ze.current.on_post_render&&Ze.current.on_post_render()}render_spectator_camera(){const e=We.spectator;if(e&&ht._renderer.xr.isPresenting){const t=ht._renderer.xr.getCamera(We.current);e.projectionMatrix.copy(We.current.projectionMatrix),e.position.copy(t.position),e.quaternion.copy(t.quaternion);const s=ht._renderer.getRenderTarget();ht._renderer.xr.isPresenting=!1,ht._renderer.setRenderTarget(null),ht._renderer.render(Ze.current,e),ht._renderer.setRenderTarget(s),ht._renderer.xr.isPresenting=!0}}}const qt=new class{constructor(){this.component_controllers=[],this.enabled_component_controllers=new Set}update(){this.__set_component_controllers_opacities();for(const e of this.enabled_component_controllers)e.update(qe.current_state_data)}register_component_controller(e){this.component_controllers.push(e)}enable_component_controller(e){this.enabled_component_controllers.add(e)}disable_component_controller(e){this.enabled_component_controllers.delete(e)}get(e){for(let t=0;t<this.component_controllers.length;t++)if(this.component_controllers[t].name===e)return this.component_controllers[t];console.error("[ViewComponentControllerManager.get] no component_controller found for: ",e)}__set_component_controllers_opacities(){for(let e=0;e<this.component_controllers.length;e++)this.component_controllers[e].set_opacity(qe.current_state_data)}};class Vt{constructor(e,t){e=e||new ge,this.target_application=e,this.graphics=t,this.is_running=!1,this.frames_passed=0,this.time_accumulator=0}update(){if(this.is_running){for(Ne.__update(),1===this.frames_passed&&this.target_application.on_post_start(),this.time_accumulator+=Ne.delta_time,this.target_application.before_update(),qe.before_update();this.time_accumulator>Ne.fixed_delta_time;)this.target_application.fixed_update(),qe.fixed_update(),this.time_accumulator-=Ne.fixed_delta_time;Ne.__set_frame_interpolation(this.time_accumulator/Ne.fixed_delta_time),this.target_application.update(),qe.update(),Ye.update(),qt.update(),this.target_application.on_pre_render(),this.graphics.update(),xt.update(),xt.render(this.graphics),this.target_application.on_post_render(),rt.render(this.graphics),this.target_application.on_frame_end(),this.frames_passed++,xt.clear(),rt.clear()}}start(){this.is_running||(0===this.frames_passed&&this.target_application.on_enter(),this.is_running=!0,this.graphics._renderer.setAnimationLoop(this.update.bind(this)))}stop(){!1!==this.is_running&&(this.is_running=!1,this.target_application.on_exit(),this.graphics._renderer.setAnimationLoop(null))}set_state(e){this.target_application.on_exit(this),this.target_application=e,this.target_application.on_enter(this)}dispose(){this.stop(),this.frames_passed=0}}const Yt=new class{constructor(){this.components=[],this.enabled_components=new Set}update(){this.__set_components_opacities();for(const e of this.enabled_components)e.update(qe.current_state_data)}register_component(e){this.components.push(e)}enable_component(e){this.enabled_components.add(e)}disable_component(e){this.enabled_components.delete(e)}get(e){for(let t=0;t<this.components.length;t++)if(this.components[t].name===e)return this.components[t];console.error("[ViewComponentManager.get] no component found for: ",e)}__set_components_opacities(){for(let e=0;e<this.components.length;e++)this.components[e].set_opacity(qe.current_state_data)}};class Gt{constructor({name:e,container:t}){this.name=e,this.container=t,Yt.register_component(this)}start(){}on_enter(){this.container.classList.remove("hidden"),Yt.enable_component(this)}update(){}on_exit(){this.container.classList.add("hidden"),Yt.disable_component(this)}set_opacity(e){this.container.style.opacity=e}}class Et{constructor({name:e}){this.name=e,this.current_opacity=0,this.hidden=!0,qt.register_component_controller(this)}start(){}on_enter(){qt.enable_component_controller(this),Ge.push(`${this.name}_component.on_enter`),this.hidden=!1}update(){Ge.push(`${this.name}_component.update`)}on_exit(){qt.disable_component_controller(this),Ge.push(`${this.name}_component.on_exit`),this.hidden=!0}set_opacity(e){const t=e[`${this.name}_opacity`];(this.current_opacity>t||this.current_opacity<t)&&(this.current_opacity=t,Ge.push(`${this.name}_component.set_opacity`,[t]),this.toggle_hidden())}toggle_hidden(){this.current_opacity>1e-4?this.hidden&&this.on_enter():this.hidden||this.on_exit()}}class Wt extends g{constructor(e,t,s,i){e=e||1,t=t||1,s=s||"#FF0000",i=i||new v({color:s});const r=new T(e,t);r.rotateX(-1.57),super(r,i)}}class Xt extends g{constructor(e,t,s,i){e=e||1,t=t||1,s=s||"#FF0000",i=i||new v({color:s});super(new T(e,t),i)}}class Qt{constructor(){}static merge_from_to(e,t){t.push.apply(t,e)}static expand_vec3_array(e,t){const s=t-e.length;for(let t=0;t<s;t++)e.push(e[t].clone())}static remove_elem(e,t){const s=e.indexOf(t);s>-1&&e.splice(s,1)}static get_closest_point(e,t){let s=e[0],i=s.distanceTo(t);for(let r=1;r<e.length;r++)e[r].distanceTo(t)<i&&(s=e[r],i=e[r].distanceTo(t));return s}static object_values_to_array(e){const t=Object.keys(e),s=[];for(let i=0;i<t.length;i++)s.push(e[t[i]]);return s}}class $t{constructor(){this.sphere=new j}fit_points(e,t,s,i){this.sphere.setFromPoints(e);const r=Math.degToRad(s/2),n=2*Math.atan(Math.tan(r)*i)/2,o=this.get_up_plane_normal(t,r),a=this.get_down_plane_normal(t,r),_=this.get_left_plane_normal(t,n),l=this.get_right_plane_normal(t,n),h=new c(0,0,-1).applyQuaternion(t),u=this.sphere.center.clone(),d=this.get_distance_to_fit_rect(2*this.sphere.radius,2*this.sphere.radius,s,i),p=u.clone().add(h.clone().multiplyScalar(-1*d)),m=(new O).setFromNormalAndCoplanarPoint(o,p),g=(new O).setFromNormalAndCoplanarPoint(a,p),f=(new O).setFromNormalAndCoplanarPoint(_,p),v=(new O).setFromNormalAndCoplanarPoint(l,p);this.apply_center_correction_to_pos(p,e,t,m,g,f,v),m.setFromNormalAndCoplanarPoint(o,p),g.setFromNormalAndCoplanarPoint(a,p),f.setFromNormalAndCoplanarPoint(_,p),v.setFromNormalAndCoplanarPoint(l,p);let x=1/0;const w=h.clone().multiplyScalar(-2*d);for(let t=0;t<e.length;t++){const s=new I(e[t].clone(),e[t].clone().add(w)),i=new c,r=new c,n=new c,o=new c;m.intersectLine(s,i),g.intersectLine(s,r),f.intersectLine(s,n),v.intersectLine(s,o),i.length()<1e-4&&console.log("up intersection not found",t),r.length()<1e-4&&console.log("down intersection not found",t),n.length()<1e-4&&console.log("left intersection not found",t),o.length()<1e-4&&console.log("right intersection not found",t);const a=e[t].clone().sub(i).length(),_=e[t].clone().sub(r).length(),l=e[t].clone().sub(n).length(),h=e[t].clone().sub(o).length(),u=Math.min(a,_),d=Math.min(l,h),p=Math.min(u,d);p<x&&(x=p)}const b=h.clone().multiplyScalar(x);return p.clone().add(b)}apply_center_correction_to_pos(e,t,s,i,r,n,o){const a=this.get_vertical_correction(t,r,i,s),_=this.get_hozirontal_correction(t,n,o,s);e.add(a),e.add(_)}get_vertical_correction(e,t,s,i){let r,n,o=1/0,a=1/0;const _=new c(0,1,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const l=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(-5e6))),h=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(5e6))),u=new c,d=new c;t.intersectLine(l,u),s.intersectLine(h,d);const p=u.distanceTo(e[i]),m=d.distanceTo(e[i]);d.length()<1e-4&&console.log("vertical up intersection not found",i),u.length()<1e-4&&console.log("vertical down intersection not found",i),p<a&&(a=p,n=e[i]),m<o&&(o=m,r=e[i])}console.log(r,n);const l=(o-a)/2;return _.clone().multiplyScalar(-l)}get_hozirontal_correction(e,t,s,i){let r,n,o=1/0,a=1/0;const _=new c(1,0,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const l=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(-5e6))),h=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(5e6))),u=new c,d=new c;t.intersectLine(l,u),s.intersectLine(h,d);const p=u.distanceTo(e[i]),m=d.distanceTo(e[i]);u.length()<1e-4&&console.log("left intersection not found",i),d.length()<1e-4&&console.log("right intersection not found",i),p<a&&(a=p,n=e[i]),m<o&&(o=m,r=e[i])}const l=(o-a)/2;return console.log(r,n),_.clone().multiplyScalar(-l)}get_up_plane_normal(e,t){const s=new c(0,-1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),t)),s.applyQuaternion(e),s}get_down_plane_normal(e,t){const s=new c(0,1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),-t)),s.applyQuaternion(e),s}get_left_plane_normal(e,t){const s=new c(1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),t)),s.applyQuaternion(e),s}get_right_plane_normal(e,t){const s=new c(-1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),-t)),s.applyQuaternion(e),s}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}class Ht{static convert_to_non_indexed_geometry(e){const t=e.index,s=e.getAttribute("position"),i=[];for(let e=0;e<t.count;e+=3)i.push(s.getX(t.array[e+0])),i.push(s.getY(t.array[e+0])),i.push(s.getZ(t.array[e+0])),i.push(s.getX(t.array[e+1])),i.push(s.getY(t.array[e+1])),i.push(s.getZ(t.array[e+1])),i.push(s.getX(t.array[e+2])),i.push(s.getY(t.array[e+2])),i.push(s.getZ(t.array[e+2]));const r=new d;return r.setAttribute("position",new U(new Float32Array(i),3)),Ht.add_barycentric_attribute(r),r}static add_barycentric_attribute(e){const t=[],s=e.getAttribute("position");for(let e=0;e<s.count;e+=3)t.push(1),t.push(0),t.push(0),t.push(0),t.push(1),t.push(0),t.push(0),t.push(0),t.push(1);e.setAttribute("barycentric",new U(new Float32Array(t),3))}}class Zt{static load_images(e){const t=e.querySelectorAll("img");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}const s=e.querySelectorAll("object");for(let e=0;e<s.length;e++){const t=s[e];t.dataset.src&&(t.data=t.dataset.src)}}static load_videos(e){const t=e.querySelectorAll("video");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}}static load_iframes(e){const t=e.querySelectorAll("iframe");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}}static load_elements(e,t){const s=e.querySelectorAll(t);for(let e=0;e<s.length;e++){const t=s[e];t.dataset.src&&(t.src=t.dataset.src)}}}class Jt{constructor(){}static get_image_data(e){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;const s=t.getContext("2d");return s.drawImage(e,0,0),s.getImageData(0,0,e.width,e.height)}static get_pixel(e,t,s){const i=4*(t+e.width*s),r=e.data;return new M(r[i+0],r[i+1],r[i+2],r[i+3])}}const Kt=new class{constructor(){}sample(e,s){const i=[];let r=99999999;const n=e.getAttribute("position"),o=e.getAttribute("normal"),a=e.getAttribute("tangent"),_=e.getAttribute("uv"),l=e.index,h=[];for(let e=0;e<l.count;e+=3){const s=l.array[e+0],u=l.array[e+1],d=l.array[e+2],p=new c;p.x=n.getX(s),p.y=n.getY(s),p.z=n.getZ(s);const m=new c;m.x=n.getX(u),m.y=n.getY(u),m.z=n.getZ(u);const g=new c;g.x=n.getX(d),g.y=n.getY(d),g.z=n.getZ(d);const f={a:p,b:m,c:g};if(o){const e=new c;e.x=o.getX(s),e.y=o.getY(s),e.z=o.getZ(s);const t=new c;t.x=o.getX(u),t.y=o.getY(u),t.z=o.getZ(u);const i=new c;i.x=o.getX(d),i.y=o.getY(d),i.z=o.getZ(d);const r=e.clone().add(t).add(i).normalize();f.normal=r}if(a){const e=new c;e.x=a.getX(s),e.y=a.getY(s),e.z=a.getZ(s);const t=new c;t.x=a.getX(u),t.y=a.getY(u),t.z=a.getZ(u);const i=new c;i.x=a.getX(d),i.y=a.getY(d),i.z=a.getZ(d);const r=e.clone().add(t).add(i).normalize();f.tangent=r}if(_){const e=new t;e.x=_.getX(s),e.y=_.getY(s);const i=new t;i.x=_.getX(u),i.y=_.getY(u);const r=new t;r.x=_.getX(d),r.y=_.getY(d),f.uv_a=e,f.uv_b=i,f.uv_c=r}h.push(f);const v=this.get_face_area(f);r=Math.min(v,r),i.push(v)}const u=this.get_uniform_face_distribution(i,r,h),d=this.select_random_faces(u,s);return this.sample_data_from_faces(d)}sample_data_from_faces(e){const t=[],s=[],i=[],r=[];for(let n=0;n<e.length;n++){const o=e[n],a=Math.random(),_=Math.random();t.push(this.sample_point_in_face(a,_,o.a,o.b,o.c).clone()),o.normal&&s.push(o.normal.clone()),o.tangent&&i.push(o.tangent.clone()),o.uv_a&&r.push(this.sample_point_in_face(a,_,o.uv_a,o.uv_b,o.uv_c).clone())}return{points:t,normals:s,tangents:i,uvs:r}}select_random_faces(e,t){const s=[];for(let i=0;i<t;i++){const t=e[Math.floor(Math.random()*e.length)];s.push(t)}return s}get_uniform_face_distribution(e,t,s){const i=[];for(let r=0;r<e.length;r++){e[r]/=t;const n=Math.floor(Math.round(e[r]));for(let e=0;e<n;e++)i.push(s[r])}return i}get_face_area(e){const t=e.b.clone().sub(e.a),s=e.c.clone().sub(e.a);return t.cross(s).length()/2}sample_point_in_face(e,t,s,i,r){e+t>1&&(e=1-e,t=1-t);const n=1-(e+t);return s.clone().multiplyScalar(e).add(i.clone().multiplyScalar(t)).add(r.clone().multiplyScalar(n))}};const es=new class{get_mesh(e,t){e.traverse((e=>{e instanceof g&&(e.geometry&&(e.geometry=(new d).fromGeometry(e.geometry)),t(e))}))}get_geometries(e){const t=[];return this.get_mesh(e,(e=>{t.push(e.geometry)})),t}assign_material(e,t,s){e.traverse((e=>{e instanceof g&&(void 0===s||e.name===s)&&(e.material=t)}))}clone_animated_gltf(e){const t={animations:e.animations,scene:e.scene.clone(!0)},s={};e.scene.traverse((e=>{e.isSkinnedMesh&&(s[e.name]=e)}));const i={},r={};t.scene.traverse((e=>{e.isBone&&(i[e.name]=e),e.isSkinnedMesh&&(r[e.name]=e)}));for(const e in s){const t=s[e].skeleton,n=r[e],o=[];for(let e=0;e<t.bones.length;++e){const s=i[t.bones[e].name];o.push(s)}n.bind(new G(o,t.boneInverses),n.matrixWorld)}return t}set_shadow_config(e,t,s){e.traverse((e=>{e instanceof g&&(e.castShadow=t,e.receiveShadow=s)}))}__find_object(e,t,s){e.traverse((e=>{e.name===t&&s(e)}))}get_object(e,t){let s;return e.traverse((e=>{e.name===t&&(s=e)})),s}get_object_by_type(e,t){let s;return e.traverse((e=>{e.constructor.name===t&&(s=e)})),s}};class ts{static is_object(e){return e&&"object"==typeof e&&!Array.isArray(e)}static merge_deep(e,...t){if(!t.length)return e;const s=t.shift();if(ts.is_object(e)&&ts.is_object(s))for(const t in s)ts.is_object(s[t])?(e[t]||Object.assign(e,{[t]:{}}),ts.merge_deep(e[t],s[t])):Object.assign(e,{[t]:s[t]});return ts.merge_deep(e,...t)}static xml_to_json(e){let t={};if(1===e.nodeType){if(e.attributes.length>0){t["@attributes"]={};for(let s=0;s<e.attributes.length;s++){const i=e.attributes.item(s);t["@attributes"][i.nodeName]=i.nodeValue}}}else 3===e.nodeType&&(t=e.nodeValue);if(e.hasChildNodes())for(let s=0;s<e.childNodes.length;s++){const i=e.childNodes.item(s),r=i.nodeName;if(void 0===t[r])t[r]=this.xml_to_json(i);else{if(void 0===t[r].push){const e=t[r];t[r]=[],t[r].push(e)}t[r].push(this.xml_to_json(i))}}return t}}class ss{constructor(){}static get_random_color(){const e=[0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"];let t="#";for(let s=0;s<6;s++){t+=e[Math.floor(Math.random()*e.length)]}return t}static capitalize(e){const t=e.split(" ");for(let e=0;e<t.length;e++)t[e]=t[e][0].toUpperCase()+t[e].substr(1);return t.join(" ")}static capitalize_first_letter(e){return e.charAt(0).toUpperCase()+e.slice(1)}static snake_to_camelcase(e){return e.toLowerCase().replace(/[-_][a-z0-9]/g,(e=>e.slice(-1).toUpperCase()))}}class is{constructor(){}time_str_to_ms(e){e=e.split(":");let t=Number(e[0]);t=60*t*60*1e3;let s=Number(e[1]);s=60*s*1e3;let i=Number(e[2]);return i*=1e3,t+s+i}}class rs extends g{constructor(){const t=new e({uniforms:{_Color:{value:new r("#919191")}},vertexShader:"#define GLSLIFY 1\nattribute vec3 barycentric;varying vec3 vBarycentric;void main(){mat4 VP=projectionMatrix*viewMatrix;vec3 pos=(modelMatrix*vec4(position,1.0)).xyz;gl_Position=VP*vec4(pos,1.0);vBarycentric=barycentric;}",fragmentShader:"#define GLSLIFY 1\nuniform vec3 _Color;varying vec3 vBarycentric;float edgeFactor(vec3 baryc){vec3 d=fwidth(baryc);vec3 a3=smoothstep(vec3(0.0),d*1.5,baryc);return min(min(a3.x,a3.y),a3.z);}void main(){float alpha=edgeFactor(vBarycentric+vec3(1.,1.,0.));gl_FragColor.rgb=mix(_Color,vec3(0.),alpha);gl_FragColor.a=1.0-alpha;gl_FragColor.a*=0.2;}",extensions:{derivatives:!0},transparent:!0,depthWrite:!1}),s=new T(100,100,100,100);super(Ht.convert_to_non_indexed_geometry(s),t),this.rotation.x=-1.57}}class ns extends g{constructor(t){const s=new d;s.setAttribute("position",new U(new Float32Array([]),3)),s.setAttribute("next_position",new U(new Float32Array([]),3)),s.setAttribute("previous_position",new U(new Float32Array([]),3)),s.setAttribute("orientation",new U(new Float32Array([]),1)),s.setAttribute("coverage",new U(new Float32Array([]),1));super(s,new e({uniforms:{_Thickness:{value:.2},_Length:{value:0},_ElapsedTime:{value:0},_Color:{value:new r("#FF0000")}},vertexShader:"#define GLSLIFY 1\nuniform float _Thickness;attribute vec3 next_position;attribute vec3 previous_position;attribute float orientation;attribute float coverage;varying float line_coverage;varying float uv_u;vec3 w_space_normal(vec3 from,vec3 to){vec3 w_from=(modelMatrix*vec4(from,1.0)).xyz;vec3 w_to=(modelMatrix*vec4(to,1.0)).xyz;vec3 z=normalize(w_to-w_from);return normalize(cross(z,normalize(cameraPosition-w_from)));}void main(){mat4 VP=projectionMatrix*viewMatrix;vec3 pos=position;vec3 normal=w_space_normal(next_position,previous_position);pos=(modelMatrix*vec4(pos,1.0)).xyz;pos+=normal*(_Thickness*0.5)*orientation;gl_Position=VP*vec4(pos,1.0);line_coverage=coverage;uv_u=orientation*0.5+0.5;}",fragmentShader:"#define GLSLIFY 1\nuniform float _Length;uniform float _ElapsedTime;uniform float _Thickness;uniform vec3 _Color;varying float line_coverage;varying float uv_u;float aastep(float threshold,float value){\n#ifdef GL_OES_standard_derivatives\nfloat afwidth=length(vec2(dFdx(value),dFdy(value)))*0.70710678118654757;return smoothstep(threshold-afwidth,threshold+afwidth,value);\n#else\nreturn step(threshold,value);\n#endif\n}void main(){float u=(1.0-abs(uv_u*2.0-1.0));float diffuse=dot(vec2(u,u),vec2(0.0,1.0))*0.5+0.5;gl_FragColor=vec4(_Color*diffuse,1.0);}",transparent:!0,depthWrite:!1,extensions:{derivatives:!0}})),t&&this.setup(t)}setup(e){const t=[],s=[],i=[],r=[],n=[];let o=0;for(let a=0;a<e.length;a++){t.push(e[a].x),t.push(e[a].y),t.push(e[a].z),r.push(1),t.push(e[a].x),t.push(e[a].y),t.push(e[a].z),r.push(-1);const _=this.__get_next_position(e,a);s.push(_.x),s.push(_.y),s.push(_.z),s.push(_.x),s.push(_.y),s.push(_.z);const l=this.__get_previous_position(e,a);i.push(l.x),i.push(l.y),i.push(l.z),i.push(l.x),i.push(l.y),i.push(l.z),n.push(o),n.push(o),a<e.length-1&&(o+=e[a].distanceTo(_))}const a=new Float32Array(t),_=new Float32Array(s),l=new Float32Array(i),h=new Float32Array(r),c=new Float32Array(n),u=[];for(let e=0;e<(a.length/3-2)/2;e++){const t=2*e+1;u.push(t),u.push(t+1),u.push(t-1),u.push(t),u.push(t+2),u.push(t+1)}this.geometry.setIndex(u),this.geometry.getAttribute("position").copy(new U(a,3)),this.geometry.getAttribute("next_position").copy(new U(_,3)),this.geometry.getAttribute("previous_position").copy(new U(l,3)),this.geometry.getAttribute("orientation").copy(new U(h,1)),this.geometry.getAttribute("coverage").copy(new U(c,1)),this.geometry.getAttribute("position").needsUpdate=!0,this.geometry.getAttribute("next_position").needsUpdate=!0,this.geometry.getAttribute("previous_position").needsUpdate=!0,this.geometry.getAttribute("orientation").needsUpdate=!0,this.geometry.getAttribute("coverage").needsUpdate=!0,this.material.uniforms._Length.value=o,this._length=o}set thickness(e){this.material.uniforms._Thickness.value=e}get thickness(){return this.material.uniforms._Thickness.value}__get_previous_position(e,t){return 0===t?e[1].clone().sub(e[0]).multiplyScalar(-1).add(e[0]):e[t-1]}__get_next_position(e,t){return t===e.length-1?e[e.length-2].clone().sub(e[e.length-1]).multiplyScalar(-1).add(e[e.length-1]):e[t+1]}update(){}distance(){return this.accumulated_length}total_length(){return this.accumulated_length}dispose(){this.geometry.dispose(),this.material.dispose(),this.parent&&this.parent.remove(this)}set color(e){this.material.uniforms._Color.value.set(e)}get color(){return this.material.uniforms._Color.value}copy_color(e){this.material.uniforms._Color.value.copy(e)}}class os extends g{constructor(s,i){i=i||new t(0,0);const r=new e({uniforms:{_MainTex:{value:s},_ScreenAligned:{value:0},_Scale:{value:1},_Opacity:{value:1}},vertexShader:"#define GLSLIFY 1\nvarying vec2 vUv;uniform float _ScreenAligned;uniform float _Scale;void main(){vec3 pos=position;mat4 local_to_camera=modelViewMatrix;float scale=_Scale;local_to_camera[0]=mix(modelViewMatrix[0],vec4(1.0*scale,0.0,0.0,0.0),_ScreenAligned);local_to_camera[1]=mix(modelViewMatrix[1],vec4(0.0,1.0*scale,0.0,0.0),_ScreenAligned);local_to_camera[2]=mix(modelViewMatrix[2],vec4(0.0,0.0,1.0*scale,0.0),_ScreenAligned);gl_Position=projectionMatrix*local_to_camera*vec4(pos,1.0);vUv=uv;}",fragmentShader:"#define GLSLIFY 1\nuniform sampler2D _MainTex;varying vec2 vUv;uniform float _Opacity;void main(){gl_FragColor=texture2D(_MainTex,vUv);gl_FragColor.a*=_Opacity;}",transparent:!0,depthWrite:!1,side:E}),n=new T(1,1,1);n.translate(-i.x/2,-i.y/2,0);const o=s.image.width/s.image.height;n.scale(o,1,1),super(n,r),this.current_scale=o,this.geometry.computeBoundingBox(),this.tmp_bb_size=new c,this.geometry.boundingBox.getSize(this.tmp_bb_size)}update_texture(){this.material.uniforms._MainTex.value.needsUpdate=!0;const e=this.material.uniforms._MainTex.value.image;this.geometry.scale(1/this.current_scale,1,1),this.current_scale=e.width/e.height,this.geometry.scale(this.current_scale,1,1),this.geometry.computeBoundingBox(),this.geometry.boundingBox.getSize(this.tmp_bb_size)}get size(){return this.tmp_bb_size.clone().multiplyScalar(this.scale.x)}set size(e){this.scale.set(e,e,e),this.material.uniforms._Scale.value=e}set screen_aligned(e){this.material.uniforms._ScreenAligned.value=!0===e?1:0}get screen_aligned(){return 1===this.material.uniforms._ScreenAligned.value}set opacity(e){this.material.uniforms._Opacity.value=e}get opacity(){return this.material.uniforms._Opacity.value}dispose(){this.geometry.dispose(),this.parent.remove(this),this.material.uniforms._MainTex.value.dispose(),this.material.dispose()}}class as extends os{constructor(e,t,s,i,r){const n=new Qe(r),o={font:t,font_color:s||"#000000"},a=n.draw_on_texture(e,o);a.minFilter=W,a.minFilter=Y,a.needsUpdate=!0,super(a,i),this.simple_text_drawer=n,this.canvas_texture=a,this.draw_settings=o}set text(e){this.simple_text_drawer.draw_canvas(e,this.draw_settings),this.update_texture()}get text(){return"not implemented"}}class _s extends be{constructor(e=1){super("#define GLSLIFY 1\nuniform vec2 _ScreenSize;uniform vec2 _TextureSize;uniform vec2 _PixelOffset;uniform vec3 _NDC;uniform vec2 _PivotPoint;uniform float _DepthOffset;varying vec2 vUv;vec2 add_pixel_offset(vec2 pos){pos=pos*0.5+0.5;pos*=_ScreenSize;pos=ceil(pos+_PixelOffset)+0.5;pos/=_ScreenSize;return pos*2.0-1.0;}void main(){vec4 projected_pos=projectionMatrix*viewMatrix*vec4(_NDC,1.0);projected_pos.zw+=_DepthOffset;projected_pos.xyz/=projected_pos.w;vec2 normalized_size=_TextureSize/_ScreenSize;vec2 dir=uv*2.0-1.0;dir-=_PivotPoint;vec2 pos=projected_pos.xy+dir*normalized_size;gl_Position=vec4(add_pixel_offset(pos),projected_pos.z,1.0);vUv=uv;}","#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _ScreenSize;uniform vec2 _TextureSize;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv+vec2(0.5,0.5)/_TextureSize);}",{_MainTex:{value:void 0},_ScreenSize:{value:new t(tt.width,tt.height)},_TextureSize:{value:new t},_PixelOffset:{value:new t(0,0)},_NDC:{value:new c},_PivotPoint:{value:new t},_DepthOffset:{value:0}}),this.transparent=!0,this.depthWrite=!1,this.depthTest=!1}}class ls{constructor(){this.tmp_vec=new t}get_pos_NDC(e){return this.tmp_vec.set(e.x,e.y)}}class hs{constructor(){this.tmp_vec3=new c,this.tmp_vec2=new t}get_pos_NDC(e){return this.tmp_vec3.copy(e),this.tmp_vec3.project(We.current),this.tmp_vec2.set(this.tmp_vec3.x,this.tmp_vec3.y)}}class cs{constructor(){}update(e,t){}on_enter(e){}on_exit(e){}}class us extends cs{constructor(){super()}update(e,t){e.is_mouse_over(t)&&e.set_state(e._on_enter_state)}}class ds extends cs{constructor(){super()}on_enter(e){e.on_mouse_enter()}update(e,t){e.is_mouse_over(t)?e.set_state(e._on_hover_state):e.set_state(e._on_exit_state)}}class ps extends cs{constructor(){super()}on_enter(e){e.on_mouse_exit(),e.set_state(e._on_idle_state)}}class ms extends cs{constructor(){super()}on_enter(e){this.__trigger_on_hover(e)}update(e,t){e.is_mouse_over(t)?this.__trigger_on_hover(e):e.set_state(e._on_exit_state)}__trigger_on_hover(e){e.on_mouse_hover()}}class gs extends g{constructor(e,s){super(new T(1,1),new _s),this.is_clickable=!1,this.position_strategy=new hs,this.current_state=new us,this._position=new c,this._on_idle_state=new us,this._on_enter_state=new ds,this._on_exit_state=new ps,this._on_hover_state=new ms,this.on_enter=void 0,this.on_exit=void 0,this.on_hover=void 0,this.mouse_pos_tmp=new t,this.cached_NDC_position=new t,this.screen_pos_tmp=new t,this.texture_size=new t(1,1),this.frustumCulled=!1,this.matrixAutoUpdate=!1,this.renderOrder=0,this.size=1,this.pixel_offset=new t}set_render_order(e){this.renderOrder=e}get pivot_point(){return this.material.uniforms._PivotPoint.value}set_pixel_offset(e){this.pixel_offset.copy(e),this.material.uniforms._PixelOffset.value.copy(e)}set_state(e){this.current_state.on_exit(this),this.current_state=e,this.current_state.on_enter(this)}get position(){return this._position}set use_depth(e){this.material.depthTest=e}get use_depth(){return this.material.depthTest}set depth_offset(e){this.material.uniforms._DepthOffset.value=e}get depth_offset(){return this.material.uniforms._DepthOffset.value}clear_state(){this.visible=!1}set_world_space_coordinate_system(){this.position_strategy=new hs}set_screen_space_coordinate_system(){this.position_strategy=new ls}set_texture(e){e.minFilter=l,e.magFilter=l,e.needsUpdate=!0,this.texture_size.set(e.image.width,e.image.height),this.material.uniforms._MainTex.value=e,this.get_size(this.material.uniforms._TextureSize.value),this.visible=!0}update_state(e){this.material.uniforms._ScreenSize.value.set(tt.width,tt.height),this.get_size(this.material.uniforms._TextureSize.value),this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position)),this.material.uniforms._NDC.value.copy(this.position),this.current_state.update(this,e)}is_mouse_over(e){this.screen_pos_tmp.copy(this.cached_NDC_position),this.to_screen_position(this.screen_pos_tmp),this.screen_pos_tmp.x+=this.pixel_offset.x,this.screen_pos_tmp.y+=this.pixel_offset.y;const t=(new X).setFromCenterAndSize(this.screen_pos_tmp,this.get_size());return this.mouse_pos_tmp.copy(e),this.to_screen_position(this.mouse_pos_tmp),t.containsPoint(this.mouse_pos_tmp)}to_screen_position(e){e.x=(.5*e.x+.5)*tt.width+this.pixel_offset.x,e.y=(.5*e.y+.5)*tt.height+this.pixel_offset.y}get_screen_space_position(){const e=this.cached_NDC_position.clone();return this.to_screen_position(e),e}set_screen_space_position(e){this.position.x=e.x/tt.width*2-1,this.position.y=e.y/tt.height*2-1}dispose(){this.material.uniforms._MainTex.value&&this.material.uniforms._MainTex.value.dispose(),this.geometry.dispose(),this.material.dispose()}get_size(e){return e?e.copy(this.texture_size).multiplyScalar(this.size/tt.dpr):(new t).copy(this.texture_size).multiplyScalar(this.size/tt.dpr)}on_mouse_enter(){}on_mouse_exit(){}on_mouse_hover(){}}class fs extends g{constructor(e,t){super(e,t);const s=this;this.onBeforeRender=()=>{s.material.update()}}}class vs{constructor(e,s,i){const r=s.right-s.left,n=s.top-s.bottom;this.scale=new t(r,n),this.position=new t(e+s.left,s.bottom),this.atlas_bounds=new M(i.left,i.right,i.top,i.bottom)}}class xs{constructor(e,s=""){this.glyph_layout=e,this.glyphs=[],this.glyph_is_dirty=!0,this.matrix_is_dirty=!0,this.color_is_dirty=!0,this.position=new c,this.quaternion=new N,this.scale=new c(1,1,1),this.matrix=new B,this.color=new r("#FFFFFF"),this.pivot_point=new t,this.__opacity=1,this.__text=s,this.__generate_glyphs(s)}set text(e){this.__text=e,this.__generate_glyphs(e),this.matrix_is_dirty=!0}get text(){return this.__text}update_matrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrix_is_dirty=!1,this.glyph_is_dirty=!0}clear_glyph_dirty(){this.glyph_is_dirty=!1}clear_color_dirty(){this.color_is_dirty=!1}set_rotation(e=0,t=0){const s=(new N).setFromAxisAngle(new c(0,1,0),e/360*Math.PI*2),i=(new N).setFromAxisAngle(new c(1,0,0),-t/360*Math.PI*2);this.quaternion.copy(s.multiply(i)),this.matrix_is_dirty=!0}set_position(e){this.position.copy(e),this.matrix_is_dirty=!0}set_size(e){this.scale.set(e,e,e),this.matrix_is_dirty=!0}set_color(e){this.color.set(e),this.color_is_dirty=!0}set_pivot(e){this.pivot_point.copy(e),this.update_glyphs()}set opacity(e){this.__opacity=e,this.color_is_dirty=!0}get opacity(){return this.__opacity}update_glyphs(){this.__generate_glyphs(this.text)}__generate_glyphs(e){let s=0;this.glyphs.length=0;for(let t=0;t<e.length;t++){const i=e.charCodeAt(t),r=this.glyph_layout.find((e=>e.unicode===i));if(r){if(r.planeBounds){const e=new vs(s,r.planeBounds,r.atlasBounds);this.glyphs.push(e)}s+=r.advance}}const i=new X,r=this.glyphs[0];i.setFromCenterAndSize(r.position.clone().add(new t(r.scale.x/2,r.scale.y/2)),r.scale);for(let e=1;e<this.glyphs.length;e++){const s=this.glyphs[e],r=(new X).setFromCenterAndSize(s.position.clone().add(new t(s.scale.x/2,s.scale.y/2)),s.scale);i.union(r)}const n=new t;i.getSize(n);for(let e=0;e<this.glyphs.length;e++)this.glyphs[e].position.x-=n.x/2,this.glyphs[e].position.y-=n.y/2,this.glyphs[e].position.x+=n.x/2*this.pivot_point.x,this.glyphs[e].position.y+=n.y/2*this.pivot_point.y;this.glyph_is_dirty=!0}}class ws extends be{constructor(e){super("#define GLSLIFY 1\nattribute vec4 transformsCol0;attribute vec4 transformsCol1;attribute vec4 transformsCol2;attribute vec4 transformsCol3;attribute vec4 glyph_bounds;attribute vec4 plane_bounds;attribute vec4 color;varying vec2 vUv;varying vec4 v_glyph_bounds;varying vec4 v_color;void main(){vec4 pos=vec4(position,1.0);pos.x*=plane_bounds.z;pos.y*=plane_bounds.w;pos.x+=plane_bounds.x;pos.y+=plane_bounds.y;mat4 offset_matrix=mat4(transformsCol0,transformsCol1,transformsCol2,transformsCol3);gl_Position=projectionMatrix*viewMatrix*offset_matrix*pos;vUv=uv;v_glyph_bounds=glyph_bounds;v_color=color;}","#define GLSLIFY 1\nuniform sampler2D _Texture;uniform float _Boldness;varying vec2 vUv;uniform vec2 _AtlasSize;varying vec4 v_glyph_bounds;varying vec4 v_color;float median(float r,float g,float b){return max(min(r,g),min(max(r,g),b));}void main(){float left=v_glyph_bounds.x/_AtlasSize.x;float right=v_glyph_bounds.y/_AtlasSize.x;float top=v_glyph_bounds.z/_AtlasSize.y;float bottom=v_glyph_bounds.w/_AtlasSize.y;float width=abs(right-left);float height=abs(top-bottom);vec2 coord=vec2(vUv.x*width+left,vUv.y*height+top-height);vec4 col=texture2D(_Texture,coord);float sig_dist=median(col.r,col.g,col.b);float _Cutoff=_Boldness;float dist=(_Cutoff-sig_dist);vec2 ddist=vec2(dFdx(dist),dFdy(dist));float pixelDist=dist/length(ddist);float opacity=clamp(0.5-pixelDist,0.0,1.0);gl_FragColor=vec4(v_color.rgb,opacity*v_color.a);}",{_Texture:{value:e},_Boldness:{value:.5},_AtlasSize:{value:new t(1,1)}}),this.transparent=!0,this.extensions={derivatives:!0},this.depthWrite=!1,this.side=E,e.minFilter=Y,e.magFilter=Y,e.generateMipMaps=!1}set_atlas_size(e){this.uniforms._AtlasSize.value.copy(e)}set_boldness(e){this.uniforms._Boldness.value=ke.lerp(.5,.2,e)}}class bs extends g{constructor(e,s){const i=new Q;i.instanceCount=0;const r=new T(1,1);r.translate(.5,.5,0),i.setAttribute("position",new $(r.getAttribute("position").array,3)),i.setAttribute("uv",new $(r.getAttribute("uv").array,2)),i.index=r.index;const n=new H(new Float32Array(8e3),4,!1),o=new H(new Float32Array(8e3),4,!1),a=new H(new Float32Array(8e3),4,!1),_=new H(new Float32Array(8e3),4,!1),l=new H(new Float32Array(8e3),4,!1),h=new H(new Float32Array(8e3),4,!1),c=new H(new Float32Array(8e3),4,!1);n.usage=Z,o.usage=Z,a.usage=Z,_.usage=Z,l.usage=Z,h.usage=Z,c.usage=Z,i.setAttribute("transformsCol0",n),i.setAttribute("transformsCol1",o),i.setAttribute("transformsCol2",a),i.setAttribute("transformsCol3",_),i.setAttribute("glyph_bounds",l),i.setAttribute("plane_bounds",h),i.setAttribute("color",c),super(i,new ws(s)),this.text_elements=[],this.font_layout=e,this.material.set_atlas_size(new t(e.atlas.width,e.atlas.height)),this.frustumCulled=!1}set_boldness(e){this.material.set_boldness(e)}add_text(e){const t=new xs(this.font_layout.glyphs,e);return this.text_elements.push(t),t}remove_text(e){Qt.remove_elem(this.text_elements,e),this.update(!0)}update(e){const t=this.geometry.getAttribute("glyph_bounds"),s=this.geometry.getAttribute("plane_bounds"),i=this.geometry.getAttribute("transformsCol0"),r=this.geometry.getAttribute("transformsCol1"),n=this.geometry.getAttribute("transformsCol2"),o=this.geometry.getAttribute("transformsCol3"),a=this.geometry.getAttribute("color");let _=!0===e,l=!0===e,h=!0===e,c=0;for(let e=0;e<this.text_elements.length;e++){const u=this.text_elements[e];u.matrix_is_dirty&&(_=!0,u.update_matrix()),u.glyph_is_dirty&&(l=!0,u.clear_glyph_dirty()),u.color_is_dirty&&(h=!0,u.clear_color_dirty());const d=u.matrix,p=u.color,m=u.opacity;for(let e=0;e<u.glyphs.length;e++){const _=u.glyphs[e],l=c;t.setXYZW(l,_.atlas_bounds.x,_.atlas_bounds.y,_.atlas_bounds.z,_.atlas_bounds.w),s.setXYZW(l,_.position.x,_.position.y,_.scale.x,_.scale.y),i.setXYZW(l,d.elements[0],d.elements[1],d.elements[2],d.elements[3]),r.setXYZW(l,d.elements[4],d.elements[5],d.elements[6],d.elements[7]),n.setXYZW(l,d.elements[8],d.elements[9],d.elements[10],d.elements[11]),o.setXYZW(l,d.elements[12],d.elements[13],d.elements[14],d.elements[15]),a.setXYZW(l,p.r,p.g,p.b,m),c++}}this.geometry.instanceCount=c,c>this.max_allocations&&console.error("SDFTextBatch exceeded maximum glyph allocations(max/current): ",this.max_allocations,c,this),_&&(i.needsUpdate=!0,r.needsUpdate=!0,n.needsUpdate=!0,o.needsUpdate=!0),l&&(t.needsUpdate=!0,s.needsUpdate=!0),h&&(a.needsUpdate=!0)}dispose(){this.geometry.dispose(),this.material.dispose()}}class ys extends Le{constructor(e,t=0,s=1,i="linear"){super(i),this.attribute_name=e,this.from=t,this.to=s}update(e,t){const s=this.from.clone();s.lerp(this.to,this.easing_function(t)),e[this.attribute_name].copy(s)}}class Ts extends fe{constructor(e){super(e?"#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;vec4 upsample(vec2 uv,vec2 halfpixel){vec4 sum=texture2D(_MainTex,uv+vec2(-halfpixel.x*2.0,0.0));sum+=texture2D(_MainTex,uv+vec2(-halfpixel.x,halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(0.0,halfpixel.y*2.0));sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(halfpixel.x*2.0,0.0));sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,-halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(0.0,-halfpixel.y*2.0));sum+=texture2D(_MainTex,uv+vec2(-halfpixel.x,-halfpixel.y))*2.0;return sum/12.0;}void main(){vec2 half_pixel;half_pixel.x=0.5/_Resolution.x;half_pixel.y=0.5/_Resolution.y;gl_FragColor=upsample(vUv,half_pixel);}":"#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;vec4 downsample(vec2 uv,vec2 halfpixel){vec4 sum=texture2D(_MainTex,uv)*4.0;sum+=texture2D(_MainTex,uv-halfpixel);sum+=texture2D(_MainTex,uv+halfpixel);sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,-halfpixel.y));sum+=texture2D(_MainTex,uv-vec2(halfpixel.x,-halfpixel.y));return sum/8.0;}void main(){vec2 half_pixel=vec2(0.5/_Resolution.x,0.5/_Resolution.y);gl_FragColor=downsample(vUv,half_pixel);}")}}class Ms extends fe{constructor(e,t){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;void main(){vec4 col=texture2D(_MainTex,vUv);gl_FragColor=col;gl_FragColor.a=col.a;}")}set offset(e){this.uniforms._Offset.value=e}get offset(){return this.uniforms._Offset.value}}class Ss{constructor(e){this.current_width=1,this.current_height=1,this.RT0=new R(1,1),this.RT1=new R(1,1),this.RT2=new R(1,1),this.RT3=new R(1,1),this.RT4=new R(1,1),this.upscale_blur_mat=new Ts(!0),this.downscale_blur_mat=new Ts(!1),this.alpha_filter_mat=new Ms}blur(e){this.check_RT_resize(e.width,e.height),ht.blit(e,this.RT1,this.alpha_filter_mat),ht.blit(this.RT1,this.RT2,this.downscale_blur_mat),ht.blit(this.RT2,this.RT3,this.downscale_blur_mat),ht.blit(this.RT3,this.RT4,this.downscale_blur_mat),ht.blit(this.RT4,this.RT3,this.upscale_blur_mat),ht.blit(this.RT3,this.RT2,this.upscale_blur_mat),ht.blit(this.RT2,e,this.upscale_blur_mat)}check_RT_resize(e,t){this.current_width===e&&this.current_height===t||(this.current_width=e,this.current_height=t,this.RT0.setSize(this.current_width/2,this.current_height/2),this.RT1.setSize(this.current_width/2,this.current_height/2),this.RT2.setSize(this.current_width/4,this.current_height/4),this.RT3.setSize(this.current_width/8,this.current_height/8),this.RT4.setSize(this.current_width/16,this.current_height/16))}}class zs extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _SourceTex;uniform vec2 _SourceTexSize;varying vec2 vUv;\n#define vec vec4\n#define toVec(x) x.rgba\n#define s2(a, b) temp = a; a = min(a, b); b = max(temp, b);\n#define t2(a, b) s2(v[a], v[b]);\n#define t24(a, b, c, d, e, f, g, h) t2(a, b); t2(c, d); t2(e, f); t2(g, h);\n#define t25(a, b, c, d, e, f, g, h, i, j) t24(a, b, c, d, e, f, g, h); t2(i, j);\n#define s2(a, b) temp = a; a = min(a, b); b = max(temp, b);\n#define mn3(a, b, c) s2(a, b); s2(a, c);\n#define mx3(a, b, c) s2(b, c); s2(a, c);\n#define mnmx3(a, b, c) mx3(a, b, c); s2(a, b);\n#define mnmx4(a, b, c, d) s2(a, b); s2(c, d); s2(a, c); s2(b, d);\n#define mnmx5(a, b, c, d, e) s2(a, b); s2(c, d); mn3(a, c, e); mx3(b, d, e);\n#define mnmx6(a, b, c, d, e, f) s2(a, d); s2(b, e); s2(c, f); mn3(a, b, c); mx3(d, e, f);\nvoid main(){vec2 inv_size=vec2(1.0/_SourceTexSize.x,1.0/_SourceTexSize.y);\n#ifdef kernel5x5\nvec v[25];for(int dX=-2;dX<=2;++dX){for(int dY=-2;dY<=2;++dY){vec2 offset=vec2(float(dX),float(dY));v[(dX+2)*5+(dY+2)]=toVec(texture2D(_SourceTex,vUv+offset*inv_size));}}vec temp;t25(0,1,3,4,2,4,2,3,6,7);t25(5,7,5,6,9,7,1,7,1,4);t25(12,13,11,13,11,12,15,16,14,16);t25(14,15,18,19,17,19,17,18,21,22);t25(20,22,20,21,23,24,2,5,3,6);t25(0,6,0,3,4,7,1,7,1,4);t25(11,14,8,14,8,11,12,15,9,15);t25(9,12,13,16,10,16,10,13,20,23);t25(17,23,17,20,21,24,18,24,18,21);t25(19,22,8,17,9,18,0,18,0,9);t25(10,19,1,19,1,10,11,20,2,20);t25(2,11,12,21,3,21,3,12,13,22);t25(4,22,4,13,14,23,5,23,5,14);t25(15,24,6,24,6,15,7,16,7,19);t25(3,11,5,17,11,17,9,17,4,10);t25(6,12,7,14,4,6,4,7,12,14);t25(10,14,6,7,10,12,6,10,6,17);t25(12,17,7,17,7,10,12,18,7,12);t24(10,18,12,20,10,20,10,12);gl_FragColor=v[12];\n#endif\n#ifdef kernel3x3\nvec v[9];for(int dX=-1;dX<=1;++dX){for(int dY=-1;dY<=1;++dY){vec2 offset=vec2(float(dX),float(dY));v[(dX+1)*3+(dY+1)]=toVec(texture2D(_SourceTex,vUv+offset*inv_size));}}vec temp;mnmx6(v[0],v[1],v[2],v[3],v[4],v[5]);mnmx5(v[1],v[2],v[3],v[4],v[6]);mnmx4(v[2],v[3],v[4],v[7]);mnmx3(v[3],v[4],v[8]);toVec(gl_FragColor)=v[4];\n#endif\n}",void 0,{kernel3x3:!0}),this.uniforms._SourceTex={value:void 0},this.uniforms._SourceTexSize={value:new t(1,1)}}set_texture(e){this.uniforms._SourceTex.value=e;const t=this.get_size(e);this.uniforms._SourceTexSize.value.copy(t)}get_size(e){return e.isVideoTexture?new t(Math.max(1,e.image.videoWidth),Math.max(1,e.image.videoHeight)):e.isWebGLRenderTarget?new t(e.width,e.height):e.isTexture?new t(e.image.width,e.image.height):new t(1,1)}}class Fs{constructor(e){this.RT=new R(1,1,{type:D,format:k,minFilter:l,magFilter:l}),this.RT1=new R(1,1,{type:D,format:k,minFilter:l,magFilter:l}),this.median_filter_mat=new zs}filter(e){const t=this.get_size(e);t.x===this.RT.width&&t.y===this.RT.height||(this.RT.setSize(t.x,t.y),this.RT1.setSize(t.x,t.y)),this.median_filter_mat.set_texture(e),ht.material_pass(this.median_filter_mat,this.RT);for(let e=0;e<0;e++)this.median_filter_mat.set_texture(this.RT.texture),ht.material_pass(this.median_filter_mat,this.RT1),this.median_filter_mat.set_texture(this.RT1.texture),ht.material_pass(this.median_filter_mat,this.RT);return this.RT}get_size(e){return e.isVideoTexture?new t(Math.max(1,e.image.videoWidth),Math.max(1,e.image.videoHeight)):e.isWebGLRenderTarget?new t(e.width,e.height):e.isTexture?new t(e.image.width,e.image.height):new t(1,1)}}class As{constructor(e,t){this.read=void 0,this.write=void 0,this.name=e,this.update_material=t}init_from_geometry(e){}init_from_attribute(e){}build_RT(e){const t=As.calculate_resolution(e),s={minFilter:l,magFilter:l,format:k,colorSpace:P,type:$e.fp_textures_available?D:J,stencilBuffer:!1,depthBuffer:!1};return new R(t.width,t.height,s)}static calculate_resolution(e){const t=Math.min(e,512);return{width:t,height:Math.max(1,Math.ceil(e/t))}}swap_RT(){const e=this.read;this.read=this.write,this.write=e}update(e){this.update_material&&(this.update_material.update(),e.children[0].material=this.update_material,this.update_material.uniforms._MainTex.value=this.read.texture,ht.render(e,void 0,this.write),e.children[0].material=void 0,this.swap_RT())}store_geometry_attribute_in_RT(e,t,s,i){i.children[0].geometry.setAttribute("data",e),i.children[0].material=s,ht.render(i,void 0,t),i.children[0].geometry.deleteAttribute("data"),i.children[0].material=void 0}get_texture(){return this.read.texture}}class Rs extends h{constructor(e,t){super(),this.attributes=[],this.mesh=this.build_point_mesh(e,t),this.add(this.mesh),this.attribute_writter_mesh=this.build_attribute_writter_mesh(e),this.attribute_writter_scene=new m,this.attribute_writter_scene.add(this.attribute_writter_mesh)}add_texture_attribute(e){this.attributes.push(e)}add_update_attribute_array(e,t,s){this.attribute_writter_mesh.geometry.setAttribute(e,new U(t,s,!1))}add_attribute_array(e,t,s){this.mesh.geometry.setAttribute(e,new H(t,s,!1))}update(){this.mesh.material.update();for(let e=0;e<this.attributes.length;e++)this.attributes[e].update(this.attribute_writter_scene)}dispose(){this.mesh.geometry.dispose(),this.mesh.material.dispose()}build_point_mesh(e=1,t){const s=new T,i=new Q;i.setAttribute("position",s.getAttribute("position")),i.index=s.index,i.setAttribute("storage_uv",this.build_uv_storage_attribute(e)),i.instanceCount=e;const r=new g(i,t);return r.frustumCulled=!1,r}build_attribute_writter_mesh(e){const{width:t,height:s}=As.calculate_resolution(e),i=new Float32Array(3*e);for(let r=0;r<e;r++){const e=r%t,n=Math.floor(r/t);i[3*r+0]=(e+.5)/t,i[3*r+1]=(n+.5)/s,i[3*r+2]=r}const r=new d;r.setAttribute("position",new U(i,3,!1));const n=new K(r);return n.frustumCulled=!1,n}build_uv_storage_attribute(e){const{width:t,height:s}=As.calculate_resolution(e),i=new Float32Array(2*e);for(let r=0;r<e;r++){const e=r%t,n=Math.floor(r/t);i[2*r+0]=(e+.5)/t,i[2*r+1]=(n+.5)/s}return new H(i,2,!1)}}class Cs extends e{constructor(){super({uniforms:{},vertexShader:"\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 ",fragmentShader:"#define GLSLIFY 1\nvarying vec4 value;void main(){gl_FragColor=value;}",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i})}}class ks extends As{constructor(e){super("_Position",e)}store_geometry(e,t){const s=e.getAttribute("position");this.read=this.build_RT(s.count),this.write=this.build_RT(s.count);const i=new Cs;this.store_geometry_attribute_in_RT(e.getAttribute("position"),this.read,i,t)}store_positions(e,t){this.read=this.build_RT(e.length),this.write=this.build_RT(e.length);const s=new Float32Array(4*e.length);for(let t=0;t<e.length;t++)s[4*t+0]=e[t].x,s[4*t+1]=e[t].y,s[4*t+2]=e[t].z,s[4*t+3]=10*(2*Math.random()-1);const i=new Cs;this.store_geometry_attribute_in_RT(new U(s,4),this.read,i,t)}}class Ps extends L{constructor(e,t,s,i,r){super(e,t,s,i,r),this.multiplier=1}set_rgba(e,t,s,i,r){this.data[3*e+0]=t*this.multiplier,this.data[3*e+1]=s*this.multiplier,this.data[3*e+2]=i*this.multiplier,this.data[3*e+3]=r*this.multiplier,this.needsUpdate=!0}set_rgb(e,t,s,i){this.data[3*e+0]=t*this.multiplier,this.data[3*e+1]=s*this.multiplier,this.data[3*e+2]=i*this.multiplier,this.needsUpdate=!0}set_r(e,t){this.data[3*e+0]=t*this.multiplier,this.needsUpdate=!0}set_g(e,t){this.data[3*e+1]=t*this.multiplier,this.needsUpdate=!0}set_b(e,t){this.data[3*e+2]=t*this.multiplier,this.needsUpdate=!0}set_a(e,t){this.data[3*e+2]=t*this.multiplier,this.needsUpdate=!0}}class Ds extends Ps{constructor(e,t){super(new Uint8Array(e*t*3),e,t,k),this.multiplier=255}}class Ls extends Ps{constructor(e,t){super(new Uint8Array(e*t*4),e,t,k),this.multiplier=255}}class Us extends Ps{constructor(e,t){super(new Float32Array(e*t*3),e,t,k,D)}}class js extends Ps{constructor(e,t){super(new Float32Array(e*t*4),e,t,k,D)}}class Os extends g{constructor(e,t,s,i){super(t,s),this.id_table=e,this.batched_count=Object.keys(e).length,this.max_texture_width=i,this.batch_width=this.batched_count%i,this.batch_height=Math.ceil(this.batched_count/i)}attach_rgb_texture(e){this.material.uniforms[e].value=new Ds(this.batch_width,this.batch_height)}attach_rgba_texture(e){this.material.uniforms[e].value=new Ls(this.batch_width,this.batch_height)}attach_rgb_float_texture(e){this.material.uniforms[e].value=new Us(this.batch_width,this.batch_height)}attach_rgba_float_texture(e){this.material.uniforms[e].value=new js(this.batch_width,this.batch_height)}get_mesh_index(e){return this.id_table[e]}set_rgb_value(e,t,s,i,r){this.material.uniforms[e].set_rgb(this.get_mesh_index(t),s,i,r)}set_rgba_value(e,t,s,i,r,n){this.material.uniforms[e].set_rgba(this.get_mesh_index(t),s,i,r,n)}}class Is{batch(e,t){const s=[],i={},r=[];for(let t=0;t<e.length;t++){const n=e[t],o=n.geometry.getAttribute("position").count;for(let e=0;e<o;e++)r.push(t);s.push(n.geometry),void 0===i[n.name]?i[n.name]=t:console.error("Mesh name is duplicated when trying to merge meshes. Non-unique id error.",n.name,i)}const n=le.mergeBufferGeometries(s),o=new U(new Float32Array(r),1);return n.setAttribute("mesh_id",o),this.create_batched_mesh(i,n,t,2048)}create_batched_mesh(e,t,s,i){return new Os(e,t,s,i)}}class Ns extends ze{constructor(e,t,s,i=!0,r=!1,n=!0){super(e,t,s),this.original_url="",this.colorSpaceConversion=n,this.premultiplyAlpha=r,this.flipY=i}on_preloaded_finished(e){Me.is_safari?this.load_with_old_method(e):this.load_with_new_method(e)}load_with_old_method(e){if(void 0===e.resources_by_url[this.url]){const t=new ee,s=new Image;s.src=this.url,s.onload=()=>{t.image=s,t.flipY=this.flipY,t.premultiplyAlpha=this.premultiplyAlpha,t.colorSpace=this.colorSpaceConversion?te:se,t.needsUpdate=!0,e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()},s.onerror=()=>{console.error("The source image could not be decoded.",this.original_url)}}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}load_with_new_method(e){if(void 0===e.resources_by_url[this.url]){const t={credentials:"same-origin"};fetch(this.url,t).then((e=>e.blob())).then((e=>createImageBitmap(e,{colorSpaceConversion:this.colorSpaceConversion?"default":"none",imageOrientation:this.flipY?"flipY":"none",premultiplyAlpha:this.premultiplyAlpha?"premultiply":"none"}))).then((t=>{const s=new ee(t);s.flipY=this.flipY,s.premultiplyAlpha=this.premultiplyAlpha,s.colorSpace=this.colorSpaceConversion?te:se,s.needsUpdate=!0,e.set_resource(this.resource_id,this.url,s),this.__update_downloaded_bytes(1,1),this.__loading_ended()})).catch((e=>{console.error(e,this.original_url)}))}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}}class Bs{constructor(e,t=!0,s=1,i=!1){this.buffer=e,this.loop=t,this.volume=s,this.positional=i,this.audio=void 0}init(e){this.positional?this.audio=new ie(e):this.audio=new re(e),this.audio.setBuffer(this.buffer),this.audio.setLoop(this.loop),this.audio.gain.gain.value=0,this.audio.setVolume(this.loop?0:this.volume)}play(){this.audio.play()}pause(){this.audio.pause()}stop(){this.audio.stop()}get is_playing(){return this.audio.isPlaying}}class qs extends ze{constructor(e,t,s=!0,i=0,r,n=!1){super(e,t,r),this.loop=s,this.volume=i,this.positional=n}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.instantiate_audio(e):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}instantiate_audio(e){const t=ne.getContext(),s=t.createBuffer(2,22050,44100);fetch(this.url).then((e=>e.blob())).then((i=>{i.arrayBuffer?i.arrayBuffer().then((s=>{t.decodeAudioData(s,(t=>{e.set_resource(this.resource_id,this.url,new Bs(t,this.loop,this.volume,this.positional)),this.__update_downloaded_bytes(1,1),this.__loading_ended()}))})):(e.set_resource(this.resource_id,this.url,new Bs(s,this.loop,this.volume,this.positional)),this.__update_downloaded_bytes(1,1),this.__loading_ended())}))}}class Vs extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=s}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Ys extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=new oe,this.loader.setPath(t+"/"),this.urls=[`px.${s}`,`nx.${s}`,`py.${s}`,`ny.${s}`,`pz.${s}`,`nz.${s}`]}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.urls,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error("Image could not be loaded. Maybe wrong name or path, I don't know¯\\_(ツ)_/¯",e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Gs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new he}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Es extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Ws extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ce}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Xs extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=new ue,this.loader.setDRACOLoader(s)}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Qs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ue}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class $s extends ze{constructor(e,t,s){super(e,t,s),this.loader=new de,this.url_suffix=["/px.hdr","/nx.hdr","/py.hdr","/ny.hdr","/pz.hdr","/nz.hdr"]}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.setPath(this.url).setDataType(_e).load(this.url_suffix,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Hs extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.json().then((t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Zs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new pe}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Js extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,this.parse_path(t)),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}parse_path(e){const t=e.split("\n");""===t[t.length-1]&&t.pop();const s=[];for(let e=0;e<t.length;e+=3){const i=parseFloat(t[e+0]),r=parseFloat(t[e+1]),n=parseFloat(t[e+2]);s.push(new c(i,r,n))}return s}}class Ks extends ze{constructor(e,t,s){super(e,t,s),this.loader=new me}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class ei extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class ti extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.blob().then((t=>{const s=new ee,i=URL.createObjectURL(t),r=new Image;r.src=i,r.onload=()=>{s.image=r,s.needsUpdate=!0,e.set_resource(this.resource_id,this.url,s),this.__update_downloaded_bytes(1,1),this.__loading_ended()},r.onerror=()=>{console.error("Error loading texture. Maybe the resource is not an image?",this.url)}})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class si extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.blob().then((t=>{e.set_resource(this.resource_id,this.url,URL.createObjectURL(t)),this.__update_downloaded_bytes(1,1),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class ii{constructor(e){this.resource_loaders=[],this.batch_name=e||"unnamed batch"}add_loader(e){this.resource_loaders.push(e)}load(e){for(let t=0;t<this.resource_loaders.length;t++)this.resource_loaders[t].load(e||gt)}get loading_finished(){let e=!0;for(let t=0;t<this.resource_loaders.length;t++)e=e&&this.resource_loaders[t].has_finished;return e}get has_errors(){let e=!1;for(let t=0;t<this.resource_loaders.length;t++)e=e||this.resource_loaders[t].has_error;return e}print_errors(){console.error("Batch <"+this.batch_name+"> could not load successfully");for(let e=0;e<this.resource_loaders.length;e++)this.resource_loaders[e].has_error&&this.resource_loaders[e].print_error()}get_progress(){return this.get_loaded_bytes()/this.get_total_bytes()}get_loaded_bytes(){let e=1;for(let t=0;t<this.resource_loaders.length;t++)e+=this.resource_loaders[t].loaded_bytes;return e}get_total_bytes(){let e=1;for(let t=0;t<this.resource_loaders.length;t++)e+=this.resource_loaders[t].total_bytes;return e}}export{ze as AbstractLoader,Ce as ActionEvent,Le as ActionInterpolator,Pe as ActionSequencer,Oe as ActionSequencerBuilder,ve as AddMaterial,Re as ApplicationView,Ee as ApplicationViewController,Qt as ArrayUtilities,et as Arrow,Ns as AsyncTextureLoader,qs as AudioLoader,ge as BaseApplication,Te as BaseRender,be as BaseShaderMaterial,Vs as BasisLoader,fe as BlitMaterial,Dt as Blurrer,Me as Browser,dt as CSSAnimator,We as CameraManager,yt as CameraUtilities,Xe as CanvasDrawer,$e as Capabilities,Je as Cube,Ys as CubemapLoader,Gs as DAELoader,rt as Debug,Ft as DebugNormalsRender,je as DrawIOAnimationSheet,Ts as DualFilteringBlurMaterial,Ss as DualFilteringBlurrer,De as EasingFunctions,nt as EventManager,Es as FileLoader,Ws as FontLoader,$t as FrustumPointFitter,Xs as GLTFDRACOLoader,Qs as GLTFLoader,Rs as GPUParticleSystem,It as GaussianBlurrer,Ht as GeometryUtilities,ht as Graphics,rs as Grid,$s as HDRCubeTextureLoader,Zt as HTMLUtilities,Wt as HorizontalPlane,Jt as ImageUtilities,Tt as Initializer,Hs as JSONLoader,Mt as KeyboardInput,ns as Line,Fs as MedianFilter,Is as MeshBatcher,Kt as MeshSampler,es as ModelUtilities,Lt as NormalAORender,Ut as NormalRender,Ue as NumberInterpolator,Zs as OBJLoader,ke as OMath,pt as OS,tt as OScreen,ts as ObjectUtilities,St as OrthographicCamera,bt as OrthographicFrustumPointFitter,As as ParticleAttribute,ks as ParticlePositionAttribute,it as PerspectiveCamera,wt as PerspectiveFrustumPointFitter,Js as PointArrayLoader,Ks as RGBETextureLoader,Vt as RenderLoop,ii as ResourceBatch,gt as ResourceContainer,bs as SDFTextBatch,Ze as SceneManager,Qe as SimpleTextDrawer,Ke as Sphere,ss as StringUtilities,as as Text2D,ei as TextLoader,ti as TextureLoader,Ne as Time,is as TimeUtilities,qe as TransitionManager,Ie as TransitionTable,xt as UI,gs as UIElement,ye as UnrealBloomComposeMaterial,Nt as UnrealBloomRender,fs as UpdatableMaterialMesh,Ye as VCManager,Bt as VRRender,Se as Validation,ys as VectorInterpolator,Xt as VerticalPlane,si as VideoLoader,Gt as ViewComponent,Et as ViewComponentController,qt as ViewComponentControllerManager,Yt as ViewComponentManager,Fe as ViewManager,Ge as WorkerToMain,os as WorldImage};
|
|
1
|
+
import{ShaderMaterial as e,Vector2 as t,NoBlending as s,AlwaysDepth as i,Color as r,Clock as n,CanvasTexture as o,UVMapping as a,ClampToEdgeWrapping as _,NearestFilter as l,Object3D as h,Vector3 as c,LineBasicMaterial as u,BufferGeometry as d,Line as p,Scene as m,Mesh as g,BoxGeometry as f,MeshBasicMaterial as v,SphereGeometry as x,CylinderGeometry as w,ConeGeometry as b,PerspectiveCamera as y,PlaneGeometry as T,Vector4 as M,Box3 as S,Box3Helper as z,CatmullRomCurve3 as F,OrthographicCamera as A,WebGLRenderTarget as R,WebGLRenderer as C,RGBAFormat as k,LinearSRGBColorSpace as P,FloatType as D,DataTexture as L,BufferAttribute as U,Sphere as j,Plane as O,Line3 as I,Quaternion as N,Matrix4 as B,Ray as V,RepeatWrapping as Y,LinearFilter as q,Skeleton as G,DoubleSide as W,LinearMipMapLinearFilter as E,Box2 as X,InstancedBufferGeometry as Q,Float32BufferAttribute as $,InstancedBufferAttribute as H,DynamicDrawUsage as Z,HalfFloatType as J,Points as K,Texture as ee,SRGBColorSpace as te,NoColorSpace as se,PositionalAudio as ie,Audio as re,AudioContext as ne,CubeTextureLoader as oe,FileLoader as ae,UnsignedByteType as _e}from"three";import*as le from"three/examples/jsm/utils/BufferGeometryUtils.js";export{le as BufferGeometryUtils};import{ColladaLoader as he}from"three/examples/jsm/loaders/ColladaLoader.js";import{FontLoader as ce}from"three/examples/jsm/loaders/FontLoader.js";import{GLTFLoader as ue}from"three/examples/jsm/loaders/GLTFLoader.js";import{HDRCubeTextureLoader as de}from"three/examples/jsm/loaders/HDRCubeTextureLoader.js";import{OBJLoader as pe}from"three/examples/jsm/loaders/OBJLoader.js";import{RGBELoader as me}from"three/examples/jsm/loaders/RGBELoader.js";class ge{on_post_start(){}on_enter(){}on_exit(){}before_update(){}update(){}fixed_update(){}on_post_render(){}on_pre_render(){}on_frame_end(){}dispose(){}}class fe extends e{constructor(e,r,n){super({uniforms:{_MainTex:{value:null},_Resolution:{value:new t(0,0)},_TargetResolution:{value:new t(0,0)}},defines:n||{},vertexShader:r||"#define GLSLIFY 1\nvarying vec2 vUv;void main(){gl_Position=vec4(uv*2.0-1.0,1.0,1.0);vUv=uv;}",fragmentShader:e||"#define GLSLIFY 1\nuniform sampler2D _MainTex;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv);}",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i})}}class ve extends fe{constructor(e){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform sampler2D _SecondTex;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv);gl_FragColor+=texture2D(_SecondTex,vUv);}"),this.uniforms._SecondTex={value:void 0}}set_add_texture(e){this.uniforms._SecondTex.value=e}}var xe="#define GLSLIFY 1\nvarying vec2 vUv;void main(){vec3 pos=position;mat4 MVP=projectionMatrix*modelViewMatrix;gl_Position=MVP*vec4(pos,1.0);vUv=uv;}",we="#define GLSLIFY 1\nuniform vec3 _Color;void main(){gl_FragColor=vec4(_Color,1.0);}";class be extends e{constructor(e,t,s){super({vertexShader:e||xe,fragmentShader:t||we,uniforms:s||{_Color:{value:new r("#FF0000")}}})}}class ye extends fe{constructor(e){super("#define GLSLIFY 1\nvarying vec2 vUv;uniform sampler2D blurTexture1;uniform sampler2D blurTexture2;uniform sampler2D blurTexture3;uniform sampler2D blurTexture4;uniform sampler2D blurTexture5;uniform float bloomStrength;uniform float bloomRadius;uniform float bloomFactors[NUM_MIPS];uniform vec3 bloomTintColors[NUM_MIPS];float lerpBloomFactor(const in float factor){float mirrorFactor=1.2-factor;return mix(factor,mirrorFactor,bloomRadius);}void main(){gl_FragColor=bloomStrength*(lerpBloomFactor(bloomFactors[0])*vec4(bloomTintColors[0],1.0)*texture2D(blurTexture1,vUv)+lerpBloomFactor(bloomFactors[1])*vec4(bloomTintColors[1],1.0)*texture2D(blurTexture2,vUv)+lerpBloomFactor(bloomFactors[2])*vec4(bloomTintColors[2],1.0)*texture2D(blurTexture3,vUv)+lerpBloomFactor(bloomFactors[3])*vec4(bloomTintColors[3],1.0)*texture2D(blurTexture4,vUv)+lerpBloomFactor(bloomFactors[4])*vec4(bloomTintColors[4],1.0)*texture2D(blurTexture5,vUv));}",void 0,{NUM_MIPS:e}),this.uniforms._MainTex={value:void 0},this.uniforms._BlurredTex={value:void 0},this.uniforms._BloomStrength={value:1},this.uniforms.blurTexture1={value:null},this.uniforms.blurTexture2={value:null},this.uniforms.blurTexture3={value:null},this.uniforms.blurTexture4={value:null},this.uniforms.blurTexture5={value:null},this.uniforms.bloomStrength={value:1},this.uniforms.bloomFactors={value:[1,.8,.6,.4,.2]},this.uniforms.bloomRadius={value:0};const t=[new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF"),new r("#FFFFFF")];this.uniforms.bloomTintColors={value:t}}set_RT_0(e){this.uniforms.blurTexture1.value=e}set_RT_1(e){this.uniforms.blurTexture2.value=e}set_RT_2(e){this.uniforms.blurTexture3.value=e}set_RT_3(e){this.uniforms.blurTexture4.value=e}set_RT_4(e){this.uniforms.blurTexture5.value=e}set_bloom_strength(e){this.uniforms.bloomStrength.value=e}set_bloom_radius(e){this.uniforms.bloomRadius.value=e}set_tint_color_0(e){this.uniforms.bloomTintColors.value[0].set(e)}set_tint_color_1(e){this.uniforms.bloomTintColors.value[1].set(e)}set_tint_color_2(e){this.uniforms.bloomTintColors.value[2].set(e)}set_tint_color_3(e){this.uniforms.bloomTintColors.value[3].set(e)}set_tint_color_4(e){this.uniforms.bloomTintColors.value[4].set(e)}}class Te{constructor(){}render(){}on_enter(e,t){}on_exit(e,t){}resize(){}dispose(){}}const Me=new class{init(e,t){switch(this.browser_name="",this.agent=navigator.userAgent.toLowerCase(),this.vr_browser_keywords=["oculusbrowser","oculus","vive","rift","windowsmr","cardboard","daydream","wolvic"],this.vr_browser_name=this.vr_browser_keywords.find((e=>this.agent.includes(e))),this.has_web_xr_support="xr"in navigator,!0){case void 0!==this.vr_browser_name&&this.has_web_xr_support:this.browser_name=this.vr_browser_name;break;case this.agent.indexOf("edge")>-1:this.browser_name="edge_ie";break;case this.agent.indexOf("edg")>-1:this.browser_name="edge_chromium";break;case this.agent.indexOf("opr")>-1&&!!e:this.browser_name="opera";break;case this.agent.indexOf("chrome")>-1&&!!t:this.browser_name="chrome";break;case this.agent.indexOf("trident")>-1:this.browser_name="iexplorer";break;case this.agent.indexOf("firefox")>-1:this.browser_name="firefox";break;case this.agent.indexOf("safari")>-1:this.browser_name="safari";break;default:this.browser_name="other"}this.version=this.get_version()}get name(){return this.browser_name}get is_safari(){return"safari"===this.browser_name}get is_chrome(){return"chrome"===this.browser_name}get is_edge(){return"edge_ie"===this.browser_name}get is_edge_chromium(){return"edge_chromium"===this.browser_name}get is_vr(){return this.vr_browser_keywords.includes(this.browser_name)}get has_webm(){return!!(this.is_chrome||this.is_firefox||this.is_edge_chromium)}get has_hvec(){return this.is_safari}get preferred_video_extension(){return this.has_webm?"webm":this.has_hvec?"hvec.mp4":"mp4"}get_version(){const e=navigator.userAgent;let t="",s=0,i=e.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i)||[];return/trident/i.test(i[1])&&(t=/\brv[ :]+(\d+)/g.exec(e)||[],s="IE "+(t[1]||"")),"Chrome"===i[1]&&(t=e.match(/\b(OPR|Edge)\/(\d+)/),null!=t&&(s=t.slice(1).join(" ").replace("OPR","Opera"))),i=i[2]?[i[1],i[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(t=e.match(/version\/(\d+(\.\d+)?)/i))&&i.splice(1,1,t[1]),s=i.join(" "),Number(s.split(" ")[1])}};class Se{constructor(){}static is_int(e){return Number(e)===e&&e%1==0}static is_float(e){return Number(e)===e&&e%1!=0}static is_number(e){return this.is_int(e)||this.is_float(e)}static is_json(e){try{JSON.parse(e)}catch(e){return!1}return!0}}class ze{constructor(e,t,s=1){this.resource_id=e,this.url=t,this.loaded_bytes=0,this.total_bytes=s,this.has_finished=!1,this.has_error=!1,this.error_message="none"}__update_downloaded_bytes(e,t){e=Se.is_number(e)?e:1,t=Se.is_number(t)?t:1,this.loaded_bytes=e,t>0&&(this.total_bytes=t),this.loaded_bytes>this.total_bytes&&console.warn("Total bytes is smaller than loaded ones. Please set total bytes by hand to:",this.url)}__loading_ended(){this.has_finished=!0}__set_error(e){this.has_error=!0,this.error_message=e}print_error(){console.error("Error while loading "+this.resource_id+"\n\t path: "+this.url+"\n\t\t"+this.error_message)}load(e){if(void 0===e.resources_by_url[this.url]){const t=Me.is_safari?"no-cache":"default";fetch(this.url,{method:"GET",mode:"cors",cache:t,credentials:"same-origin",redirect:"follow"}).then(this.on_progress.bind(this,e)).catch(this.__on_error.bind(this))}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}async on_progress(e,t){const s=t.clone(),i=t.body.getReader(),r=+t.headers.get("Content-Length");let n=0;for(;;){const{done:e,value:t}=await i.read();if(e)break;n+=t.length,this.__update_downloaded_bytes(n,r)}this.on_preloaded_finished(e,s)}on_preloaded_finished(e,t){}__on_error(e){console.error(e)}}const Fe=new class{constructor(){this.views=[],this.main_to_worker=void 0,this.browser_title_suffix=""}go_to_view(e,t=!0,s=!1){const i=this.get(e);t&&(this.__change_browser_url(i.url),this.__change_browser_title(i.url)),this.main_to_worker.push("go_to_view_controller",[e,s])}go_to_scene(e,t=!1,s=!1){const i=this.get("transition");i.set_next_view_name(e),this.go_to_view(i.name,t,s)}set_browser_title_suffix(e){this.browser_title_suffix=e}get(e){for(let t=0;t<this.views.length;t++)if(this.views[t].name===e)return this.views[t];console.error("[ViewManager.get] no view found for: ",e)}get_by_url(e){for(let t=0;t<this.views.length;t++)if(this.views[t].url===e)return this.views[t];console.error("[ViewManager.get_by_url] no view found for: ",e)}register_view(e){this.views.push(e)}set_main_to_worker(e){this.main_to_worker=e}__change_browser_url(e){window.history.pushState("","",e)}__change_browser_title(e){const t=this.__capitalize(e);document.title=t?`${t} | ${this.browser_title_suffix}`:this.browser_title_suffix}__capitalize(e){let t=e.toUpperCase().replace("/","");return t=this.__snake_to_whitespace(t),t}__snake_to_whitespace(e){return e.replace(/([-_][A-Z])/g,(e=>e.replace("-"," ").replace("_"," ")))}};class Ae{constructor(e){this.name=e}start(){}before_enter(){}on_enter(){}before_update(){}update(){}fixed_update(){}update_enter_transition(e,t,s){}update_exit_transition(e,t,s){}before_exit(){}on_exit(){}}class Re extends Ae{constructor({name:e,url:t,container:s}){super(e),this.container=s,this.url=t,Fe.register_view(this)}before_enter(){this.container.classList.add("before_enter"),this.container.classList.remove("before_exit"),this.container.classList.remove("hidden")}on_enter(){this.container.classList.remove("before_enter"),this.container.classList.remove("before_exit"),this.container.classList.remove("hidden")}before_exit(){this.container.classList.add("before_exit"),this.container.classList.remove("before_enter"),this.container.classList.remove("hidden")}on_exit(){this.container.classList.add("hidden"),this.container.classList.remove("before_enter"),this.container.classList.remove("before_exit")}set_opacity(e){this.container.style.opacity=e}}class Ce{constructor(e,t,s){this.name=e,this.method=t,this.args=s}trigger(){ViewApi.application[this.name][this.method](...this.args.split(","))}}class ke{constructor(){}static linear_map(e,t,s,i,r){return(e-t)/(s-t)*(r-i)+i}static between(e,t,s){return e>=t&&e<=s}static mod(e,t){return(e%t+t)%t}static rgb_to_hex(e){return e.r=Math.round(255*e.r).toString(16),e.g=Math.round(255*e.g).toString(16),e.b=Math.round(255*e.b).toString(16),1===e.r.length&&(e.r="0"+e.r),1===e.g.length&&(e.g="0"+e.g),1===e.b.length&&(e.b="0"+e.b),"#"+e.r+e.g+e.b}static project_points_on_plane(e,t){const s=e[0].clone();s.set(0,0,0);const i=[];for(let r=0;r<e.length;r++)t.projectPoint(e[r],s),i.push(s.clone());return i}static matrix4_lerp(e,t,s,i){for(let r=0;r<16;r++)s.elements[r]=this.lerp(e.elements[r],t.elements[r],i)}static equals(e,t){return Math.abs(e-t)<1e-6}static lerp(e,t,s){return(1-s)*e+s*t}static clamp(e,t,s){return Math.max(t,Math.min(s,e))}static euclideanModulo(e,t){return(e%t+t)%t}static pingpong(e,t=1){return t-Math.abs(ke.euclideanModulo(e,2*t)-t)}static degToRad(e){return e*(Math.PI/180)}static radToDeg(e){return e*(180/Math.PI)}static deg_to_rad(e){return e*(Math.PI/180)}static rad_to_deg(e){return e*(180/Math.PI)}static perspective_divide(e){return e.x/=e.w,e.y/=e.w,e.z/=e.w,e}static points_average(e){const t=e[0].clone();for(let s=1;s<e.length;s++)t.add(e[s]);return t.multiplyScalar(1/e.length),t}static get_random_color(){const e=[0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f"];let t="#";return t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t+=e[Math.floor(16*Math.random())],t}static saturate(e){return ke.clamp(e,0,1)}}class Pe{constructor(e={},t){this.previous_elapsed_time=-1e-5,this.elapsed_time=-1e-5,this.playback_speed=this.__get_playback_speed(t),this.playing=!0,this.action_events=[],this.context=e,this.initial_context=JSON.parse(JSON.stringify(e)),this.tmp_t=0,this.channels={};const s=Object.keys(e);for(let e=0;e<s.length;e++)this.channels[s[e]]=[];this.duration=0}play(){this.playing=!0}stop(){this.playing=!1}reset(){this.elapsed_time=-1e-5}skip(){const e=this.get_duration();this.__play_clips(this.elapsed_time,e+1e-4),this.elapsed_time=e}update(e){this.playing&&(this.previous_elapsed_time=this.elapsed_time,this.elapsed_time+=e*this.playback_speed,this.__play_clips(this.previous_elapsed_time,this.elapsed_time))}set_progress(e){this.previous_elapsed_time=this.elapsed_time,this.elapsed_time=ke.clamp(e,0,this.duration),this.__play_clips(this.elapsed_time,this.elapsed_time)}set_normalized_progress(e){this.previous_elapsed_time=this.elapsed_time,this.elapsed_time=ke.clamp(e,0,1)*this.duration,this.__play_clips(this.elapsed_time,this.elapsed_time)}get_progress(){return ke.clamp(this.elapsed_time/this.get_duration(),0,1)}is_finished(){return this.elapsed_time>this.get_duration()}add_action_event(e,t){this.action_events.push({trigger_time:e,action:t}),this.duration=Math.max(this.duration,e)}add_action_interpolator(e,t,s,i=!1){if(i){const e=this.channels[s.attribute_name];void 0===e&&console.error(`${s.attribute_name} missing in initial state data.`),0===e.length?s.from=this.initial_context[s.attribute_name]:s.from=e[e.length-1].interpolator.to}const r={from:e,to:t,interpolator:s};this.duration=Math.max(this.duration,t),this.channels[s.attribute_name].push(r)}get_current_target_value(e){const t=this.__get_current_keyframe(e,this.elapsed_time);return this.elapsed_time<t.from?t.interpolator.evaluate(0):t.interpolator.evaluate(1)}get_current_starting_value(e){return this.__get_current_keyframe(e,this.elapsed_time).interpolator.evaluate(0)}get_current_progress(e){const t=this.__get_current_keyframe(e,this.elapsed_time),s=this.__linear_map_01(this.elapsed_time,t.from,t.to);return t.interpolator.easing_function(s)}get_duration(){return this.duration}__play_clips(e,t){this.elapsed_time>this.previous_elapsed_time&&this.__play_events(this.previous_elapsed_time,this.elapsed_time);const s=Object.keys(this.initial_context);for(let t=0;t<s.length;t++){const i=s[t],r=this.__get_current_keyframe(i,e);this.context[i]=this.evaluate_keyframe(r,e)}}__play_events(e,t){for(let s=0;s<this.action_events.length;s++){const i=this.action_events[s].trigger_time;ke.between(i,e,t)&&(console.log("Play event: "+this.action_events[s].action.constructor.name+" at "+this.action_events[s].trigger_time),this.action_events[s].action.trigger())}}evaluate_keyframe(e,t){return this.tmp_t=this.__linear_map_01(t,e.from,e.to),e.interpolator.evaluate(ke.clamp(this.tmp_t,0,1))}get_keyframes(e){return this.channels[e]}is_channel_redefined(e){for(let t=0;t<this.channels[e].length;t++){if(this.channels[e][t].interpolator.initial)return!1}return!0}__linear_map_01(e,t,s){return ke.saturate((e-t)/(s-t)*1+0)}__get_current_keyframe(e,t){let s;const i=this.channels[e];for(let e=0;e<i.length;e++){const r=i[e];if(t>=r.from&&t<=r.to)return s=r,s}let r=1/0;for(let e=0;e<i.length;e++){const n=i[e],o=Math.abs(n.to-t);o<r&&(s=n,r=o)}return s}__get_playback_speed(e){return e?Number(e):1}}class De{constructor(){}static linear(e){return e}static triangular(e){return 1-Math.abs(2*e%2-1)}static ease_in_sine(e){return 1-Math.cos(3.1415926*e/2)}static ease_out_sine(e){return Math.sin(3.1415926*e/2)}static ease_in_out_sine(e){return-(Math.cos(3.1415926*e)-1)/2}static ease_in_cubic(e){return e*e*e}static ease_out_cubic(e){return 1-Math.pow(1-e,3)}static ease_in_out_cubic(e){return e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2}static ease_in_quad(e){return e*e}static ease_out_quad(e){return 1-(1-e)*(1-e)}static ease_in_out_quad(e){return e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2}static ease_in_quart(e){return e*e*e*e}static ease_out_quart(e){return 1-Math.pow(1-e,4)}static ease_in_out_quart(e){return e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2}static ease_in_quint(e){return e*e*e*e*e}static ease_out_quint(e){return 1-Math.pow(1-e,5)}static ease_in_out_quint(e){return e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2}static ease_in_expo(e){return 0===e?0:Math.pow(2,10*e-10)}static ease_out_expo(e){return 1===e?1:1-Math.pow(2,-10*e)}static ease_in_out_expo(e){return 0===e?0:1===e?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2}static ease_in_circ(e){return 1-Math.sqrt(1-Math.pow(e,2))}static ease_out_circ(e){return Math.sqrt(1-Math.pow(e-1,2))}static ease_in_out_circ(e){return e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2}static ease_in_back(e){return 2.7015*e*e*e-1.7015*e*e}static ease_out_back(e){return 1+2.7015*Math.pow(e-1,3)+1.7015*Math.pow(e-1,2)}static ease_in_out_back(e){return e<.5?Math.pow(2*e,2)*(7.189819*e-2.5949095)/2:(Math.pow(2*e-2,2)*(3.5949095*(2*e-2)+2.5949095)+2)/2}static ease_in_elastic(e){const t=2*Math.PI/3;return 0===e?0:1===e?1:-Math.pow(2,10*e-10)*Math.sin((10*e-10.75)*t)}static ease_out_elastic(e){return 0===e?0:1===e?1:Math.pow(2,-10*e)*Math.sin(2.094395*(10*e-.75))+1}static ease_in_out_elastic(e){return 0===e?0:1===e?1:e<.5?-Math.pow(2,20*e-10)*Math.sin(1.3962633*(20*e-11.125))/2:Math.pow(2,-20*e+10)*Math.sin(1.3962633*(20*e-11.125))/2+1}static ease_in_bounce(e){return 1-this.ease_out_bounce(1-e)}static ease_out_bounce(e){const t=7.5625,s=2.75;return e<1/s?t*e*e:e<2/s?t*(e-=1.5/s)*e+.75:e<2.5/s?t*(e-=2.25/s)*e+.9375:t*(e-=2.625/s)*e+.984375}static ease_in_out_bounce(e){return e<.5?(1-this.ease_out_bounce(1-2*e))/2:(1+this.ease_out_bounce(2*e-1))/2}static heartbeat(e){return 1-Math.pow(Math.abs(Math.sin(e+1)),63)*Math.sign(Math.sin(e))*Math.sin(e+1.5+1)*.8}}class Le{constructor(e="linear"){this.easing_function=void 0,this.easing_function="string"==typeof e?De[e]:e}update(e,t){}}class Ue extends Le{constructor(e,t=0,s=1,i=!1,r="linear"){super(r),this.attribute_name=e,this.from=t,this.to=s,this.initial=i}update(e,t){e[this.attribute_name]=ke.lerp(this.from,this.to,this.easing_function(t))}evaluate(e){return ke.lerp(this.from,this.to,this.easing_function(e))}}class je{constructor(){}parse(e){const t=(new DOMParser).parseFromString(e,"text/xml").querySelectorAll("mxGeometry"),s=[],i=[];for(let e=0;e<t.length;e++){const r=t[e],n=r.parentElement,o=n.getAttribute("value"),a=this.get_node_x_position(r)/100,_=parseFloat(r.getAttribute("width"))/100;if(n.getAttribute("style").includes("rhombus;")){const e=o.split("."),t=e[0],s=e[1];i.push({name:t,method:s,at_time:a+.5*_})}if(n.getAttribute("style").includes("rounded=0;")&&!n.getAttribute("style").includes("text;")&&""!==o&&!o.includes(" ")){const e=o.split("="),t=e[0],i=e[1].split("--"),r=parseFloat(i[0]),n=i[1];2!==e.length&&console.error("DrawIO data is malformed:",o),2!==i.length&&console.error("DrawIO data is malformed:",o),s.push({attribute_name:t,from_time:a,to_time:a+_,to_value:r,easing_function:n})}}return s.sort(((e,t)=>e.from_time-t.from_time)),{animation_tracks:s,triggers:i}}get_node_x_position(e){const t=e.getAttribute("x");return null===t?0:parseFloat(t)}}class Oe{constructor(e){this.default_state_data=e}from_animation_sheet(e,t,s,i){s=s||this.default_state_data;const r=e.animation_tracks,n=e.triggers,o=this.state_to_tracks(this.default_state_data,this.get_longest_time(e.animation_tracks));for(let e=0;e<o.length;e++)void 0===r.find((t=>t.attribute_name===o[e].attribute_name))&&r.push(o[e]);const a=new Pe(t,i);for(let e=0;e<r.length;e++){const s=r[e],i=new Ue(s.attribute_name,t[s.attribute_name],s.to_value,s.initial,s.easing_function);a.add_action_interpolator(s.from_time,s.to_time,i,!0)}for(let e=0;e<n.length;e++){const t=n[e],s=new Ce(t.name,t.method,t.args);a.add_action_event(t.at_time,s)}return a}state_to_tracks(e,t){const s=[],i=Object.keys(e);for(let r=0;r<i.length;r++)s.push({attribute_name:i[r],from_time:0,to_time:t<1?t:1,to_value:e[i[r]],initial:!0,easing_function:"ease_in_out_cubic"});return s}from_draw_io(e,t){const s=(new je).parse(e),i=s.animation_tracks,r=s.triggers,n=new Pe(t);for(let e=0;e<i.length;e++){const s=i[e],r=new Ue(s.attribute_name,t[s.attribute_name],s.to_value,s.initial,s.easing_function);n.add_action_interpolator(s.from_time,s.to_time,r,!0)}for(let e=0;e<r.length;e++){const t=r[e],s=new Ce(t.name,t.method);n.add_action_event(t.at_time,s)}return n}get_longest_time(e){let t=-1;for(let s=0;s<e.length;s++){const i=e[s].to_time;t=i>t?i:t}return t}}class Ie{constructor(){this.transitions=[],this.default_state_data={},this.transitions_velocity=1}get(e,t,s){for(let i=0;i<this.transitions.length;i++)if(this.transitions[i].from===e&&this.transitions[i].to===t){return new Oe(this.default_state_data).from_animation_sheet(this.transitions[i].data,s,this.transitions_velocity)}for(let e=0;e<this.transitions.length;e++)if(this.transitions[e].to===t&&void 0===this.transitions[e].from){return new Oe(this.default_state_data).from_animation_sheet(this.transitions[e].data,s,this.transitions_velocity)}console.error("TransitionTable.get no data found for: ",e,t)}add_transitions(e){for(let t=0;t<e.length;t++)this.transitions.push(e[t])}set_transitions(e){this.transitions=e}set_default_state_data(e){this.default_state_data=e}set_transitions_velocity(e){this.transitions_velocity=e}}const Ne=new class{constructor(){this.__delta_buffer=[.016,.016,.016,.016,.016,.016,.016,.016,.016,.016]}init(){this.___time=new n,this.__delta_time=0,this.__smooth_delta_time=0,this.__elapsed_time=0,this.__allocated_time=new t(0,0),this.__frame_interpolation_t=0,this.fixed_delta_time=1/30}get elapsed_time(){return this.__elapsed_time}get delta_time(){return this.__delta_time}get smooth_delta_time(){return this.__smooth_delta_time}get shader_time(){return this.__allocated_time.x=this.delta_time,this.__allocated_time.y=this.elapsed_time,this.__allocated_time}get frame_interpolation(){return this.__frame_interpolation_t}get fdt(){return this.fixed_delta_time}get dt(){return this.delta_time}get sdt(){return this.smooth_delta_time}to_json(){return{elapsed_time:this.elapsed_time,delta_time:this.delta_time,smooth_delta_time:this.smooth_delta_time}}__set_frame_interpolation(e){this.__frame_interpolation_t=e}__update(){this.__delta_time=this.___time.getDelta(),this.__elapsed_time=this.___time.getElapsedTime(),this.__delta_buffer.shift(),this.__delta_buffer.push(this.delta_time<.32?this.delta_time:.032),this.__calculate_smooth_delta_time()}__calculate_smooth_delta_time(){this.__smooth_delta_time=0;for(let e=0;e<this.__delta_buffer.length;e++)this.__smooth_delta_time+=this.__delta_buffer[e];this.__smooth_delta_time=this.__smooth_delta_time/this.__delta_buffer.length}};class Be{constructor(e){this.last_state=new Ae,this.current_state=new Ae,this.default_state_data={},this.current_state_data={},this.transition_table=e,this.transitioning=!1}go_to_state(e,t=!1){this.transitioning&&this.__exit_last_state(),this.last_state=this.current_state,this.current_state=e,this.last_state.before_exit(),this.current_state.before_enter(),this.action_sequencer=this.transition_table.get(this.last_state.name,this.current_state.name,this.current_state_data),this.action_sequencer.play(),this.transitioning=!0,t&&(this.action_sequencer.skip(),this.update())}update(){this.transitioning?(this.__update_transitions(),this.action_sequencer.is_finished()&&(this.transitioning=!1,this.__update_transitions(),this.__exit_last_state(),this.current_state.on_enter())):this.current_state.update()}before_update(){this.current_state.before_update()}fixed_update(){this.current_state.fixed_update()}set_state(e){this.current_state=e}set_default_state_data(e){Object.assign(this.default_state_data,e),Object.assign(this.current_state_data,e)}__update_transitions(){this.action_sequencer.update(Ne.delta_time),this.last_state.update_exit_transition(this.current_state_data,this.action_sequencer.get_progress(),this.action_sequencer),this.current_state.update_enter_transition(this.current_state_data,this.action_sequencer.get_progress(),this.action_sequencer)}__exit_last_state(){this.last_state.on_exit()}}const Ve=new class{constructor(){this.transition_table=new Ie,this.transition_handler=new Be(this.transition_table)}get action_sequencer(){return this.transition_handler.action_sequencer}get current_state_data(){return this.transition_handler.current_state_data}before_update(){this.transition_handler.before_update()}update(){this.transition_handler.update()}fixed_update(){this.transition_handler.fixed_update()}add_transitions(e){this.transition_table.add_transitions(e)}set_transitions(e){this.transition_table.set_transitions(e)}set_default_state_data(e){this.transition_table.set_default_state_data(e),this.transition_handler.set_default_state_data(e)}set_transitions_velocity(e){this.transition_table.set_transitions_velocity(e)}};class Ye{constructor(){this.view_controllers=[]}go_to_view_controller(e,t=!1){const s=this.get(e);Ve.transition_handler.go_to_state(s,t)}update(){this.__set_view_controllers_opacities()}register_view_controller(e){this.view_controllers.push(e)}set_view_controller(e){const t=this.get(e);Ve.transition_handler.set_state(t)}get_current_view_controller(){return Ve.transition_handler.current_state}get(e){for(let t=0;t<this.view_controllers.length;t++)if(this.view_controllers[t].name===e)return this.view_controllers[t];console.error("[ViewControllerManager.get] no view controller found for: ",e)}__set_view_controllers_opacities(){for(let e=0;e<this.view_controllers.length;e++)this.view_controllers[e].set_opacity(Ve.transition_handler.current_state_data)}__capitalize(e){let t=e.toUpperCase().replace("/","");return t=this.__snake_to_whitespace(t),t}__snake_to_whitespace(e){return e.replace(/([-_][A-Z])/g,(e=>e.replace("-"," ").replace("_"," ")))}}const qe=new class extends Ye{};const Ge=new class{constructor(){this.methods=[],this.args=[]}push(e,t=[]){this.methods.push(e),this.args.push(t)}clear(){this.methods=[],this.args=[]}};class We extends Ae{constructor({name:e,url:t,transition_data:s}){super(e),this.url=t;const i=[{to:e,data:s=s||{animation_tracks:[],triggers:[]}}];this.current_opacity=0,qe.register_view_controller(this),Ve.add_transitions(i)}before_enter(){Ge.push(`${this.name}_view.before_enter`)}on_enter(){Ge.push(`${this.name}_view.on_enter`)}before_exit(){Ge.push(`${this.name}_view.before_exit`)}on_exit(){Ge.push(`${this.name}_view.on_exit`)}update(){Ge.push(`${this.name}_view.update`)}fixed_update(){}update_enter_transition(e,t,s){Ge.push(`${this.name}_view.update_enter_transition`,[e,t])}update_exit_transition(e,t,s){Ge.push(`${this.name}_view.update_exit_transition`,[e,t])}set_opacity(e){const t=e[`${this.name}_opacity`];(this.current_opacity>t||this.current_opacity<t)&&(this.current_opacity=t,Ge.push(`${this.name}_view.set_opacity`,[t]))}}const Ee=new class{init(){this._current=void 0,this._spectator=void 0}set current(e){this._current=e}get current(){return this._current}set spectator(e){this._spectator=e}get spectator(){return this._spectator}};class Xe{constructor(e){this.uses_dynamic_font=e,this.__textHeight=null,this.canvas=document.createElement("canvas"),this.ctx=this.canvas.getContext("2d")}getFontHeight(e="Arial"){if(null==this.__textHeight||this.uses_dynamic_font){const t=document.getElementsByTagName("body")[0],s=document.createElement("div"),i=document.createTextNode("MÉqgOLAKTAL");s.appendChild(i),s.setAttribute("style",`font:${e};position:absolute;top:0;left:0`),t.appendChild(s),this.__textHeight=s.offsetHeight,t.removeChild(s)}return this.__textHeight}get_text_size(e,s="24px Arial"){const i=new t;return this.ctx.font=s,i.x=Math.ceil(this.ctx.measureText(e).width),i.y=Math.ceil(this.getFontHeight(s)),i}draw_canvas(e,t={}){return t.font=t.font||"24px Arial",t.font_color=t.font_color||"#000000",this.__draw(e,t,this.canvas,this.ctx),this.canvas}draw_on_texture(e,t){const s=this.draw_canvas(e,t),i=new o(s,a,_,_,l,l);return i.generateMipMaps=!1,i.needsUpdate=!0,i}__draw(e,t){}roundRect(e,t,s,i,r,n,o,a){if(void 0===a&&(a=!0),void 0===n&&(n=5),"number"==typeof n)n={tl:n,tr:n,br:n,bl:n};else{const e={tl:0,tr:0,br:0,bl:0};for(const t in e)n[t]=n[t]||e[t]}e.beginPath(),e.moveTo(t+n.tl,s),e.lineTo(t+i-n.tr,s),e.quadraticCurveTo(t+i,s,t+i,s+n.tr),e.lineTo(t+i,s+r-n.br),e.quadraticCurveTo(t+i,s+r,t+i-n.br,s+r),e.lineTo(t+n.bl,s+r),e.quadraticCurveTo(t,s+r,t,s+r-n.bl),e.lineTo(t,s+n.tl),e.quadraticCurveTo(t,s,t+n.tl,s),e.closePath(),o&&e.fill(),a&&e.stroke()}}class Qe extends Xe{constructor(){super(),this.text_margin=new t(2,0)}__draw(e,t,s,i){i.font=t.font;const r=this.get_text_size(e,t.font);s.width=Math.ceil(r.x+2*this.text_margin.x),s.height=Math.ceil(r.y+2*this.text_margin.y),i.clearRect(0,0,s.width,s.height),i.globalAlpha=0,i.fillStyle=t.font_color||"#000000",i.fillRect(0,0,s.width,s.height),i.globalAlpha=1,i.globalAlpha=1,i.font=t.font,i.fillStyle=t.font_color||"#000000",i.textBaseline="middle",i.textAlign=t.textAlign||"center","center"===i.textAlign?i.fillText(e,s.width/2,s.height/2):i.fillText(e,0,s.height/2)}}const $e=new class{init(){this.max_anisotropy=0,this.vertex_texture_sampler_available=!1,this.fp_textures_available=!1}};class He extends h{constructor(e=1){super();const t=[];t.push(new c(0,0,0)),t.push(new c(0,0,1e3));const s=new u({color:4474111,depthFunc:i}),r=(new d).setFromPoints(t),n=new p(r,s);n.renderOrder=5e4;const o=[];o.push(new c(0,0,0)),o.push(new c(0,1e3,0));const a=new u({color:4521796,depthFunc:i}),_=(new d).setFromPoints(o),l=new p(_,a);l.renderOrder=5e4;const h=[];h.push(new c(0,0,0)),h.push(new c(1e3,0,0));const m=new u({color:16729156,depthFunc:i}),g=(new d).setFromPoints(h),f=new p(g,m);f.renderOrder=5e4,this.renderOrder=1e5,this.add(n),this.add(l),this.add(f),this.scale.set(e,e,e)}update(){}dispose(){}}const Ze=new class{init(){this._current=new m,this._current.name="default_scene"}add_scene(e){}get current(){return this._current}set current(e){this._current=e}dispose(){for(this.current.traverse((e=>{e.geometry&&(e.geometry.dispose(),e.material.dispose())}));this.current.children.length>0;)this.current.remove(this.current.children[0])}};class Je extends g{constructor(e,t,s){e=e||new c(1,1,1),t=t||new c(1,1,1),s=s||16711680;super(new f(e.x,e.y,e.z,t.x,t.y,t.z),new v({color:s}))}}class Ke extends g{constructor(e,t){t=t||"#FF0000";super(new x(e=e||1,64,64),new v({color:t}))}}class et extends g{constructor(e,t,s){e=e||"#FF0000";const i=(t=t||1)-.4,r=new w(.01,.01,i,32);r.translate(0,i/2,0);const n=new b(.1,.4,32);n.translate(0,i+.2,0);const o=le.mergeBufferGeometries([r,n]);o.rotateX(1.57);super(o,new v({color:e})),s&&this.quaternion.setFromUnitVectors(new c(0,0,1),s),this._dir=s}set dir(e){this.quaternion.setFromUnitVectors(new c(0,0,1),e),this._dir=e}get dir(){return this._dir}set length(e){this.scale.z=e}get length(){return this.scale.z}}const tt=new class{init(){this.width=1,this.height=1,this.position=new t,this.render_width=1,this.render_height=1,this.width_height=new t(this.width,this.height),this.dpr=1,this.pixel_size=new t(1/this.width,1/this.height)}update_position(e,t){this.position.set(e,t)}update(){this.size_changed=!1}update_size(e,s){this.width=e,this.height=s,this.pixel_size=new t(1/this.width,1/this.height),this.width_height.x=e,this.width_height.y=s,this.render_width=e*this.dpr,this.render_height=s*this.dpr,this.size_changed=!0}apply_pixel_density_v2(e){return e.multiplyScalar(1/this.dpr),e}apply_pixel_density(e){return e*(1/this.dpr)}get_pixel_size(){return this.pixel_size}get aspect_ratio(){return this.width/this.height}get portrait(){return this.width<this.height}};class st extends be{constructor(e,s,i,r){super("\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 uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n ",{_MainTex:{value:void 0},_ScreenSpacePosition:{value:new t},_ScreenSize:{value:new t},_TextureSize:{value:new t}})}set_position(e,t){this.uniforms._ScreenSpacePosition.value.set(e,t)}set_texture(e,t,s){this.uniforms._MainTex.value=e,this.uniforms._TextureSize.value.set(e.image.width,e.image.height),void 0!==t&&(this.uniforms._TextureSize.value.x=t),void 0!==s&&(this.uniforms._TextureSize.value.y=s)}set_screen_size(e,t){this.uniforms._ScreenSize.value.set(e,t)}}class it extends y{constructor(e,t,s,i){super(e,t,s,i),this.clear_color=new r("#000000"),this.clear_alpha=1}copy(e){return super.copy(e),this.clear_color.copy(e.clear_color),this.clear_alpha=e.clear_alpha,this}}const rt=new class{init(){this.Vector3_one=new c(1,1,1),this.Vector3_zero=new c(0,0,0),this.canvas_renderer=void 0,this.display_texture_meshes=[],this.ctx=void 0,this.scene=new m,this.camera=new it(60,tt.aspect_ratio,.1,1e3),this.camera.clear_alpha=0}draw_arrow(e,t,s=16711680){const i=new et(s,t.length(),t.clone().normalize());return i.position.copy(e),this.scene.add(i),i}draw_axis(){const e=new He;return this.scene.add(e),e}set_debug_RT(e){this.rt_debug=e}draw_rectangle(e,t,s,i){t=t||100,s=s||100,this.ctx.fillStyle=i||"rgba(255, 0, 0, 1)",this.ctx.fillRect(e.x-t/2,this.ctx.canvas.height-e.y-s/2,t,s)}clear(){this.ctx&&this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height)}draw_line_2D(e,t,s){this.ctx.strokeStyle=s||"rgba(255, 0, 0, 1)",this.ctx.beginPath(),this.ctx.moveTo(e.x,e.y),this.ctx.lineTo(t.x,t.y),this.ctx.closePath(),this.ctx.stroke()}draw_line(e,t=16711680){const s=new u({color:t}),i=(new d).setFromPoints(e),r=new p(i,s);return r.frustumCulled=!1,this.scene.add(r),r}draw_cube(e,t,s){t=t||1,s=s||16711680,e=e||new c;const i=new Je(new c(t,t,t),void 0,s);return i.position.copy(e),this.scene.add(i),i}draw_oriented_cube(e,t,s=1,i="#FF0000",r=.1){const n=e.distanceTo(t),o=new Je(new c(r,s,n),void 0,i),a=t.clone().sub(e).multiplyScalar(.5),_=a.clone().normalize();return a.add(e),o.position.copy(a),o.quaternion.setFromUnitVectors(new c(0,0,-1),_),this.scene.add(o),o}draw_plane(t,s,i){const r=new T(t,s),n=new e({uniforms:{_Color:{value:new M(0,1,0,.2)}},vertexShader:xe,fragmentShader:we,transparent:!0,depthWrite:!1}),o=new g(r,n);return o.renderOrder=-1e4,this.scene.add(o),o}draw_empty_cube(e,t,s){t=t||1,s=s||16711680;const i=(new S).setFromCenterAndSize(new c,new c(t,t,t)),r=new z(i,s);return r.position.copy(e||new c),r}draw_sphere(e,t,s){t=t||1,s=s||16711680,e=e||new c;const i=new Ke(t,s);return i.position.copy(e),this.scene.add(i),i}draw_point_array(e,t=!1,s=16711680){const i=new F(e,t);i.updateArcLengths();const r=i.getSpacedPoints(200);return this.draw_line(r,65280)}draw_sphere_helper(e,t){t=t||16711680;const s=new x(e.radius,32,32),i=new v({color:t}),r=new g(s,i);return r.position.copy(e.center),Ze.current.add(r),r}draw_math_sphere(t){const s=new x(t.radius,32,32),i=new e({uniforms:{_Color:{value:new M(1,0,0,.2)}},vertexShader:xe,fragmentShader:we,transparent:!0}),r=new g(s,i);r.position.copy(t.center),Ze.current.add(r)}draw_bounding_box(e){const t=new z(e,16776960);Ze.current.add(t)}draw_curve(e,t){const s=new c(0,0,0);t&&(s.y=t.offset||0);for(let t=0;t<e.length-1;t++)this.draw_line(e[t].clone().add(s),e[t+1].clone().add(s))}draw_texture(e,t,s){const i=new g(new T(1,1),new st);return this.display_texture_meshes.push(i),this.scene.add(i),i.material.set_texture(e,t,s),i}render(e){for(let e=0;e<this.display_texture_meshes.length;e++)this.display_texture_meshes[e].material.set_screen_size(tt.width,tt.height);this.scene.children.length>0&&e.render(this.scene,Ee.current)}};class nt{constructor(e){this.renderer=e,this._blit_scene=new m,this._blit_material=new fe,this._blit_quad=new g(new T(1,1),this._blit_material),this._blit_scene.add(this._blit_quad),this._blit_camera=new A(-1,1,1,-1,-1e4,1e4)}blit(e,t){this._blit_quad.material=this._blit_material;const s=!0===e.isWebGLRenderTarget?e.texture:e,i=!0===e.isWebGLRenderTarget?e.width:e.image.width,r=!0===e.isWebGLRenderTarget?e.height:e.image.height;this._blit_quad.material.uniforms._MainTex.value=s,this._blit_quad.material.uniforms._Resolution.value.set(i,r),t?this._blit_quad.material.uniforms._TargetResolution.value.set(t.width,t.height):this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value),this.__render(t)}material_pass(e,t){this._blit_quad.material=e,this.__render(t)}blit_with_material(e,t,s){const i=!0===e.isWebGLRenderTarget?e.texture:e,r=!0===e.isWebGLRenderTarget?e.width:e.image.width,n=!0===e.isWebGLRenderTarget?e.height:e.image.height;this._blit_quad.material=s,this._blit_quad.material.uniforms._MainTex.value=i,this._blit_quad.material.uniforms._Resolution.value.set(r,n),t?this._blit_quad.material.uniforms._TargetResolution.value.set(t.width,t.height):this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value),this.__render(t)}blit_clear_with_material(e,t){this._blit_quad.material=t,this.__render(e)}dispose(){this._blit_quad.geometry.dispose(),this._blit_quad.material.dispose()}__render(e){e=void 0===e?null:e;const t=this.renderer.getRenderTarget();this.renderer.setRenderTarget(void 0===e?null:e),this.renderer.render(this._blit_scene,this._blit_camera),this.renderer.setRenderTarget(t)}}class ot extends fe{constructor(e,t){super("#define GLSLIFY 1\nuniform vec4 _DepthNormal;vec2 EncodeFloatRG(float v){vec2 kEncodeMul=vec2(1.0,255.0);float kEncodeBit=1.0/255.0;vec2 enc=kEncodeMul*v;enc=fract(enc);enc.x-=enc.y*kEncodeBit;return enc;}vec2 EncodeNormal(vec3 n){float scale=1.7777;vec2 enc=n.xy/(n.z+1.0);enc/=scale;enc=enc*0.5+0.5;return enc;}void main(){gl_FragColor=vec4(EncodeFloatRG(_DepthNormal.x),EncodeNormal(normalize(_DepthNormal.yzw)));}"),this.uniforms._DepthNormal={value:new M(e,t.x,t.y,t.z)}}}class at extends e{constructor(){super({uniforms:{_FarPlane:{value:1}},vertexShader:"#define GLSLIFY 1\nvarying vec3 v_normal;varying vec3 v_pos;void main(){vec3 pos=position;mat4 MVP=projectionMatrix*modelViewMatrix;v_normal=(modelViewMatrix*vec4(normal,0.0)).xyz;v_pos=(modelViewMatrix*vec4(pos,1.0)).xyz;gl_Position=MVP*vec4(pos,1.0);}",fragmentShader:"#define GLSLIFY 1\nvarying vec3 v_normal;varying vec3 v_pos;uniform float _FarPlane;vec2 EncodeFloatRG(float v){vec2 kEncodeMul=vec2(1.0,255.0);float kEncodeBit=1.0/255.0;vec2 enc=kEncodeMul*v;enc=fract(enc);enc.x-=enc.y*kEncodeBit;return enc;}vec2 EncodeNormal(vec3 n){float scale=1.7777;vec2 enc=n.xy/(n.z+1.0);enc/=scale;enc=enc*0.5+0.5;return enc;}void main(){gl_FragColor=vec4(EncodeFloatRG(length(v_pos.z)/_FarPlane),EncodeNormal(normalize(v_normal)));}"})}set far_plane(e){this.uniforms._FarPlane.value=e}get far_plane(){return this.uniforms._FarPlane.value}}class _t{constructor(){this.RT=new R(tt.width,tt.height),this.clear_depth_normal_mat=new ot(1,new c(0,0,1)),this.depth_normal_material=new at}render(e){this.__resize_RT_if_necessary(),e.clear(this.RT,void 0,!0,!0),e.blit_clear_with_material(this.RT,this.clear_depth_normal_mat),this.depth_normal_material.far_plane=Ee.current.far,e.render(void 0,void 0,this.RT,this.depth_normal_material)}__resize_RT_if_necessary(){this.RT.width===tt.width&&this.RT.height===tt.height||this.RT.setSize(tt.width,tt.height)}get render_target(){return this.RT}}const lt=new class{init({canvas:e,core_attributes:t,context_attributes:s,threejs_attributes:i,dpr:r}){this._renderer=void 0,this.blitter=void 0,this.canvas=void 0,this.no_render=void 0,this.current_render_mode=void 0,this.generateDepthNormalTexture=!1,this.depth_and_normals_renderer=void 0,this.is_webgl2=!1,this.canvas_context=void 0,this.context_attributes=void 0,this.core_attributes={force_webgl2:!0,xr_enabled:!1},this.context_attributes={alpha:!0,antialias:!1,depth:!0,desynchronized:!1,failIfMajorPerformanceCaveat:!1,powerPreference:"high-performance",premultipliedAlpha:!0,preserveDrawingBuffer:!0,stencil:!1},this.threejs_attributes={logarithmicDepthBuffer:!1},Object.assign(this.core_attributes,t),Object.assign(this.context_attributes,s),Object.assign(this.threejs_attributes,this.context_attributes),Object.assign(this.threejs_attributes,i),this.core_attributes.force_webgl2?this.canvas_context=e.getContext("webgl2",this.context_attributes)||e.getContext("webgl",this.context_attributes)||e.getContext("experimental-webgl",this.context_attributes):this.canvas_context=e.getContext("webgl",this.context_attributes)||e.getContext("experimental-webgl",this.context_attributes),this.is_webgl2="WebGL2RenderingContext"===this.canvas_context.constructor.name,this.threejs_attributes.canvas=e,this.threejs_attributes.context=this.canvas_context,this._renderer=new C(this.threejs_attributes),this.core_attributes.xr_enabled?this._renderer.xr.enabled=!0:this._renderer.autoClear=!1,tt.dpr=r,this._renderer.setPixelRatio(1),this.is_webgl2||this._renderer.extensions.get("ANGLE_instanced_arrays"),this.blitter=new nt(this._renderer),this.canvas=this._renderer.domElement,this.no_render=new Te,this.current_render_mode=this.no_render,$e.max_anisotropy=this._renderer.capabilities.getMaxAnisotropy(),$e.vertex_texture_sampler_available=this._renderer.capabilities.maxVertexTextures>0,$e.fp_textures_available=this.is_floating_point_texture_available(),this.generateDepthNormalTexture=!1,this.depth_and_normals_renderer=new _t}get dom_element(){return this._renderer.domElement}get depth_normals_RT(){return this.depth_and_normals_renderer.render_target}set_state(e){this.current_render_mode.on_exit(this,this._renderer),this.current_render_mode=e,this.current_render_mode.on_enter(this,this._renderer)}update(){this.generateDepthNormalTexture&&this.depth_and_normals_renderer.render(this),this.__update_current_camera(),Ee.current&&this.current_render_mode.render(),tt.update()}__update_current_camera(){Ee.current&&(Ee.current.aspect=tt.aspect_ratio,Ee.current.updateProjectionMatrix(),Ee.current.updateMatrix(),Ee.current.updateMatrixWorld(!0))}render(e,t,s,i){this.__apply_override_material(e,i),this._renderer.setRenderTarget(void 0===s?null:s),this._renderer.render(e||Ze.current,t||Ee.current),this.__apply_override_material(e,void 0)}render_scene(e){e.on_pre_render&&e.on_pre_render(),e.render?e.render():this.render(e,void 0),e.on_post_render&&e.on_post_render()}__apply_override_material(e,t){t=void 0===t?null:t,e?e.overrideMaterial=t:Ze.current.overrideMaterial=t}readback_RT(e,t){this._renderer.readRenderTargetPixels(e,0,0,e.width,e.height,t)}clear(e,t,s,i){this._renderer.setRenderTarget(void 0===e?null:e),t&&this._renderer.setClearColor(t.clear_color,t.clear_alpha),this._renderer.clear(!!t,!!s,!!i)}on_resize(e,t){for(const s of e)tt.dpr=t,tt.update_position(s.contentRect.x,s.contentRect.y),tt.update_size(s.contentRect.width,s.contentRect.height),this.canvas.width=tt.render_width,this.canvas.height=tt.render_height,this._renderer.setViewport(0,0,tt.render_width,tt.render_height),this.__update_current_camera()}material_pass(e,t){this.blitter.material_pass(e,t)}blit(e,t,s){s?this.blitter.blit_with_material(e,t,s):this.blitter.blit(e,t)}blit_clear_with_material(e,t){this.blitter.blit_clear_with_material(e,t)}take_screenshot(e,t=tt.width,s=tt.height){const i=tt.width,r=tt.height,n=t,o=s,a=1024,_=1024,l=parseInt(Math.ceil(n/a)),h=parseInt(Math.ceil(o/_));tt.update_size(a,_);const c=this._renderer.getPixelRatio();this._renderer.setPixelRatio(1),this._renderer.setSize(a,_,!1);const u=document.createElement("canvas").getContext("2d");u.canvas.width=n,u.canvas.height=o,Ee.current.aspect=tt.aspect_ratio,Ee.current.updateMatrix(),Ee.current.updateMatrixWorld(!0);for(let e=0;e<l;e++)for(let t=0;t<h;t++)Ee.current.setViewOffset(n,o,tt.width*e,tt.height*t,tt.width,tt.height),this.current_render_mode.render(),u.drawImage(this._renderer.domElement,tt.width*e,tt.height*t);u.canvas.toBlob(e,"image/png;base64;"),Ee.current.clearViewOffset(),tt.update_size(i,r),this._renderer.setPixelRatio(c),this._renderer.setSize(i,r,!1),Ee.current.aspect=tt.aspect_ratio,Ee.current.updateMatrix(),Ee.current.updateMatrixWorld(!0)}download_screenshot(e){const t=document.createElement("a");t.download="Snapshot.png",t.href=URL.createObjectURL(e),t.click(),t.onclick=function(){requestAnimationFrame((function(){URL.revokeObjectURL(t.href)})),t.removeAttribute("href")}}dispose(){this._renderer.dispose(),this.current_render_mode.dispose(),this.blitter.dispose()}is_floating_point_texture_available(){const t=new R(1,1,{minFilter:l,magFilter:l,format:k,colorSpace:P,type:D,stencilBuffer:!1,depthBuffer:!1}),r=new e({vertexShader:"\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n ",fragmentShader:"\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n ",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i});this.material_pass(r,t);const n=new Float32Array(4);return this._renderer.readRenderTargetPixels(t,0,0,1,1,n),Math.abs(n[1]-4865.35)<.001}};class ht{constructor(){}get is_animating(){return!1}on_enter(e){}update(e){}on_exit(e){}}class ct{constructor(){this.t=0,this.easing_function_t=0}get is_animating(){return!0}on_enter(e){}update(e){this.t+=Ne.delta_time/e.duration,this.easing_function_t=e.easing_function(this.t),this.easing_function_t=ke.clamp(this.easing_function_t,0,1),e.set_property_value(ke.lerp(e.from,e.to,this.easing_function_t)),this.easing_function_t>=.9999&&(e.set_property_value(e.to),e.set_current_state(new ht),e.finished_callback(e))}on_exit(e){}}class ut{constructor({element:e,css_property:t,from:s=0,to:i=1,duration:r=1,value_prefix:n="",value_suffix:o="",easing_function:a=De.ease_in_out_cubic,finished_callback:_=(()=>{})}){this.element=e,this.css_property=t,this.from=s,this.to=i,this.value_prefix=n,this.value_suffix=o,this.duration=r,this.easing_function=a,this.finished_callback=_,this.current_state=new ht}animate(){this.set_current_state(new ct)}stop(){this.set_current_state(new ht)}set_property_value(e){this.element.style[this.css_property]=`${this.value_prefix}${e}${this.value_suffix}`}update(){this.current_state.update(this)}get is_animating(){return this.current_state.is_animating}set_current_state(e){this.current_state.on_exit(this),this.current_state=e,this.current_state.on_enter(this)}}const dt=new class{init(){this.operating_systems={ANDROID:"android",IOS:"ios",LINUX:"linux",MAC:"mac",WINDOWS:"windows"},this.is_mobile=!!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/),this.is_ipad=!!(navigator.userAgent.match(/Mac/)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2),this.is_ios=!!navigator.userAgent.match(/(iPhone|iPod|iPad)/)||this.is_ipad,this.is_android=this.get_os()===this.operating_systems.ANDROID,this.is_linux=this.get_os()===this.operating_systems.LINUX,this.is_mac=this.get_os()===this.operating_systems.MAC,this.is_windows=this.get_os()===this.operating_systems.WINDOWS}get_os(){const e=navigator.userAgent,t=navigator.platform;let s=null;return-1!==["Macintosh","MacIntel","MacPPC","Mac68K"].indexOf(t)?s=this.operating_systems.MAC:-1!==["iPhone","iPad","iPod"].indexOf(t)?s=this.operating_systems.IOS:-1!==["Win32","Win64","Windows","WinCE"].indexOf(t)?s=this.operating_systems.WINDOWS:/Android/.test(e)?s=this.operating_systems.ANDROID:!s&&/Linux/.test(t)&&(s=this.operating_systems.LINUX),s}};const pt=new class{init(){this.target_geometry=void 0,this.target_position=new c}set_target_geometry(e){this.target_geometry=e}};const mt=new class{init(){this.resources={},this.resources_by_url={}}set_resource(e,t,s){Object.keys(this.resources_by_url).includes(t)?this.resources[e]=this.resources_by_url[t]:(this.resources[e]=s,this.resources_by_url[t]=s)}get_resource(e){return this.resources[e]}get(e){return this.resources[e]}};class gt{constructor(e,s){this.geometry=e,this.material=void 0,this.uniforms={},this.batch_width=s,this.data_textures=[],this.object_names=void 0,this.zero_offset=new t,this.write_offset=new t,this.uniform_dirty_count=0,this.tmp_uploaded_data_count=0}init(t,s,i){this.material=new e({uniforms:this.uniforms,vertexShader:s,fragmentShader:i}),this.object_names=t}add_global_uniform(e,t){this.uniforms[e]={value:t},this.material.needsUpdate=!0}set_global_uniform(e,t){this.uniforms[e].value=t}add_object_uniform_v3(e,t){const s=this.__create_rgb_texture(this.batch_width),i=this.__create_rgb_texture(this.batch_width),r=this.__create_rgb_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgb(n,t)}add_object_uniform_v4(e,t){const s=this.__create_rgba_texture(this.batch_width),i=this.__create_rgba_texture(this.batch_width),r=this.__create_rgba_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgba(n,t)}add_object_uniform_v4_float(e,t){const s=this.__create_rgba_float_texture(this.batch_width),i=this.__create_rgba_float_texture(this.batch_width),r=this.__create_rgba_float_texture(1),n=this.__add_data_texture(e,s,i,r);t&&this.__flood_data_texture_rgba(n,t)}set_object_uniform_v3(e,t,s,i,r,n){const o=this.__get_object_index(e),a=this.__get_data_texture(t);this.__set_pixel_rgb(a.src,o,s,i,r,n),this.__set_pixel_rgb(a.one_pixel,0,s,i,r,n),a.last_accessed_index=o,a.dirty_count++}set_object_uniform_v4(e,t,s,i,r,n,o){const a=this.__get_object_index(e),_=this.__get_data_texture(t);this.__set_pixel_rgba(_.src,a,s,i,r,n,o),this.__set_pixel_rgba(_.one_pixel,0,s,i,r,n,o),_.last_accessed_index=a,_.dirty_count++}upload_texture_data(e,t){for(let s=0;s<this.data_textures.length;s++)t>0&&this.data_textures[s].dirty_count>0&&(1===this.data_textures[s].dirty_count&&this.__partial_texture_data_upload(e,this.data_textures[s]),this.data_textures[s].dirty_count>1&&this.__full_texture_data_upload(e,this.data_textures[s]),this.data_textures[s].dirty_count=0,t--)}get_uniform_dirty_count(){this.uniform_dirty_count=0;for(let e=0;e<this.data_textures.length;e++)this.data_textures[e].dirty_count>0&&this.uniform_dirty_count++;return this.uniform_dirty_count}__full_texture_data_upload(e,t){t.dst.needsUpdate=!0,e.copyTextureToTexture(this.zero_offset,t.src,t.dst)}__partial_texture_data_upload(e,t){const s=t.last_accessed_index;-1!==s&&(this.write_offset.y=Math.floor(s/this.batch_width),this.write_offset.x=s-this.batch_width*this.write_offset.y,e.copyTextureToTexture(this.write_offset,t.one_pixel,t.dst))}get_mesh(){return new g(this.geometry,this.material)}__set_pixel_rgb(e,t,s,i,r,n){i&&(e.image.data[3*t+0]=s.x),r&&(e.image.data[3*t+1]=s.y),n&&(e.image.data[3*t+2]=s.z)}__set_pixel_rgba(e,t,s,i,r,n,o){i&&(e.image.data[4*t+0]=s.x),r&&(e.image.data[4*t+1]=s.y),n&&(e.image.data[4*t+2]=s.z),o&&(e.image.data[4*t+3]=s.w)}__flood_data_texture_rgb(e,t){for(let s=0;s<this.batch_width*this.batch_width;s++)this.__set_pixel_rgb(e.src,s,t,!0,!0,!0),e.dirty_count++}__flood_data_texture_rgba(e,t){for(let s=0;s<this.batch_width*this.batch_width;s++)this.__set_pixel_rgba(e.src,s,t,!0,!0,!0,!0),e.dirty_count++}__create_rgb_texture(e){const t=new Uint8Array(3*e*e);return new L(t,e,e,k)}__create_rgba_texture(e){const t=new Uint8Array(4*e*e);return new L(t,e,e,k)}__create_rgba_float_texture(e){const t=new Float32Array(4*e*e);return new L(t,e,e,k,D)}__get_data_texture(e){for(let t=0;t<this.data_textures.length;t++)if(this.data_textures[t].name===e)return this.data_textures[t];console.error("Data texture "+e+" does not exist")}__get_object_index(e){for(let t=0;t<this.object_names.length;t++)if(this.object_names[t]===e)return t;console.error("the name "+e+" is not contained in this batch")}__add_data_texture(e,t,s,i){return s.needsUpdate=!0,this.data_textures.push({name:e,src:t,dst:s,one_pixel:i,last_accessed_index:-1,dirty_count:0}),this.uniforms[e]={value:s},this.data_textures[this.data_textures.length-1]}dispose(){for(let e=0;e<this.data_textures.length;e++)this.data_textures[e].src.dispose(),this.data_textures[e].dst.dispose(),this.data_textures[e].one_pixel.dispose()}}const ft=new class{init(){this.batches=[]}batch(e){const t=[],s=ke.ceilPowerOfTwo(Math.sqrt(e.length));this.__init_uv_array(t,s);let i=0;for(let r=0;r<e.length;r++){const n=e[r].getAttribute("position").count,o=Math.floor(r/s),a=r-s*o;for(let e=0;e<n;e++)t[i]=a/s+.5/s,t[i+1]=o/s+.5/s,i+=2}const r=new U(new Float32Array(t),2),n=le.mergeBufferGeometries(e);return n.setAttribute("attr_accessor_uv",r),this.batches.push(new gt(n,s)),this.batches[this.batches.length-1]}upload_texture_data(e){for(let t=0;t<this.batches.length;t++)this.batches[t].upload_texture_data(e,1)}__init_uv_array(e,t){for(let s=0;s<t*t*2;s++)e.push(0)}};const vt=new class{init(e){this.input=e,this.ui_elements=[],this._tmp_normalized_pos=new t,this.ss_scene=new m,this.ss_scene.matrixWorldAutoUpdate=!1,this.ss_scene.frustumCulled=!1,this.ws_scene=new m,this.ws_scene.matrixWorldAutoUpdate=!1,this.ws_scene.frustumCulled=!1,this.ss_camera=new A(-1,1,1,-1,-100,100)}delete_element(e){const t=this.ui_elements.indexOf(e);t>-1&&this.ui_elements.splice(t,1),this.ss_scene.remove(e),this.ws_scene.remove(e),e.dispose()}add_screen_space_element(e){this.ui_elements.push(e),this.ss_scene.add(e),e.set_screen_space_coordinate_system()}add_world_space_element(e){this.ui_elements.push(e),this.ws_scene.add(e),e.set_world_space_coordinate_system()}update(){this.ss_camera.updateProjectionMatrix(),this._tmp_normalized_pos.copy(this.input.NDC);for(let e=0;e<this.ui_elements.length;e++)this.ui_elements[e].update_state(this._tmp_normalized_pos)}render(e){this.ss_scene.children.length>0&<.render(this.ss_scene,this.ss_camera),this.ws_scene.children.length>0&<.render(this.ws_scene,Ee.current)}clear(){this.current_clicked_element=void 0}};class xt{constructor(){this.sphere=new j}fit_points(e,t,s,i){this.sphere.setFromPoints(e);const r=ke.degToRad(s/2),n=2*Math.atan(Math.tan(r)*i)/2,o=this.get_up_plane_normal(t,r),a=this.get_down_plane_normal(t,r),_=this.get_left_plane_normal(t,n),l=this.get_right_plane_normal(t,n),h=new c(0,0,-1).applyQuaternion(t),u=this.sphere.center.clone(),d=this.get_distance_to_fit_rect(2*this.sphere.radius,2*this.sphere.radius,s,i),p=u.clone().add(h.clone().multiplyScalar(-1*d)),m=(new O).setFromNormalAndCoplanarPoint(o,p),g=(new O).setFromNormalAndCoplanarPoint(a,p),f=(new O).setFromNormalAndCoplanarPoint(_,p),v=(new O).setFromNormalAndCoplanarPoint(l,p);this.apply_center_correction_to_pos(p,e,t,m,g,f,v),m.setFromNormalAndCoplanarPoint(o,p),g.setFromNormalAndCoplanarPoint(a,p),f.setFromNormalAndCoplanarPoint(_,p),v.setFromNormalAndCoplanarPoint(l,p);let x=1/0;const w=h.clone().multiplyScalar(-2*d);for(let t=0;t<e.length;t++){const s=new I(e[t].clone(),e[t].clone().add(w)),i=new c,r=new c,n=new c,o=new c;m.intersectLine(s,i),g.intersectLine(s,r),f.intersectLine(s,n),v.intersectLine(s,o),i.length()<1e-4&&console.log("up intersection not found",t),r.length()<1e-4&&console.log("down intersection not found",t),n.length()<1e-4&&console.log("left intersection not found",t),o.length()<1e-4&&console.log("right intersection not found",t);const a=e[t].clone().sub(i).length(),_=e[t].clone().sub(r).length(),l=e[t].clone().sub(n).length(),h=e[t].clone().sub(o).length(),u=Math.min(a,_),d=Math.min(l,h),p=Math.min(u,d);p<x&&(x=p)}const b=h.clone().multiplyScalar(x);return p.clone().add(b)}apply_center_correction_to_pos(e,t,s,i,r,n,o){const a=this.get_vertical_correction(t,r,i,s),_=this.get_horizontal_correction(t,n,o,s);e.add(a),e.add(_)}get_vertical_correction(e,t,s,i){let r=1/0,n=1/0;const o=new c(0,1,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const a=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(-5e6))),_=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(5e6))),l=new c,h=new c;t.intersectLine(a,l),s.intersectLine(_,h);const u=l.distanceTo(e[i]),d=h.distanceTo(e[i]);h.length()<1e-4&&console.log("vertical up intersection not found",i),l.length()<1e-4&&console.log("vertical down intersection not found",i),u<n&&(n=u),d<r&&(r=d)}const a=(r-n)/2;return o.clone().multiplyScalar(-a)}get_horizontal_correction(e,t,s,i){let r=1/0,n=1/0;const o=new c(1,0,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const a=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(-5e6))),_=new I(e[i].clone(),e[i].clone().add(o.clone().multiplyScalar(5e6))),l=new c,h=new c;t.intersectLine(a,l),s.intersectLine(_,h);const u=l.distanceTo(e[i]),d=h.distanceTo(e[i]);l.length()<1e-4&&console.log("left intersection not found",i),h.length()<1e-4&&console.log("right intersection not found",i),u<n&&(n=u),d<r&&(r=d)}const a=(r-n)/2;return o.clone().multiplyScalar(-a)}get_up_plane_normal(e,t){const s=new c(0,-1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),t)),s.applyQuaternion(e),s}get_down_plane_normal(e,t){const s=new c(0,1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),-t)),s.applyQuaternion(e),s}get_left_plane_normal(e,t){const s=new c(1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),t)),s.applyQuaternion(e),s}get_right_plane_normal(e,t){const s=new c(-1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),-t)),s.applyQuaternion(e),s}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}class wt{constructor(){}fit_points(e,t,s,i){const r=t.clone().inverse(),n=[];for(let t=0;t<e.length;t++)n.push(e[t].clone().applyQuaternion(r));const o=(new S).setFromPoints(n),a=new c;o.getSize(a);const _=this.get_distance_to_fit_rect(a.x/2,a.y/2,s,i),l=new c;return o.getCenter(l),l.applyQuaternion(t),{center:l,distance_to_center:_}}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}const bt=new class{init(e){this.tmp_mat=new B,this.plane=new O,this.ray=new V,this.tmp_size=new c,this.tmp_unproj=new c,this.input=e}get_up_dir(e){e=e||Ee.current;const t=new c;return t.set(0,1,0),t.applyQuaternion(e.quaternion),t}get_forward_dir(e){e=e||Ee.current;const t=new c;return t.set(0,0,-1),t.applyQuaternion(e.quaternion),t}get_right_dir(e){e=e||Ee.current;const t=new c;return t.set(1,0,0),t.applyQuaternion(e.quaternion),t}unproject_mouse_position(e,t){t=t||Ee.current;const s=new c,i=t.fov/2*Math.PI/180,r=2*Math.atan(Math.tan(i)*t.aspect)/2,n=Math.tan(i)*t.far,o=Math.tan(r)*t.far;return s.set(o*e.x,n*e.y,-t.far).normalize(),s.applyQuaternion(t.quaternion)}get_plane_intersection(e,t,s,i){i=i||Ee.current,s=s||this.input.NDC;const r=new c;return this.plane.setFromNormalAndCoplanarPoint(t||this.get_forward_dir(i),e),i.isPerspectiveCamera?this.ray.set(i.position,this.unproject_mouse_position(s,i)):(this.tmp_unproj.set(s.x,s.y,1).unproject(i),this.ray.set(i.position,this.tmp_unproj)),this.ray.intersectPlane(this.plane,r),r}fit_points_on_camera(e,t=1){const s=(new j).setFromPoints(e).center,i=this.get_forward_dir(Ee.current).clone(),r=(new O).setFromNormalAndCoplanarPoint(i,s),n=ke.project_points_on_plane(e,r),o=new c;let a=(new S).setFromPoints(n);a.getCenter(o);const _=new c(0,1,0).applyQuaternion(Ee.current.quaternion),l=_.clone().cross(i).normalize(),h=(new B).set(l.x,_.x,i.x,s.x,l.y,_.y,i.y,s.y,l.z,_.z,i.z,s.z,0,0,0,1),u=(new B).getInverse(h);for(let e=0;e<n.length;e++)n[e].applyMatrix4(u);const d=new c;a=(new S).setFromPoints(n),a.getSize(d),d.multiplyScalar(t);const p=new c;return a.getCenter(p),{position:o,zoom:this.get_zoom_to_fit_rect(d.x/2,d.y/2)}}get_zoom_to_fit_rect(e,t){const s=Ee.current.fov/2*Math.PI/180,i=2*Math.atan(Math.tan(s)*Ee.current.aspect)/2,r=t/Math.tan(s),n=e/Math.tan(i);return Math.max(Math.abs(n),Math.abs(r))}get_zoom_to_fit_box(e,t){if(t.isOrthographicCamera){e.getSize(this.tmp_size);const t=this.tmp_size.x,s=this.tmp_size.y,i=t/s;return tt.aspect_ratio/i>1?tt.height/s:tt.width/t}{const t=new c;return e.getSize(t),this.get_zoom_to_fit_rect(t.x,t.y)}}get_html_screen_pos(e,t){t=t||Ee.current;const s=new c;return e.getWorldPosition(s),s.project(t),s.x=(.5*s.x+.5)*tt.width,s.y=(1-(.5*s.y+.5))*tt.height,s}world_pos_to_screen(e,t){t=t||Ee.current;const s=new c;return s.copy(e),s.project(t),s.x=(.5*s.x+.5)*tt.width,s.y=(1-(.5*s.y+.5))*tt.height,s}update_projection(e){e.left=-tt.width/2,e.right=tt.width/2,e.top=tt.height/2,e.bottom=-tt.height/2,e.aspect=tt.aspect_ratio,e.updateProjectionMatrix(!0)}fit_bounding_box_points(e,t,s=1){const i=new c;i.copy(t.max).sub(t.min);const r=t.min.clone(),n=r.clone().add(new c(i.x,0,0)),o=r.clone().add(new c(0,i.y,0)),a=r.clone().add(new c(0,0,i.z)),_=r.clone().add(new c(i.x,0,i.z)),l=r.clone().add(new c(0,i.y,i.z)),h=t.max.clone(),u=r.clone().add(new c(i.x,i.y,0));return this.fit_points(e,[r,n,o,a,_,l,h,u],s)}fit_points(e,t,s=1){if(e.isPerspectiveCamera){const i=new c(0,0,-1).applyQuaternion(e.quaternion),r=i.clone().multiplyScalar(-1),n=new xt,o=tt.aspect_ratio,a=n.fit_points(t,e.quaternion,e.fov*s,o),_=(new S).setFromPoints(t),l=new c;_.getCenter(l);const h=(new O).setFromNormalAndCoplanarPoint(r,l),u=new V(a,i),d=new c;u.intersectPlane(h,d);return{zoom:a.distanceTo(d),reference_position:d,camera_position:a}}{const i=(new wt).fit_points(t,this.reference_rotation,e.fov*s,tt.aspect_ratio);this.reference_position.copy(i.center),this.reference_zoom=i.distance_to_center;const r=new c(0,0,1).applyQuaternion(e.quaternion);return{zoom:i.distance_to_center,reference_position:i.center,camera_position:r.multiplyScalar(i.distance_to_center)}}}};const yt=new class{constructor(){}init(e){Ee.init(),bt.init(e),$e.init(),ft.init(),dt.init(),pt.init(),mt.init(),Ze.init(),tt.init(),Ne.init(),vt.init(e),rt.init()}dispose(){lt.dispose(),Ze.dispose()}};class Tt{init(e){this.ctrlz_pressed=!1,this.ctrlz_fired=!1,this.keys={},this.keys_keys=[],this.container=e,this.container.addEventListener("keydown",this.on_key_down.bind(this),!1),this.container.addEventListener("keyup",this.on_key_up.bind(this),!1)}on_key_down(e){90===e.keyCode&&e.ctrlKey&&!this.ctrlz_fired&&(this.ctrlz_pressed=!0,this.ctrlz_fired=!0),e.code&&this.press_key(e.code)}on_key_up(e){this.release_key(e.code)}clear(){this.ctrlz_pressed=!1;for(let e=0;e<this.keys_keys.length;e++)this.keys[this.keys_keys[e]].pressed=!1,this.keys[this.keys_keys[e]].released=!1}release_key(e){const t=this.keys[e];t&&(t.fired=!1,t.down=!1,t.released=!0)}release_keys(){this.ctrlz_fired=!1;for(let e=0;e<this.keys_keys.length;e++)this.keys[this.keys_keys[e]].fired=!1,this.keys[this.keys_keys[e]].down=!1}press_key(e){const t=this.keys[e];t&&(!1===t.down&&(t.pressed=!0),t.down=!0,t.fired=!0)}is_key_pressed(e){const t=this.keys[e];return!!t&&t.pressed}is_key_down(e){const t=this.keys[e];return!!t&&t.down}is_key_released(e){const t=this.keys[e];return!!t&&t.released}register_key(e){this.keys[e]={key_name:e,pressed:!1,down:!1,fired:!1},this.keys_keys=Object.keys(this.keys)}unregister_key(e){delete this.keys[e]}dispose(){this.container.removeEventListener("keydown",this.on_key_down.bind(this),!1),this.container.removeEventListener("keyup",this.on_key_up.bind(this),!1)}}class Mt extends A{constructor(e,t,s,i,n,o){super(e,t,s,i,n,o),this.clear_color=new r("#000000"),this.clear_alpha=1}copy(e){return super.copy(e),this.clear_color.copy(e.clear_color),this.clear_alpha=e.clear_alpha,this}}class St extends e{constructor(){super({uniforms:{},vertexShader:"#define GLSLIFY 1\nvarying vec3 v_normal;void main(){gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0);v_normal=(modelMatrix*vec4(normal,0.0)).xyz;}",fragmentShader:"#define GLSLIFY 1\nvarying vec3 v_normal;void main(){gl_FragColor=vec4(v_normal*0.5+vec3(0.5),1.0);}"})}}class zt extends Te{constructor(){super()}render(){lt.clear(void 0,Ee.current,!0,!0),lt.render(Ze.current,Ee.current,void 0,new St)}}var Ft="#define GLSLIFY 1\nvarying vec2 vUv;varying vec4 vRay;uniform mat4 _InverseProjMatrix;void main(){gl_Position=vec4(uv*2.0-1.0,1.0,1.0);vRay=_InverseProjMatrix*vec4(uv*2.0-1.0,1.0,1.0);vUv=uv;}";class At extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;uniform float _FarPlane;varying vec2 vUv;varying vec4 vRay;vec3 decode_normal(vec4 enc){float scale=1.7777;vec3 nn=enc.xyz*vec3(2.0*scale,2.0*scale,0.0)+vec3(-scale,-scale,1.0);float g=2.0/dot(nn.xyz,nn.xyz);vec3 n;n.xy=g*nn.xy;n.z=g-1.0;return n;}float DecodeFloatRG(vec2 enc){vec2 kDecodeDot=vec2(1.0,1.0/255.0);return dot(enc,kDecodeDot);}vec3 DecodeNormal(vec2 uv){vec4 depthNormal=texture2D(_MainTex,uv);vec3 normalValue=normalize(decode_normal(vec4(depthNormal.zw,0.,0.)));return normalize(normalValue);}vec3 DecodeViewPos(vec2 uv){vec2 depth=texture2D(_MainTex,uv).xy;return DecodeFloatRG(depth)*(vRay.xyz/vRay.w);}void main(){vec3 viewPos=DecodeViewPos(vUv);vec3 normalValue=DecodeNormal(vUv);float vDepth=clamp(0.0,1.0,length(viewPos)/_FarPlane);vDepth=length(viewPos)/_FarPlane;gl_FragColor=vec4(vDepth,vDepth,vDepth,1.0);}",Ft),this.uniforms._FarPlane={value:1},this.uniforms._InverseProjMatrix={value:new B}}}class Rt extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform sampler2D _AO;uniform vec2 _Resolution;uniform vec2 _SampleDir;varying vec2 vUv;void main(){gl_FragColor.rgb=texture2D(_MainTex,vUv).rgb*(1.0-texture2D(_AO,vUv).r);gl_FragColor.a=1.0;}"),this.uniforms._AO={value:void 0}}}class Ct extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform mat4 _InverseProjMatrix;uniform float _Bias;uniform float _Radius;uniform vec2 _Resolution;uniform float _FarPlane;varying vec2 vUv;varying vec4 vRay;uniform vec3 _SampleKernel[64];uniform sampler2D _RandomRotation;uniform mat4 _ProjectionMatrix;vec3 decode_normal(vec4 enc){float scale=1.7777;vec3 nn=enc.xyz*vec3(2.0*scale,2.0*scale,0.0)+vec3(-scale,-scale,1.0);float g=2.0/dot(nn.xyz,nn.xyz);vec3 n;n.xy=g*nn.xy;n.z=g-1.0;return n;}float DecodeFloatRG(vec2 enc){vec2 kDecodeDot=vec2(1.0,1.0/255.0);return dot(enc,kDecodeDot);}vec3 DecodeNormal(vec2 uv){vec2 encoded_normal=texture2D(_MainTex,uv).zw;vec3 normalValue=normalize(decode_normal(vec4(encoded_normal,0.,0.)));return normalize(normalValue);}vec3 DecodeViewPos(vec2 uv){vec2 depth=texture2D(_MainTex,uv).xy;vec4 inv_proj=_InverseProjMatrix*vec4(vUv*2.0-1.0,1.0,1.0);return DecodeFloatRG(depth)*(vRay.xyz/vRay.w);}void main(){vec2 noiseScale=vec2(_Resolution.x/4.0,_Resolution.y/4.0);vec3 fragPos=DecodeViewPos(vUv);vec3 normal=DecodeNormal(vUv);vec3 randomVec=texture2D(_RandomRotation,vUv*noiseScale).xyz;randomVec=vec3(randomVec.xy*2.0-1.0,0);randomVec=normalize(randomVec);vec3 tangent=normalize(randomVec-normal*dot(randomVec,normal));vec3 bitangent=normalize(cross(normal,tangent));mat3 TBN=mat3(tangent,bitangent,normal);float occlusion=0.0;const int kernelSize=64;for(int i=0;i<kernelSize;++i){vec3 sample=TBN*_SampleKernel[i];sample=fragPos+sample*_Radius;vec4 projPos=_ProjectionMatrix*vec4(sample,1.0);vec2 screenPos=projPos.xy/projPos.w;screenPos=screenPos*0.5+0.5;float sampled_depth=DecodeViewPos(screenPos).z;float rangeCheck=smoothstep(0.0,1.0,_Radius/abs(fragPos.z-sampled_depth));occlusion+=step(sample.z+_Bias,sampled_depth)*rangeCheck;}occlusion=(occlusion/float(kernelSize));gl_FragColor.rgb=vec3(occlusion,occlusion,occlusion);gl_FragColor.a=1.0;}",Ft),this.uniforms._InverseProjMatrix={value:new B},this.uniforms._ProjectionMatrix={value:new B},this.uniforms._Bias={value:.0125},this.uniforms._Radius={value:.3},this.uniforms._FarPlane={value:100},this.uniforms._SampleKernel={value:this.__get_sample_kernel()},this.uniforms._RandomRotation={value:this.__get_rotation_kernel()}}__get_sample_kernel(){const e=[];for(let t=0;t<64;t++){const s=new c(2*Math.random()-1,2*Math.random()-1,Math.random());s.normalize();let i=t/64;i=ke.lerp(.1,1,i*i),s.multiplyScalar(i),e.push(s)}return e}__get_rotation_kernel(){const e=new Uint8Array(48);for(let t=0;t<16;t++)e[3*t+1]=Math.floor(255*Math.random()),e[3*t+2]=Math.floor(255*Math.random()),e[3*t+3]=0;const t=new L(e,4,4,k);return t.wrapS=Y,t.wrapT=Y,t.needsUpdate=!0,t}}class kt extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;uniform vec2 _SampleDir;varying vec2 vUv;void main(){vec4 sum=vec4(0.,0.,0.,0.);vec2 dir=(0.5/_Resolution)*_SampleDir;float _Distance=2.0;sum+=texture2D(_MainTex,vUv+dir*-4.*_Distance)*0.0525;sum+=texture2D(_MainTex,vUv+dir*-3.*_Distance)*0.075;sum+=texture2D(_MainTex,vUv+dir*-2.*_Distance)*0.110;sum+=texture2D(_MainTex,vUv+dir*-1.*_Distance)*0.150;sum+=texture2D(_MainTex,vUv+dir*0.*_Distance)*0.225;sum+=texture2D(_MainTex,vUv+dir*1.*_Distance)*0.150;sum+=texture2D(_MainTex,vUv+dir*2.*_Distance)*0.110;sum+=texture2D(_MainTex,vUv+dir*3.*_Distance)*0.075;sum+=texture2D(_MainTex,vUv+dir*4.*_Distance)*0.0525;gl_FragColor=vec4(sum);}"),this.uniforms._SampleDir={value:new t}}}class Pt{constructor(e){this.RT1=new R(1,1),this.RT2=new R(1,1),this.box_blur_mat=new kt}blur(e){e.width===this.RT1.width&&e.height===this.RT1.height||(this.RT1.setSize(e.width,e.height),this.RT2.setSize(e.width,e.height)),this.box_blur_mat.uniforms._SampleDir.value.set(1,0),lt.blit(e,this.RT1,this.box_blur_mat),this.box_blur_mat.uniforms._SampleDir.value.set(0,1),lt.blit(this.RT1,e,this.box_blur_mat)}}class Dt extends Te{constructor(e=!1){super(),this.ssao_mat=new Ct,this.ssao_compose_mat=new Rt,this.debug_normals=new At,this.ssaa=e?2:1,this.main_RT=new R(tt.width*this.ssaa,tt.height*this.ssaa),this.SSAO_RT=new R(tt.width,tt.height),this.blurrer=new Pt,lt.generateDepthNormalTexture=!0}render(){this.__check_RT_size(),lt.clear(this.main_RT,Ee.current,!0,!1),lt.render(Ze.current,Ee.current,this.main_RT),this.__update_uniforms(),lt.blit(lt.depth_normals_RT,this.SSAO_RT,this.ssao_mat),this.blurrer.blur(this.SSAO_RT),lt.blit(this.SSAO_RT,void 0),this.ssao_compose_mat.uniforms._AO.value=this.SSAO_RT.texture,lt.blit(this.main_RT,void 0,this.ssao_compose_mat)}__update_uniforms(){this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(Ee.current.projectionMatrix),this.ssao_mat.uniforms._ProjectionMatrix.value.copy(Ee.current.projectionMatrix),this.ssao_mat.uniforms._FarPlane.value=Ee.current.far}__check_RT_size(){this.main_RT.width===tt.width*this.ssaa&&this.main_RT.height===tt.height*this.ssaa||(this.main_RT.setSize(tt.width*this.ssaa,tt.height*this.ssaa),this.SSAO_RT.setSize(tt.width,tt.height))}}class Lt extends Te{constructor(){super()}render(){lt.clear(void 0,Ee.current,!0,!0),Ze.current.on_pre_render&&Ze.current.on_pre_render(),Ze.current.render?Ze.current.render():lt.render(Ze.current,Ee.current),Ze.current.on_post_render&&Ze.current.on_post_render()}}class Ut extends fe{constructor(e){super("#define GLSLIFY 1\n#include <common>\nvarying vec2 vUv;uniform sampler2D _MainTex;uniform vec2 texSize;uniform vec2 direction;float gaussianPdf(in float x,in float sigma){return 0.39894*exp(-0.5*x*x/(sigma*sigma))/sigma;}void main(){vec2 invSize=1.0/texSize;float fSigma=float(SIGMA);float weightSum=gaussianPdf(0.0,fSigma);vec4 diffuseSum=texture2D(_MainTex,vUv)*weightSum;for(int i=1;i<KERNEL_RADIUS;i++){float x=float(i);float w=gaussianPdf(x,fSigma);vec2 uvOffset=direction*invSize*x;vec4 sample1=texture2D(_MainTex,vUv+uvOffset);vec4 sample2=texture2D(_MainTex,vUv-uvOffset);diffuseSum+=(sample1+sample2)*w;weightSum+=2.0*w;}gl_FragColor=vec4(diffuseSum/weightSum);}",void 0,{KERNEL_RADIUS:e,SIGMA:e}),this.uniforms.texSize={value:new t(.5,.5)},this.uniforms.direction={value:new t(.5,.5)}}set_size(e,t){this.uniforms.texSize.value.x=e,this.uniforms.texSize.value.y=t}set_direction(e,t){this.uniforms.direction.value.set(e,t)}}class jt extends fe{constructor(e){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec3 defaultColor;uniform float defaultOpacity;uniform float luminosityThreshold;uniform float smoothWidth;varying vec2 vUv;void main(){vec4 texel=texture2D(_MainTex,vUv);vec3 luma=vec3(0.299,0.587,0.114);float v=dot(texel.xyz,luma);vec4 outputColor=vec4(defaultColor.rgb,defaultOpacity);float alpha=smoothstep(luminosityThreshold,luminosityThreshold+smoothWidth,v);gl_FragColor=mix(outputColor,texel,alpha);}"),this.uniforms.luminosityThreshold={value:.23},this.uniforms.smoothWidth={value:.01},this.uniforms.defaultColor={value:new r("#000000")},this.uniforms.defaultOpacity={value:0}}}class Ot{constructor(e=5){this.current_width=1,this.current_height=1,this.separableBlurMaterials=[],this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=e,this.kernelSizeArray=[3,5,7,9,11],this.rt_pars={minFilter:q,magFilter:q,format:k},this.renderTargetBright=new R(1,1,this.rt_pars),this.renderTargetBright.texture.generateMipmaps=!1,this.init_materials(),this.init_RT(),this.luminosity_high_pass_mat=new jt}blur(e,t){this.resize_RT(e.width,e.height),t?lt.blit(e,this.renderTargetBright,this.luminosity_high_pass_mat):lt.blit(e,this.renderTargetBright);let s=this.renderTargetBright;for(let e=0;e<this.nMips;e++){const t=this.separableBlurMaterials[e];t.set_direction(1,0),lt.blit(s,this.renderTargetsHorizontal[e],t),t.set_direction(0,1),lt.blit(this.renderTargetsHorizontal[e],this.renderTargetsVertical[e],t),s=this.renderTargetsVertical[e]}}get_blurred_texture(){return this.renderTargetsHorizontal[0].texture}get_blurred_RT(){return this.renderTargetsHorizontal[0]}init_RT(){this.dispose_RT(),this.renderTargetBright.setSize(1,1);for(let e=0;e<this.nMips;e++){const e=new R(1,1,this.rt_pars),t=new R(1,1,this.rt_pars);e.texture.generateMipmaps=!1,t.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(e),this.renderTargetsVertical.push(t)}}resize_RT(e,t){if(this.current_width===e&&this.current_height===t)return;this.current_width=e,this.current_height=t;let s=Math.round(e/2),i=Math.round(t/2);this.renderTargetBright.setSize(s,i);for(let e=0;e<this.nMips;e++)this.renderTargetsVertical[e].setSize(s,i),this.renderTargetsHorizontal[e].setSize(s,i),this.separableBlurMaterials[e].set_size(s,i),s=Math.round(s/2),i=Math.round(i/2)}init_materials(e,t){this.dispose_materials();for(let e=0;e<this.nMips;e++)this.separableBlurMaterials.push(new Ut(this.kernelSizeArray[e]))}dispose_materials(){for(let e=0;e<this.separableBlurMaterials.length;e++)this.separableBlurMaterials[e].dispose();this.separableBlurMaterials.length=0}dispose_RT(){for(let e=0;e<this.renderTargetsVertical.length;e++)this.renderTargetsHorizontal[e].dispose(),this.renderTargetsVertical[e].dispose();this.renderTargetBright.dispose(),this.renderTargetsHorizontal.length=0,this.renderTargetsVertical.length=0}}class It extends Te{constructor(){super(),this.bloom_compose_mat=void 0,this.main_RT=void 0,this.blur_RT=void 0,this.blurrer=void 0,this.add_mat=new ve}on_enter(){this.blurrer=new Ot,this.main_RT=new R(tt.width,tt.height),this.blur_RT=new R(tt.width,tt.height),this.bloom_compose_mat=new ye(5),this.blurrer=new Ot(5),this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture),this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture),this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture),this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture),this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture),this.bloom_compose_mat.set_bloom_strength(1),this.bloom_compose_mat.set_bloom_radius(1),this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture)}set_bloom_strength(e){this.bloom_compose_mat.set_bloom_strength(e)}set_bloom_radius(e){this.bloom_compose_mat.set_bloom_radius(e)}set_tint_color_0(e){this.bloom_compose_mat.set_tint_color_0(e)}set_tint_color_1(e){this.bloom_compose_mat.set_tint_color_1(e)}set_tint_color_2(e){this.bloom_compose_mat.set_tint_color_2(e)}set_tint_color_3(e){this.bloom_compose_mat.set_tint_color_3(e)}set_tint_color_4(e){this.bloom_compose_mat.set_tint_color_4(e)}render(){this.__check_RT_size(),lt.clear(this.main_RT,Ee.current,!0,!1),lt.render(Ze.current,Ee.current,this.main_RT),this.blurrer.blur(this.main_RT,!0),lt.material_pass(this.bloom_compose_mat,this.blurrer.renderTargetsHorizontal[0]),lt.blit(this.main_RT,void 0,this.add_mat)}__check_RT_size(){this.main_RT.width===tt.width&&this.main_RT.height===tt.height||(this.main_RT.setSize(tt.width,tt.height),this.blur_RT.setSize(tt.width,tt.height))}}class Nt extends Te{constructor(){super()}render(){Ze.current.on_pre_render&&Ze.current.on_pre_render(),Ze.current.render?Ze.current.render():lt.render(Ze.current,Ee.current,lt._renderer.getRenderTarget()),this.render_spectator_camera(),Ze.current.on_post_render&&Ze.current.on_post_render()}render_spectator_camera(){const e=Ee.spectator;if(e&<._renderer.xr.isPresenting){const t=lt._renderer.xr.getCamera(Ee.current);e.projectionMatrix.copy(Ee.current.projectionMatrix),e.position.copy(t.position),e.quaternion.copy(t.quaternion);const s=lt._renderer.getRenderTarget();lt._renderer.xr.isPresenting=!1,lt._renderer.setRenderTarget(null),lt._renderer.render(Ze.current,e),lt._renderer.setRenderTarget(s),lt._renderer.xr.isPresenting=!0}}}const Bt=new class{constructor(){this.component_controllers=[],this.enabled_component_controllers=new Set}update(){this.__set_component_controllers_opacities();for(const e of this.enabled_component_controllers)e.update(Ve.current_state_data)}register_component_controller(e){this.component_controllers.push(e)}enable_component_controller(e){this.enabled_component_controllers.add(e)}disable_component_controller(e){this.enabled_component_controllers.delete(e)}get(e){for(let t=0;t<this.component_controllers.length;t++)if(this.component_controllers[t].name===e)return this.component_controllers[t];console.error("[ViewComponentControllerManager.get] no component_controller found for: ",e)}__set_component_controllers_opacities(){for(let e=0;e<this.component_controllers.length;e++)this.component_controllers[e].set_opacity(Ve.current_state_data)}};class Vt{constructor(e,t){e=e||new ge,this.target_application=e,this.graphics=t,this.is_running=!1,this.frames_passed=0,this.time_accumulator=0}update(){if(this.is_running){for(Ne.__update(),1===this.frames_passed&&this.target_application.on_post_start(),this.time_accumulator+=Ne.delta_time,this.target_application.before_update(),Ve.before_update();this.time_accumulator>Ne.fixed_delta_time;)this.target_application.fixed_update(),Ve.fixed_update(),this.time_accumulator-=Ne.fixed_delta_time;Ne.__set_frame_interpolation(this.time_accumulator/Ne.fixed_delta_time),this.target_application.update(),Ve.update(),qe.update(),Bt.update(),this.target_application.on_pre_render(),this.graphics.update(),vt.update(),vt.render(this.graphics),this.target_application.on_post_render(),rt.render(this.graphics),this.target_application.on_frame_end(),this.frames_passed++,vt.clear(),rt.clear()}}start(){this.is_running||(0===this.frames_passed&&this.target_application.on_enter(),this.is_running=!0,this.graphics._renderer.setAnimationLoop(this.update.bind(this)))}stop(){!1!==this.is_running&&(this.is_running=!1,this.target_application.on_exit(),this.graphics._renderer.setAnimationLoop(null))}set_state(e){this.target_application.on_exit(this),this.target_application=e,this.target_application.on_enter(this)}dispose(){this.stop(),this.frames_passed=0}}const Yt=new class{constructor(){this.components=[],this.enabled_components=new Set}update(){this.__set_components_opacities();for(const e of this.enabled_components)e.update(Ve.current_state_data)}register_component(e){this.components.push(e)}enable_component(e){this.enabled_components.add(e)}disable_component(e){this.enabled_components.delete(e)}get(e){for(let t=0;t<this.components.length;t++)if(this.components[t].name===e)return this.components[t];console.error("[ViewComponentManager.get] no component found for: ",e)}__set_components_opacities(){for(let e=0;e<this.components.length;e++)this.components[e].set_opacity(Ve.current_state_data)}};class qt{constructor({name:e,container:t}){this.name=e,this.container=t,Yt.register_component(this)}start(){}on_enter(){this.container.classList.remove("hidden"),Yt.enable_component(this)}update(){}on_exit(){this.container.classList.add("hidden"),Yt.disable_component(this)}set_opacity(e){this.container.style.opacity=e}}class Gt{constructor({name:e}){this.name=e,this.current_opacity=0,this.hidden=!0,Bt.register_component_controller(this)}start(){}on_enter(){Bt.enable_component_controller(this),Ge.push(`${this.name}_component.on_enter`),this.hidden=!1}update(){Ge.push(`${this.name}_component.update`)}on_exit(){Bt.disable_component_controller(this),Ge.push(`${this.name}_component.on_exit`),this.hidden=!0}set_opacity(e){const t=e[`${this.name}_opacity`];(this.current_opacity>t||this.current_opacity<t)&&(this.current_opacity=t,Ge.push(`${this.name}_component.set_opacity`,[t]),this.toggle_hidden())}toggle_hidden(){this.current_opacity>1e-4?this.hidden&&this.on_enter():this.hidden||this.on_exit()}}class Wt extends g{constructor(e,t,s,i){e=e||1,t=t||1,s=s||"#FF0000",i=i||new v({color:s});const r=new T(e,t);r.rotateX(-1.57),super(r,i)}}class Et extends g{constructor(e,t,s,i){e=e||1,t=t||1,s=s||"#FF0000",i=i||new v({color:s});super(new T(e,t),i)}}class Xt{constructor(){}static merge_from_to(e,t){t.push.apply(t,e)}static expand_vec3_array(e,t){const s=t-e.length;for(let t=0;t<s;t++)e.push(e[t].clone())}static remove_elem(e,t){const s=e.indexOf(t);s>-1&&e.splice(s,1)}static get_closest_point(e,t){let s=e[0],i=s.distanceTo(t);for(let r=1;r<e.length;r++)e[r].distanceTo(t)<i&&(s=e[r],i=e[r].distanceTo(t));return s}static object_values_to_array(e){const t=Object.keys(e),s=[];for(let i=0;i<t.length;i++)s.push(e[t[i]]);return s}}class Qt{constructor(){this.sphere=new j}fit_points(e,t,s,i){this.sphere.setFromPoints(e);const r=Math.degToRad(s/2),n=2*Math.atan(Math.tan(r)*i)/2,o=this.get_up_plane_normal(t,r),a=this.get_down_plane_normal(t,r),_=this.get_left_plane_normal(t,n),l=this.get_right_plane_normal(t,n),h=new c(0,0,-1).applyQuaternion(t),u=this.sphere.center.clone(),d=this.get_distance_to_fit_rect(2*this.sphere.radius,2*this.sphere.radius,s,i),p=u.clone().add(h.clone().multiplyScalar(-1*d)),m=(new O).setFromNormalAndCoplanarPoint(o,p),g=(new O).setFromNormalAndCoplanarPoint(a,p),f=(new O).setFromNormalAndCoplanarPoint(_,p),v=(new O).setFromNormalAndCoplanarPoint(l,p);this.apply_center_correction_to_pos(p,e,t,m,g,f,v),m.setFromNormalAndCoplanarPoint(o,p),g.setFromNormalAndCoplanarPoint(a,p),f.setFromNormalAndCoplanarPoint(_,p),v.setFromNormalAndCoplanarPoint(l,p);let x=1/0;const w=h.clone().multiplyScalar(-2*d);for(let t=0;t<e.length;t++){const s=new I(e[t].clone(),e[t].clone().add(w)),i=new c,r=new c,n=new c,o=new c;m.intersectLine(s,i),g.intersectLine(s,r),f.intersectLine(s,n),v.intersectLine(s,o),i.length()<1e-4&&console.log("up intersection not found",t),r.length()<1e-4&&console.log("down intersection not found",t),n.length()<1e-4&&console.log("left intersection not found",t),o.length()<1e-4&&console.log("right intersection not found",t);const a=e[t].clone().sub(i).length(),_=e[t].clone().sub(r).length(),l=e[t].clone().sub(n).length(),h=e[t].clone().sub(o).length(),u=Math.min(a,_),d=Math.min(l,h),p=Math.min(u,d);p<x&&(x=p)}const b=h.clone().multiplyScalar(x);return p.clone().add(b)}apply_center_correction_to_pos(e,t,s,i,r,n,o){const a=this.get_vertical_correction(t,r,i,s),_=this.get_hozirontal_correction(t,n,o,s);e.add(a),e.add(_)}get_vertical_correction(e,t,s,i){let r,n,o=1/0,a=1/0;const _=new c(0,1,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const l=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(-5e6))),h=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(5e6))),u=new c,d=new c;t.intersectLine(l,u),s.intersectLine(h,d);const p=u.distanceTo(e[i]),m=d.distanceTo(e[i]);d.length()<1e-4&&console.log("vertical up intersection not found",i),u.length()<1e-4&&console.log("vertical down intersection not found",i),p<a&&(a=p,n=e[i]),m<o&&(o=m,r=e[i])}console.log(r,n);const l=(o-a)/2;return _.clone().multiplyScalar(-l)}get_hozirontal_correction(e,t,s,i){let r,n,o=1/0,a=1/0;const _=new c(1,0,0).applyQuaternion(i);for(let i=0;i<e.length;i++){const l=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(-5e6))),h=new I(e[i].clone(),e[i].clone().add(_.clone().multiplyScalar(5e6))),u=new c,d=new c;t.intersectLine(l,u),s.intersectLine(h,d);const p=u.distanceTo(e[i]),m=d.distanceTo(e[i]);u.length()<1e-4&&console.log("left intersection not found",i),d.length()<1e-4&&console.log("right intersection not found",i),p<a&&(a=p,n=e[i]),m<o&&(o=m,r=e[i])}const l=(o-a)/2;return console.log(r,n),_.clone().multiplyScalar(-l)}get_up_plane_normal(e,t){const s=new c(0,-1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),t)),s.applyQuaternion(e),s}get_down_plane_normal(e,t){const s=new c(0,1,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(1,0,0),-t)),s.applyQuaternion(e),s}get_left_plane_normal(e,t){const s=new c(1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),t)),s.applyQuaternion(e),s}get_right_plane_normal(e,t){const s=new c(-1,0,0);return s.applyQuaternion((new N).setFromAxisAngle(new c(0,1,0),-t)),s.applyQuaternion(e),s}get_distance_to_fit_rect(e,t,s,i){const r=s/2*Math.PI/180,n=2*Math.atan(Math.tan(r)*i)/2,o=t/Math.tan(r),a=e/Math.tan(n);return Math.max(Math.abs(a),Math.abs(o))}}class $t{static convert_to_non_indexed_geometry(e){const t=e.index,s=e.getAttribute("position"),i=[];for(let e=0;e<t.count;e+=3)i.push(s.getX(t.array[e+0])),i.push(s.getY(t.array[e+0])),i.push(s.getZ(t.array[e+0])),i.push(s.getX(t.array[e+1])),i.push(s.getY(t.array[e+1])),i.push(s.getZ(t.array[e+1])),i.push(s.getX(t.array[e+2])),i.push(s.getY(t.array[e+2])),i.push(s.getZ(t.array[e+2]));const r=new d;return r.setAttribute("position",new U(new Float32Array(i),3)),$t.add_barycentric_attribute(r),r}static add_barycentric_attribute(e){const t=[],s=e.getAttribute("position");for(let e=0;e<s.count;e+=3)t.push(1),t.push(0),t.push(0),t.push(0),t.push(1),t.push(0),t.push(0),t.push(0),t.push(1);e.setAttribute("barycentric",new U(new Float32Array(t),3))}}class Ht{static load_images(e){const t=e.querySelectorAll("img");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}const s=e.querySelectorAll("object");for(let e=0;e<s.length;e++){const t=s[e];t.dataset.src&&(t.data=t.dataset.src)}}static load_videos(e){const t=e.querySelectorAll("video");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}}static load_iframes(e){const t=e.querySelectorAll("iframe");for(let e=0;e<t.length;e++){const s=t[e];s.dataset.src&&(s.src=s.dataset.src)}}static load_elements(e,t){const s=e.querySelectorAll(t);for(let e=0;e<s.length;e++){const t=s[e];t.dataset.src&&(t.src=t.dataset.src)}}}class Zt{constructor(){}static get_image_data(e){const t=document.createElement("canvas");t.width=e.width,t.height=e.height;const s=t.getContext("2d");return s.drawImage(e,0,0),s.getImageData(0,0,e.width,e.height)}static get_pixel(e,t,s){const i=4*(t+e.width*s),r=e.data;return new M(r[i+0],r[i+1],r[i+2],r[i+3])}}const Jt=new class{constructor(){}sample(e,s){const i=[];let r=99999999;const n=e.getAttribute("position"),o=e.getAttribute("normal"),a=e.getAttribute("tangent"),_=e.getAttribute("uv"),l=e.index,h=[];for(let e=0;e<l.count;e+=3){const s=l.array[e+0],u=l.array[e+1],d=l.array[e+2],p=new c;p.x=n.getX(s),p.y=n.getY(s),p.z=n.getZ(s);const m=new c;m.x=n.getX(u),m.y=n.getY(u),m.z=n.getZ(u);const g=new c;g.x=n.getX(d),g.y=n.getY(d),g.z=n.getZ(d);const f={a:p,b:m,c:g};if(o){const e=new c;e.x=o.getX(s),e.y=o.getY(s),e.z=o.getZ(s);const t=new c;t.x=o.getX(u),t.y=o.getY(u),t.z=o.getZ(u);const i=new c;i.x=o.getX(d),i.y=o.getY(d),i.z=o.getZ(d);const r=e.clone().add(t).add(i).normalize();f.normal=r}if(a){const e=new c;e.x=a.getX(s),e.y=a.getY(s),e.z=a.getZ(s);const t=new c;t.x=a.getX(u),t.y=a.getY(u),t.z=a.getZ(u);const i=new c;i.x=a.getX(d),i.y=a.getY(d),i.z=a.getZ(d);const r=e.clone().add(t).add(i).normalize();f.tangent=r}if(_){const e=new t;e.x=_.getX(s),e.y=_.getY(s);const i=new t;i.x=_.getX(u),i.y=_.getY(u);const r=new t;r.x=_.getX(d),r.y=_.getY(d),f.uv_a=e,f.uv_b=i,f.uv_c=r}h.push(f);const v=this.get_face_area(f);r=Math.min(v,r),i.push(v)}const u=this.get_uniform_face_distribution(i,r,h),d=this.select_random_faces(u,s);return this.sample_data_from_faces(d)}sample_data_from_faces(e){const t=[],s=[],i=[],r=[];for(let n=0;n<e.length;n++){const o=e[n],a=Math.random(),_=Math.random();t.push(this.sample_point_in_face(a,_,o.a,o.b,o.c).clone()),o.normal&&s.push(o.normal.clone()),o.tangent&&i.push(o.tangent.clone()),o.uv_a&&r.push(this.sample_point_in_face(a,_,o.uv_a,o.uv_b,o.uv_c).clone())}return{points:t,normals:s,tangents:i,uvs:r}}select_random_faces(e,t){const s=[];for(let i=0;i<t;i++){const t=e[Math.floor(Math.random()*e.length)];s.push(t)}return s}get_uniform_face_distribution(e,t,s){const i=[];for(let r=0;r<e.length;r++){e[r]/=t;const n=Math.floor(Math.round(e[r]));for(let e=0;e<n;e++)i.push(s[r])}return i}get_face_area(e){const t=e.b.clone().sub(e.a),s=e.c.clone().sub(e.a);return t.cross(s).length()/2}sample_point_in_face(e,t,s,i,r){e+t>1&&(e=1-e,t=1-t);const n=1-(e+t);return s.clone().multiplyScalar(e).add(i.clone().multiplyScalar(t)).add(r.clone().multiplyScalar(n))}};const Kt=new class{get_mesh(e,t){e.traverse((e=>{e instanceof g&&(e.geometry&&(e.geometry=(new d).fromGeometry(e.geometry)),t(e))}))}get_geometries(e){const t=[];return this.get_mesh(e,(e=>{t.push(e.geometry)})),t}assign_material(e,t,s){e.traverse((e=>{e instanceof g&&(void 0===s||e.name===s)&&(e.material=t)}))}clone_animated_gltf(e){const t={animations:e.animations,scene:e.scene.clone(!0)},s={};e.scene.traverse((e=>{e.isSkinnedMesh&&(s[e.name]=e)}));const i={},r={};t.scene.traverse((e=>{e.isBone&&(i[e.name]=e),e.isSkinnedMesh&&(r[e.name]=e)}));for(const e in s){const t=s[e].skeleton,n=r[e],o=[];for(let e=0;e<t.bones.length;++e){const s=i[t.bones[e].name];o.push(s)}n.bind(new G(o,t.boneInverses),n.matrixWorld)}return t}set_shadow_config(e,t,s){e.traverse((e=>{e instanceof g&&(e.castShadow=t,e.receiveShadow=s)}))}__find_object(e,t,s){e.traverse((e=>{e.name===t&&s(e)}))}get_object(e,t){let s;return e.traverse((e=>{e.name===t&&(s=e)})),s}get_object_by_type(e,t){let s;return e.traverse((e=>{e.constructor.name===t&&(s=e)})),s}};class es{static is_object(e){return e&&"object"==typeof e&&!Array.isArray(e)}static merge_deep(e,...t){if(!t.length)return e;const s=t.shift();if(es.is_object(e)&&es.is_object(s))for(const t in s)es.is_object(s[t])?(e[t]||Object.assign(e,{[t]:{}}),es.merge_deep(e[t],s[t])):Object.assign(e,{[t]:s[t]});return es.merge_deep(e,...t)}static xml_to_json(e){let t={};if(1===e.nodeType){if(e.attributes.length>0){t["@attributes"]={};for(let s=0;s<e.attributes.length;s++){const i=e.attributes.item(s);t["@attributes"][i.nodeName]=i.nodeValue}}}else 3===e.nodeType&&(t=e.nodeValue);if(e.hasChildNodes())for(let s=0;s<e.childNodes.length;s++){const i=e.childNodes.item(s),r=i.nodeName;if(void 0===t[r])t[r]=this.xml_to_json(i);else{if(void 0===t[r].push){const e=t[r];t[r]=[],t[r].push(e)}t[r].push(this.xml_to_json(i))}}return t}}class ts{constructor(){}static get_random_color(){const e=[0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"];let t="#";for(let s=0;s<6;s++){t+=e[Math.floor(Math.random()*e.length)]}return t}static capitalize(e){const t=e.split(" ");for(let e=0;e<t.length;e++)t[e]=t[e][0].toUpperCase()+t[e].substr(1);return t.join(" ")}static capitalize_first_letter(e){return e.charAt(0).toUpperCase()+e.slice(1)}static snake_to_camelcase(e){return e.toLowerCase().replace(/[-_][a-z0-9]/g,(e=>e.slice(-1).toUpperCase()))}}class ss{constructor(){}time_str_to_ms(e){e=e.split(":");let t=Number(e[0]);t=60*t*60*1e3;let s=Number(e[1]);s=60*s*1e3;let i=Number(e[2]);return i*=1e3,t+s+i}}class is extends g{constructor(){const t=new e({uniforms:{_Color:{value:new r("#919191")}},vertexShader:"#define GLSLIFY 1\nattribute vec3 barycentric;varying vec3 vBarycentric;void main(){mat4 VP=projectionMatrix*viewMatrix;vec3 pos=(modelMatrix*vec4(position,1.0)).xyz;gl_Position=VP*vec4(pos,1.0);vBarycentric=barycentric;}",fragmentShader:"#define GLSLIFY 1\nuniform vec3 _Color;varying vec3 vBarycentric;float edgeFactor(vec3 baryc){vec3 d=fwidth(baryc);vec3 a3=smoothstep(vec3(0.0),d*1.5,baryc);return min(min(a3.x,a3.y),a3.z);}void main(){float alpha=edgeFactor(vBarycentric+vec3(1.,1.,0.));gl_FragColor.rgb=mix(_Color,vec3(0.),alpha);gl_FragColor.a=1.0-alpha;gl_FragColor.a*=0.2;}",extensions:{derivatives:!0},transparent:!0,depthWrite:!1}),s=new T(100,100,100,100);super($t.convert_to_non_indexed_geometry(s),t),this.rotation.x=-1.57}}class rs extends g{constructor(t){const s=new d;s.setAttribute("position",new U(new Float32Array([]),3)),s.setAttribute("next_position",new U(new Float32Array([]),3)),s.setAttribute("previous_position",new U(new Float32Array([]),3)),s.setAttribute("orientation",new U(new Float32Array([]),1)),s.setAttribute("coverage",new U(new Float32Array([]),1));super(s,new e({uniforms:{_Thickness:{value:.2},_Length:{value:0},_ElapsedTime:{value:0},_Color:{value:new r("#FF0000")}},vertexShader:"#define GLSLIFY 1\nuniform float _Thickness;attribute vec3 next_position;attribute vec3 previous_position;attribute float orientation;attribute float coverage;varying float line_coverage;varying float uv_u;vec3 w_space_normal(vec3 from,vec3 to){vec3 w_from=(modelMatrix*vec4(from,1.0)).xyz;vec3 w_to=(modelMatrix*vec4(to,1.0)).xyz;vec3 z=normalize(w_to-w_from);return normalize(cross(z,normalize(cameraPosition-w_from)));}void main(){mat4 VP=projectionMatrix*viewMatrix;vec3 pos=position;vec3 normal=w_space_normal(next_position,previous_position);pos=(modelMatrix*vec4(pos,1.0)).xyz;pos+=normal*(_Thickness*0.5)*orientation;gl_Position=VP*vec4(pos,1.0);line_coverage=coverage;uv_u=orientation*0.5+0.5;}",fragmentShader:"#define GLSLIFY 1\nuniform float _Length;uniform float _ElapsedTime;uniform float _Thickness;uniform vec3 _Color;varying float line_coverage;varying float uv_u;float aastep(float threshold,float value){\n#ifdef GL_OES_standard_derivatives\nfloat afwidth=length(vec2(dFdx(value),dFdy(value)))*0.70710678118654757;return smoothstep(threshold-afwidth,threshold+afwidth,value);\n#else\nreturn step(threshold,value);\n#endif\n}void main(){float u=(1.0-abs(uv_u*2.0-1.0));float diffuse=dot(vec2(u,u),vec2(0.0,1.0))*0.5+0.5;gl_FragColor=vec4(_Color*diffuse,1.0);}",transparent:!0,depthWrite:!1,extensions:{derivatives:!0}})),t&&this.setup(t)}setup(e){const t=[],s=[],i=[],r=[],n=[];let o=0;for(let a=0;a<e.length;a++){t.push(e[a].x),t.push(e[a].y),t.push(e[a].z),r.push(1),t.push(e[a].x),t.push(e[a].y),t.push(e[a].z),r.push(-1);const _=this.__get_next_position(e,a);s.push(_.x),s.push(_.y),s.push(_.z),s.push(_.x),s.push(_.y),s.push(_.z);const l=this.__get_previous_position(e,a);i.push(l.x),i.push(l.y),i.push(l.z),i.push(l.x),i.push(l.y),i.push(l.z),n.push(o),n.push(o),a<e.length-1&&(o+=e[a].distanceTo(_))}const a=new Float32Array(t),_=new Float32Array(s),l=new Float32Array(i),h=new Float32Array(r),c=new Float32Array(n),u=[];for(let e=0;e<(a.length/3-2)/2;e++){const t=2*e+1;u.push(t),u.push(t+1),u.push(t-1),u.push(t),u.push(t+2),u.push(t+1)}this.geometry.setIndex(u),this.geometry.getAttribute("position").copy(new U(a,3)),this.geometry.getAttribute("next_position").copy(new U(_,3)),this.geometry.getAttribute("previous_position").copy(new U(l,3)),this.geometry.getAttribute("orientation").copy(new U(h,1)),this.geometry.getAttribute("coverage").copy(new U(c,1)),this.geometry.getAttribute("position").needsUpdate=!0,this.geometry.getAttribute("next_position").needsUpdate=!0,this.geometry.getAttribute("previous_position").needsUpdate=!0,this.geometry.getAttribute("orientation").needsUpdate=!0,this.geometry.getAttribute("coverage").needsUpdate=!0,this.material.uniforms._Length.value=o,this._length=o}set thickness(e){this.material.uniforms._Thickness.value=e}get thickness(){return this.material.uniforms._Thickness.value}__get_previous_position(e,t){return 0===t?e[1].clone().sub(e[0]).multiplyScalar(-1).add(e[0]):e[t-1]}__get_next_position(e,t){return t===e.length-1?e[e.length-2].clone().sub(e[e.length-1]).multiplyScalar(-1).add(e[e.length-1]):e[t+1]}update(){}distance(){return this.accumulated_length}total_length(){return this.accumulated_length}dispose(){this.geometry.dispose(),this.material.dispose(),this.parent&&this.parent.remove(this)}set color(e){this.material.uniforms._Color.value.set(e)}get color(){return this.material.uniforms._Color.value}copy_color(e){this.material.uniforms._Color.value.copy(e)}}class ns extends g{constructor(s,i){i=i||new t(0,0);const r=new e({uniforms:{_MainTex:{value:s},_ScreenAligned:{value:0},_Scale:{value:1},_Opacity:{value:1}},vertexShader:"#define GLSLIFY 1\nvarying vec2 vUv;uniform float _ScreenAligned;uniform float _Scale;void main(){vec3 pos=position;mat4 local_to_camera=modelViewMatrix;float scale=_Scale;local_to_camera[0]=mix(modelViewMatrix[0],vec4(1.0*scale,0.0,0.0,0.0),_ScreenAligned);local_to_camera[1]=mix(modelViewMatrix[1],vec4(0.0,1.0*scale,0.0,0.0),_ScreenAligned);local_to_camera[2]=mix(modelViewMatrix[2],vec4(0.0,0.0,1.0*scale,0.0),_ScreenAligned);gl_Position=projectionMatrix*local_to_camera*vec4(pos,1.0);vUv=uv;}",fragmentShader:"#define GLSLIFY 1\nuniform sampler2D _MainTex;varying vec2 vUv;uniform float _Opacity;void main(){gl_FragColor=texture2D(_MainTex,vUv);gl_FragColor.a*=_Opacity;}",transparent:!0,depthWrite:!1,side:W}),n=new T(1,1,1);n.translate(-i.x/2,-i.y/2,0);const o=s.image.width/s.image.height;n.scale(o,1,1),super(n,r),this.current_scale=o,this.geometry.computeBoundingBox(),this.tmp_bb_size=new c,this.geometry.boundingBox.getSize(this.tmp_bb_size)}update_texture(){this.material.uniforms._MainTex.value.needsUpdate=!0;const e=this.material.uniforms._MainTex.value.image;this.geometry.scale(1/this.current_scale,1,1),this.current_scale=e.width/e.height,this.geometry.scale(this.current_scale,1,1),this.geometry.computeBoundingBox(),this.geometry.boundingBox.getSize(this.tmp_bb_size)}get size(){return this.tmp_bb_size.clone().multiplyScalar(this.scale.x)}set size(e){this.scale.set(e,e,e),this.material.uniforms._Scale.value=e}set screen_aligned(e){this.material.uniforms._ScreenAligned.value=!0===e?1:0}get screen_aligned(){return 1===this.material.uniforms._ScreenAligned.value}set opacity(e){this.material.uniforms._Opacity.value=e}get opacity(){return this.material.uniforms._Opacity.value}dispose(){this.geometry.dispose(),this.parent.remove(this),this.material.uniforms._MainTex.value.dispose(),this.material.dispose()}}class os extends ns{constructor(e,t,s,i,r){const n=new Qe(r),o={font:t,font_color:s||"#000000"},a=n.draw_on_texture(e,o);a.minFilter=E,a.minFilter=q,a.needsUpdate=!0,super(a,i),this.simple_text_drawer=n,this.canvas_texture=a,this.draw_settings=o}set text(e){this.simple_text_drawer.draw_canvas(e,this.draw_settings),this.update_texture()}get text(){return"not implemented"}}class as extends be{constructor(e=1){super("#define GLSLIFY 1\nuniform vec2 _ScreenSize;uniform vec2 _TextureSize;uniform vec2 _PixelOffset;uniform vec3 _NDC;uniform vec2 _PivotPoint;uniform float _DepthOffset;varying vec2 vUv;vec2 add_pixel_offset(vec2 pos){pos=pos*0.5+0.5;pos*=_ScreenSize;pos=ceil(pos+_PixelOffset)+0.5;pos/=_ScreenSize;return pos*2.0-1.0;}void main(){vec4 projected_pos=projectionMatrix*viewMatrix*vec4(_NDC,1.0);projected_pos.zw+=_DepthOffset;projected_pos.xyz/=projected_pos.w;vec2 normalized_size=_TextureSize/_ScreenSize;vec2 dir=uv*2.0-1.0;dir-=_PivotPoint;vec2 pos=projected_pos.xy+dir*normalized_size;gl_Position=vec4(add_pixel_offset(pos),projected_pos.z,1.0);vUv=uv;}","#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _ScreenSize;uniform vec2 _TextureSize;varying vec2 vUv;void main(){gl_FragColor=texture2D(_MainTex,vUv+vec2(0.5,0.5)/_TextureSize);}",{_MainTex:{value:void 0},_ScreenSize:{value:new t(tt.width,tt.height)},_TextureSize:{value:new t},_PixelOffset:{value:new t(0,0)},_NDC:{value:new c},_PivotPoint:{value:new t},_DepthOffset:{value:0}}),this.transparent=!0,this.depthWrite=!1,this.depthTest=!1}}class _s{constructor(){this.tmp_vec=new t}get_pos_NDC(e){return this.tmp_vec.set(e.x,e.y)}}class ls{constructor(){this.tmp_vec3=new c,this.tmp_vec2=new t}get_pos_NDC(e){return this.tmp_vec3.copy(e),this.tmp_vec3.project(Ee.current),this.tmp_vec2.set(this.tmp_vec3.x,this.tmp_vec3.y)}}class hs{constructor(){}update(e,t){}on_enter(e){}on_exit(e){}}class cs extends hs{constructor(){super()}update(e,t){e.is_mouse_over(t)&&e.set_state(e._on_enter_state)}}class us extends hs{constructor(){super()}on_enter(e){e.on_mouse_enter()}update(e,t){e.is_mouse_over(t)?e.set_state(e._on_hover_state):e.set_state(e._on_exit_state)}}class ds extends hs{constructor(){super()}on_enter(e){e.on_mouse_exit(),e.set_state(e._on_idle_state)}}class ps extends hs{constructor(){super()}on_enter(e){this.__trigger_on_hover(e)}update(e,t){e.is_mouse_over(t)?this.__trigger_on_hover(e):e.set_state(e._on_exit_state)}__trigger_on_hover(e){e.on_mouse_hover()}}class ms extends g{constructor(e,s){super(new T(1,1),new as),this.is_clickable=!1,this.position_strategy=new ls,this.current_state=new cs,this._position=new c,this._on_idle_state=new cs,this._on_enter_state=new us,this._on_exit_state=new ds,this._on_hover_state=new ps,this.on_enter=void 0,this.on_exit=void 0,this.on_hover=void 0,this.mouse_pos_tmp=new t,this.cached_NDC_position=new t,this.screen_pos_tmp=new t,this.texture_size=new t(1,1),this.frustumCulled=!1,this.matrixAutoUpdate=!1,this.renderOrder=0,this.size=1,this.pixel_offset=new t}set_render_order(e){this.renderOrder=e}get pivot_point(){return this.material.uniforms._PivotPoint.value}set_pixel_offset(e){this.pixel_offset.copy(e),this.material.uniforms._PixelOffset.value.copy(e)}set_state(e){this.current_state.on_exit(this),this.current_state=e,this.current_state.on_enter(this)}get position(){return this._position}set use_depth(e){this.material.depthTest=e}get use_depth(){return this.material.depthTest}set depth_offset(e){this.material.uniforms._DepthOffset.value=e}get depth_offset(){return this.material.uniforms._DepthOffset.value}clear_state(){this.visible=!1}set_world_space_coordinate_system(){this.position_strategy=new ls}set_screen_space_coordinate_system(){this.position_strategy=new _s}set_texture(e){e.minFilter=l,e.magFilter=l,e.needsUpdate=!0,this.texture_size.set(e.image.width,e.image.height),this.material.uniforms._MainTex.value=e,this.get_size(this.material.uniforms._TextureSize.value),this.visible=!0}update_state(e){this.material.uniforms._ScreenSize.value.set(tt.width,tt.height),this.get_size(this.material.uniforms._TextureSize.value),this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position)),this.material.uniforms._NDC.value.copy(this.position),this.current_state.update(this,e)}is_mouse_over(e){this.screen_pos_tmp.copy(this.cached_NDC_position),this.to_screen_position(this.screen_pos_tmp),this.screen_pos_tmp.x+=this.pixel_offset.x,this.screen_pos_tmp.y+=this.pixel_offset.y;const t=(new X).setFromCenterAndSize(this.screen_pos_tmp,this.get_size());return this.mouse_pos_tmp.copy(e),this.to_screen_position(this.mouse_pos_tmp),t.containsPoint(this.mouse_pos_tmp)}to_screen_position(e){e.x=(.5*e.x+.5)*tt.width+this.pixel_offset.x,e.y=(.5*e.y+.5)*tt.height+this.pixel_offset.y}get_screen_space_position(){const e=this.cached_NDC_position.clone();return this.to_screen_position(e),e}set_screen_space_position(e){this.position.x=e.x/tt.width*2-1,this.position.y=e.y/tt.height*2-1}dispose(){this.material.uniforms._MainTex.value&&this.material.uniforms._MainTex.value.dispose(),this.geometry.dispose(),this.material.dispose()}get_size(e){return e?e.copy(this.texture_size).multiplyScalar(this.size/tt.dpr):(new t).copy(this.texture_size).multiplyScalar(this.size/tt.dpr)}on_mouse_enter(){}on_mouse_exit(){}on_mouse_hover(){}}class gs extends g{constructor(e,t){super(e,t);const s=this;this.onBeforeRender=()=>{s.material.update()}}}class fs{constructor(e,s,i){const r=s.right-s.left,n=s.top-s.bottom;this.scale=new t(r,n),this.position=new t(e+s.left,s.bottom),this.atlas_bounds=new M(i.left,i.right,i.top,i.bottom)}}class vs{constructor(e,s=""){this.glyph_layout=e,this.glyphs=[],this.glyph_is_dirty=!0,this.matrix_is_dirty=!0,this.color_is_dirty=!0,this.position=new c,this.quaternion=new N,this.scale=new c(1,1,1),this.matrix=new B,this.color=new r("#FFFFFF"),this.pivot_point=new t,this.__opacity=1,this.__text=s,this.__generate_glyphs(s)}set text(e){this.__text=e,this.__generate_glyphs(e),this.matrix_is_dirty=!0}get text(){return this.__text}update_matrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrix_is_dirty=!1,this.glyph_is_dirty=!0}clear_glyph_dirty(){this.glyph_is_dirty=!1}clear_color_dirty(){this.color_is_dirty=!1}set_rotation(e=0,t=0){const s=(new N).setFromAxisAngle(new c(0,1,0),e/360*Math.PI*2),i=(new N).setFromAxisAngle(new c(1,0,0),-t/360*Math.PI*2);this.quaternion.copy(s.multiply(i)),this.matrix_is_dirty=!0}set_position(e){this.position.copy(e),this.matrix_is_dirty=!0}set_size(e){this.scale.set(e,e,e),this.matrix_is_dirty=!0}set_color(e){this.color.set(e),this.color_is_dirty=!0}set_pivot(e){this.pivot_point.copy(e),this.update_glyphs()}set opacity(e){this.__opacity=e,this.color_is_dirty=!0}get opacity(){return this.__opacity}update_glyphs(){this.__generate_glyphs(this.text)}__generate_glyphs(e){let s=0;this.glyphs.length=0;for(let t=0;t<e.length;t++){const i=e.charCodeAt(t),r=this.glyph_layout.find((e=>e.unicode===i));if(r){if(r.planeBounds){const e=new fs(s,r.planeBounds,r.atlasBounds);this.glyphs.push(e)}s+=r.advance}}const i=new X,r=this.glyphs[0];i.setFromCenterAndSize(r.position.clone().add(new t(r.scale.x/2,r.scale.y/2)),r.scale);for(let e=1;e<this.glyphs.length;e++){const s=this.glyphs[e],r=(new X).setFromCenterAndSize(s.position.clone().add(new t(s.scale.x/2,s.scale.y/2)),s.scale);i.union(r)}const n=new t;i.getSize(n);for(let e=0;e<this.glyphs.length;e++)this.glyphs[e].position.x-=n.x/2,this.glyphs[e].position.y-=n.y/2,this.glyphs[e].position.x+=n.x/2*this.pivot_point.x,this.glyphs[e].position.y+=n.y/2*this.pivot_point.y;this.glyph_is_dirty=!0}}class xs extends be{constructor(e){super("#define GLSLIFY 1\nattribute vec4 transformsCol0;attribute vec4 transformsCol1;attribute vec4 transformsCol2;attribute vec4 transformsCol3;attribute vec4 glyph_bounds;attribute vec4 plane_bounds;attribute vec4 color;varying vec2 vUv;varying vec4 v_glyph_bounds;varying vec4 v_color;void main(){vec4 pos=vec4(position,1.0);pos.x*=plane_bounds.z;pos.y*=plane_bounds.w;pos.x+=plane_bounds.x;pos.y+=plane_bounds.y;mat4 offset_matrix=mat4(transformsCol0,transformsCol1,transformsCol2,transformsCol3);gl_Position=projectionMatrix*viewMatrix*offset_matrix*pos;vUv=uv;v_glyph_bounds=glyph_bounds;v_color=color;}","#define GLSLIFY 1\nuniform sampler2D _Texture;uniform float _Boldness;varying vec2 vUv;uniform vec2 _AtlasSize;varying vec4 v_glyph_bounds;varying vec4 v_color;float median(float r,float g,float b){return max(min(r,g),min(max(r,g),b));}void main(){float left=v_glyph_bounds.x/_AtlasSize.x;float right=v_glyph_bounds.y/_AtlasSize.x;float top=v_glyph_bounds.z/_AtlasSize.y;float bottom=v_glyph_bounds.w/_AtlasSize.y;float width=abs(right-left);float height=abs(top-bottom);vec2 coord=vec2(vUv.x*width+left,vUv.y*height+top-height);vec4 col=texture2D(_Texture,coord);float sig_dist=median(col.r,col.g,col.b);float _Cutoff=_Boldness;float dist=(_Cutoff-sig_dist);vec2 ddist=vec2(dFdx(dist),dFdy(dist));float pixelDist=dist/length(ddist);float opacity=clamp(0.5-pixelDist,0.0,1.0);gl_FragColor=vec4(v_color.rgb,opacity*v_color.a);}",{_Texture:{value:e},_Boldness:{value:.5},_AtlasSize:{value:new t(1,1)}}),this.transparent=!0,this.extensions={derivatives:!0},this.depthWrite=!1,this.side=W,e.minFilter=q,e.magFilter=q,e.generateMipMaps=!1}set_atlas_size(e){this.uniforms._AtlasSize.value.copy(e)}set_boldness(e){this.uniforms._Boldness.value=ke.lerp(.5,.2,e)}}class ws extends g{constructor(e,s){const i=new Q;i.instanceCount=0;const r=new T(1,1);r.translate(.5,.5,0),i.setAttribute("position",new $(r.getAttribute("position").array,3)),i.setAttribute("uv",new $(r.getAttribute("uv").array,2)),i.index=r.index;const n=new H(new Float32Array(8e3),4,!1),o=new H(new Float32Array(8e3),4,!1),a=new H(new Float32Array(8e3),4,!1),_=new H(new Float32Array(8e3),4,!1),l=new H(new Float32Array(8e3),4,!1),h=new H(new Float32Array(8e3),4,!1),c=new H(new Float32Array(8e3),4,!1);n.usage=Z,o.usage=Z,a.usage=Z,_.usage=Z,l.usage=Z,h.usage=Z,c.usage=Z,i.setAttribute("transformsCol0",n),i.setAttribute("transformsCol1",o),i.setAttribute("transformsCol2",a),i.setAttribute("transformsCol3",_),i.setAttribute("glyph_bounds",l),i.setAttribute("plane_bounds",h),i.setAttribute("color",c),super(i,new xs(s)),this.text_elements=[],this.font_layout=e,this.material.set_atlas_size(new t(e.atlas.width,e.atlas.height)),this.frustumCulled=!1}set_boldness(e){this.material.set_boldness(e)}add_text(e){const t=new vs(this.font_layout.glyphs,e);return this.text_elements.push(t),t}remove_text(e){Xt.remove_elem(this.text_elements,e),this.update(!0)}update(e){const t=this.geometry.getAttribute("glyph_bounds"),s=this.geometry.getAttribute("plane_bounds"),i=this.geometry.getAttribute("transformsCol0"),r=this.geometry.getAttribute("transformsCol1"),n=this.geometry.getAttribute("transformsCol2"),o=this.geometry.getAttribute("transformsCol3"),a=this.geometry.getAttribute("color");let _=!0===e,l=!0===e,h=!0===e,c=0;for(let e=0;e<this.text_elements.length;e++){const u=this.text_elements[e];u.matrix_is_dirty&&(_=!0,u.update_matrix()),u.glyph_is_dirty&&(l=!0,u.clear_glyph_dirty()),u.color_is_dirty&&(h=!0,u.clear_color_dirty());const d=u.matrix,p=u.color,m=u.opacity;for(let e=0;e<u.glyphs.length;e++){const _=u.glyphs[e],l=c;t.setXYZW(l,_.atlas_bounds.x,_.atlas_bounds.y,_.atlas_bounds.z,_.atlas_bounds.w),s.setXYZW(l,_.position.x,_.position.y,_.scale.x,_.scale.y),i.setXYZW(l,d.elements[0],d.elements[1],d.elements[2],d.elements[3]),r.setXYZW(l,d.elements[4],d.elements[5],d.elements[6],d.elements[7]),n.setXYZW(l,d.elements[8],d.elements[9],d.elements[10],d.elements[11]),o.setXYZW(l,d.elements[12],d.elements[13],d.elements[14],d.elements[15]),a.setXYZW(l,p.r,p.g,p.b,m),c++}}this.geometry.instanceCount=c,c>this.max_allocations&&console.error("SDFTextBatch exceeded maximum glyph allocations(max/current): ",this.max_allocations,c,this),_&&(i.needsUpdate=!0,r.needsUpdate=!0,n.needsUpdate=!0,o.needsUpdate=!0),l&&(t.needsUpdate=!0,s.needsUpdate=!0),h&&(a.needsUpdate=!0)}dispose(){this.geometry.dispose(),this.material.dispose()}}class bs extends Le{constructor(e,t=0,s=1,i="linear"){super(i),this.attribute_name=e,this.from=t,this.to=s}update(e,t){const s=this.from.clone();s.lerp(this.to,this.easing_function(t)),e[this.attribute_name].copy(s)}}class ys extends fe{constructor(e){super(e?"#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;vec4 upsample(vec2 uv,vec2 halfpixel){vec4 sum=texture2D(_MainTex,uv+vec2(-halfpixel.x*2.0,0.0));sum+=texture2D(_MainTex,uv+vec2(-halfpixel.x,halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(0.0,halfpixel.y*2.0));sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(halfpixel.x*2.0,0.0));sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,-halfpixel.y))*2.0;sum+=texture2D(_MainTex,uv+vec2(0.0,-halfpixel.y*2.0));sum+=texture2D(_MainTex,uv+vec2(-halfpixel.x,-halfpixel.y))*2.0;return sum/12.0;}void main(){vec2 half_pixel;half_pixel.x=0.5/_Resolution.x;half_pixel.y=0.5/_Resolution.y;gl_FragColor=upsample(vUv,half_pixel);}":"#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;vec4 downsample(vec2 uv,vec2 halfpixel){vec4 sum=texture2D(_MainTex,uv)*4.0;sum+=texture2D(_MainTex,uv-halfpixel);sum+=texture2D(_MainTex,uv+halfpixel);sum+=texture2D(_MainTex,uv+vec2(halfpixel.x,-halfpixel.y));sum+=texture2D(_MainTex,uv-vec2(halfpixel.x,-halfpixel.y));return sum/8.0;}void main(){vec2 half_pixel=vec2(0.5/_Resolution.x,0.5/_Resolution.y);gl_FragColor=downsample(vUv,half_pixel);}")}}class Ts extends fe{constructor(e,t){super("#define GLSLIFY 1\nuniform sampler2D _MainTex;uniform vec2 _Resolution;varying vec2 vUv;void main(){vec4 col=texture2D(_MainTex,vUv);gl_FragColor=col;gl_FragColor.a=col.a;}")}set offset(e){this.uniforms._Offset.value=e}get offset(){return this.uniforms._Offset.value}}class Ms{constructor(e){this.current_width=1,this.current_height=1,this.RT0=new R(1,1),this.RT1=new R(1,1),this.RT2=new R(1,1),this.RT3=new R(1,1),this.RT4=new R(1,1),this.upscale_blur_mat=new ys(!0),this.downscale_blur_mat=new ys(!1),this.alpha_filter_mat=new Ts}blur(e){this.check_RT_resize(e.width,e.height),lt.blit(e,this.RT1,this.alpha_filter_mat),lt.blit(this.RT1,this.RT2,this.downscale_blur_mat),lt.blit(this.RT2,this.RT3,this.downscale_blur_mat),lt.blit(this.RT3,this.RT4,this.downscale_blur_mat),lt.blit(this.RT4,this.RT3,this.upscale_blur_mat),lt.blit(this.RT3,this.RT2,this.upscale_blur_mat),lt.blit(this.RT2,e,this.upscale_blur_mat)}check_RT_resize(e,t){this.current_width===e&&this.current_height===t||(this.current_width=e,this.current_height=t,this.RT0.setSize(this.current_width/2,this.current_height/2),this.RT1.setSize(this.current_width/2,this.current_height/2),this.RT2.setSize(this.current_width/4,this.current_height/4),this.RT3.setSize(this.current_width/8,this.current_height/8),this.RT4.setSize(this.current_width/16,this.current_height/16))}}class Ss extends fe{constructor(){super("#define GLSLIFY 1\nuniform sampler2D _SourceTex;uniform vec2 _SourceTexSize;varying vec2 vUv;\n#define vec vec4\n#define toVec(x) x.rgba\n#define s2(a, b) temp = a; a = min(a, b); b = max(temp, b);\n#define t2(a, b) s2(v[a], v[b]);\n#define t24(a, b, c, d, e, f, g, h) t2(a, b); t2(c, d); t2(e, f); t2(g, h);\n#define t25(a, b, c, d, e, f, g, h, i, j) t24(a, b, c, d, e, f, g, h); t2(i, j);\n#define s2(a, b) temp = a; a = min(a, b); b = max(temp, b);\n#define mn3(a, b, c) s2(a, b); s2(a, c);\n#define mx3(a, b, c) s2(b, c); s2(a, c);\n#define mnmx3(a, b, c) mx3(a, b, c); s2(a, b);\n#define mnmx4(a, b, c, d) s2(a, b); s2(c, d); s2(a, c); s2(b, d);\n#define mnmx5(a, b, c, d, e) s2(a, b); s2(c, d); mn3(a, c, e); mx3(b, d, e);\n#define mnmx6(a, b, c, d, e, f) s2(a, d); s2(b, e); s2(c, f); mn3(a, b, c); mx3(d, e, f);\nvoid main(){vec2 inv_size=vec2(1.0/_SourceTexSize.x,1.0/_SourceTexSize.y);\n#ifdef kernel5x5\nvec v[25];for(int dX=-2;dX<=2;++dX){for(int dY=-2;dY<=2;++dY){vec2 offset=vec2(float(dX),float(dY));v[(dX+2)*5+(dY+2)]=toVec(texture2D(_SourceTex,vUv+offset*inv_size));}}vec temp;t25(0,1,3,4,2,4,2,3,6,7);t25(5,7,5,6,9,7,1,7,1,4);t25(12,13,11,13,11,12,15,16,14,16);t25(14,15,18,19,17,19,17,18,21,22);t25(20,22,20,21,23,24,2,5,3,6);t25(0,6,0,3,4,7,1,7,1,4);t25(11,14,8,14,8,11,12,15,9,15);t25(9,12,13,16,10,16,10,13,20,23);t25(17,23,17,20,21,24,18,24,18,21);t25(19,22,8,17,9,18,0,18,0,9);t25(10,19,1,19,1,10,11,20,2,20);t25(2,11,12,21,3,21,3,12,13,22);t25(4,22,4,13,14,23,5,23,5,14);t25(15,24,6,24,6,15,7,16,7,19);t25(3,11,5,17,11,17,9,17,4,10);t25(6,12,7,14,4,6,4,7,12,14);t25(10,14,6,7,10,12,6,10,6,17);t25(12,17,7,17,7,10,12,18,7,12);t24(10,18,12,20,10,20,10,12);gl_FragColor=v[12];\n#endif\n#ifdef kernel3x3\nvec v[9];for(int dX=-1;dX<=1;++dX){for(int dY=-1;dY<=1;++dY){vec2 offset=vec2(float(dX),float(dY));v[(dX+1)*3+(dY+1)]=toVec(texture2D(_SourceTex,vUv+offset*inv_size));}}vec temp;mnmx6(v[0],v[1],v[2],v[3],v[4],v[5]);mnmx5(v[1],v[2],v[3],v[4],v[6]);mnmx4(v[2],v[3],v[4],v[7]);mnmx3(v[3],v[4],v[8]);toVec(gl_FragColor)=v[4];\n#endif\n}",void 0,{kernel3x3:!0}),this.uniforms._SourceTex={value:void 0},this.uniforms._SourceTexSize={value:new t(1,1)}}set_texture(e){this.uniforms._SourceTex.value=e;const t=this.get_size(e);this.uniforms._SourceTexSize.value.copy(t)}get_size(e){return e.isVideoTexture?new t(Math.max(1,e.image.videoWidth),Math.max(1,e.image.videoHeight)):e.isWebGLRenderTarget?new t(e.width,e.height):e.isTexture?new t(e.image.width,e.image.height):new t(1,1)}}class zs{constructor(e){this.RT=new R(1,1,{type:D,format:k,minFilter:l,magFilter:l}),this.RT1=new R(1,1,{type:D,format:k,minFilter:l,magFilter:l}),this.median_filter_mat=new Ss}filter(e){const t=this.get_size(e);t.x===this.RT.width&&t.y===this.RT.height||(this.RT.setSize(t.x,t.y),this.RT1.setSize(t.x,t.y)),this.median_filter_mat.set_texture(e),lt.material_pass(this.median_filter_mat,this.RT);for(let e=0;e<0;e++)this.median_filter_mat.set_texture(this.RT.texture),lt.material_pass(this.median_filter_mat,this.RT1),this.median_filter_mat.set_texture(this.RT1.texture),lt.material_pass(this.median_filter_mat,this.RT);return this.RT}get_size(e){return e.isVideoTexture?new t(Math.max(1,e.image.videoWidth),Math.max(1,e.image.videoHeight)):e.isWebGLRenderTarget?new t(e.width,e.height):e.isTexture?new t(e.image.width,e.image.height):new t(1,1)}}class Fs{constructor(e,t){this.read=void 0,this.write=void 0,this.name=e,this.update_material=t}init_from_geometry(e){}init_from_attribute(e){}build_RT(e){const t=Fs.calculate_resolution(e),s={minFilter:l,magFilter:l,format:k,colorSpace:P,type:$e.fp_textures_available?D:J,stencilBuffer:!1,depthBuffer:!1};return new R(t.width,t.height,s)}static calculate_resolution(e){const t=Math.min(e,512);return{width:t,height:Math.max(1,Math.ceil(e/t))}}swap_RT(){const e=this.read;this.read=this.write,this.write=e}update(e){this.update_material&&(this.update_material.update(),e.children[0].material=this.update_material,this.update_material.uniforms._MainTex.value=this.read.texture,lt.render(e,void 0,this.write),e.children[0].material=void 0,this.swap_RT())}store_geometry_attribute_in_RT(e,t,s,i){i.children[0].geometry.setAttribute("data",e),i.children[0].material=s,lt.render(i,void 0,t),i.children[0].geometry.deleteAttribute("data"),i.children[0].material=void 0}get_texture(){return this.read.texture}}class As extends h{constructor(e,t){super(),this.attributes=[],this.mesh=this.build_point_mesh(e,t),this.add(this.mesh),this.attribute_writter_mesh=this.build_attribute_writter_mesh(e),this.attribute_writter_scene=new m,this.attribute_writter_scene.add(this.attribute_writter_mesh)}add_texture_attribute(e){this.attributes.push(e)}add_update_attribute_array(e,t,s){this.attribute_writter_mesh.geometry.setAttribute(e,new U(t,s,!1))}add_attribute_array(e,t,s){this.mesh.geometry.setAttribute(e,new H(t,s,!1))}update(){this.mesh.material.update();for(let e=0;e<this.attributes.length;e++)this.attributes[e].update(this.attribute_writter_scene)}dispose(){this.mesh.geometry.dispose(),this.mesh.material.dispose()}build_point_mesh(e=1,t){const s=new T,i=new Q;i.setAttribute("position",s.getAttribute("position")),i.index=s.index,i.setAttribute("storage_uv",this.build_uv_storage_attribute(e)),i.instanceCount=e;const r=new g(i,t);return r.frustumCulled=!1,r}build_attribute_writter_mesh(e){const{width:t,height:s}=Fs.calculate_resolution(e),i=new Float32Array(3*e);for(let r=0;r<e;r++){const e=r%t,n=Math.floor(r/t);i[3*r+0]=(e+.5)/t,i[3*r+1]=(n+.5)/s,i[3*r+2]=r}const r=new d;r.setAttribute("position",new U(i,3,!1));const n=new K(r);return n.frustumCulled=!1,n}build_uv_storage_attribute(e){const{width:t,height:s}=Fs.calculate_resolution(e),i=new Float32Array(2*e);for(let r=0;r<e;r++){const e=r%t,n=Math.floor(r/t);i[2*r+0]=(e+.5)/t,i[2*r+1]=(n+.5)/s}return new H(i,2,!1)}}class Rs extends e{constructor(){super({uniforms:{},vertexShader:"\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 ",fragmentShader:"#define GLSLIFY 1\nvarying vec4 value;void main(){gl_FragColor=value;}",depthWrite:!1,blending:s,depthTest:!1,depthFunc:i})}}class Cs extends Fs{constructor(e){super("_Position",e)}store_geometry(e,t){const s=e.getAttribute("position");this.read=this.build_RT(s.count),this.write=this.build_RT(s.count);const i=new Rs;this.store_geometry_attribute_in_RT(e.getAttribute("position"),this.read,i,t)}store_positions(e,t){this.read=this.build_RT(e.length),this.write=this.build_RT(e.length);const s=new Float32Array(4*e.length);for(let t=0;t<e.length;t++)s[4*t+0]=e[t].x,s[4*t+1]=e[t].y,s[4*t+2]=e[t].z,s[4*t+3]=10*(2*Math.random()-1);const i=new Rs;this.store_geometry_attribute_in_RT(new U(s,4),this.read,i,t)}}class ks extends L{constructor(e,t,s,i,r){super(e,t,s,i,r),this.multiplier=1}set_rgba(e,t,s,i,r){this.data[3*e+0]=t*this.multiplier,this.data[3*e+1]=s*this.multiplier,this.data[3*e+2]=i*this.multiplier,this.data[3*e+3]=r*this.multiplier,this.needsUpdate=!0}set_rgb(e,t,s,i){this.data[3*e+0]=t*this.multiplier,this.data[3*e+1]=s*this.multiplier,this.data[3*e+2]=i*this.multiplier,this.needsUpdate=!0}set_r(e,t){this.data[3*e+0]=t*this.multiplier,this.needsUpdate=!0}set_g(e,t){this.data[3*e+1]=t*this.multiplier,this.needsUpdate=!0}set_b(e,t){this.data[3*e+2]=t*this.multiplier,this.needsUpdate=!0}set_a(e,t){this.data[3*e+2]=t*this.multiplier,this.needsUpdate=!0}}class Ps extends ks{constructor(e,t){super(new Uint8Array(e*t*3),e,t,k),this.multiplier=255}}class Ds extends ks{constructor(e,t){super(new Uint8Array(e*t*4),e,t,k),this.multiplier=255}}class Ls extends ks{constructor(e,t){super(new Float32Array(e*t*3),e,t,k,D)}}class Us extends ks{constructor(e,t){super(new Float32Array(e*t*4),e,t,k,D)}}class js extends g{constructor(e,t,s,i){super(t,s),this.id_table=e,this.batched_count=Object.keys(e).length,this.max_texture_width=i,this.batch_width=this.batched_count%i,this.batch_height=Math.ceil(this.batched_count/i)}attach_rgb_texture(e){this.material.uniforms[e].value=new Ps(this.batch_width,this.batch_height)}attach_rgba_texture(e){this.material.uniforms[e].value=new Ds(this.batch_width,this.batch_height)}attach_rgb_float_texture(e){this.material.uniforms[e].value=new Ls(this.batch_width,this.batch_height)}attach_rgba_float_texture(e){this.material.uniforms[e].value=new Us(this.batch_width,this.batch_height)}get_mesh_index(e){return this.id_table[e]}set_rgb_value(e,t,s,i,r){this.material.uniforms[e].set_rgb(this.get_mesh_index(t),s,i,r)}set_rgba_value(e,t,s,i,r,n){this.material.uniforms[e].set_rgba(this.get_mesh_index(t),s,i,r,n)}}class Os{batch(e,t){const s=[],i={},r=[];for(let t=0;t<e.length;t++){const n=e[t],o=n.geometry.getAttribute("position").count;for(let e=0;e<o;e++)r.push(t);s.push(n.geometry),void 0===i[n.name]?i[n.name]=t:console.error("Mesh name is duplicated when trying to merge meshes. Non-unique id error.",n.name,i)}const n=le.mergeBufferGeometries(s),o=new U(new Float32Array(r),1);return n.setAttribute("mesh_id",o),this.create_batched_mesh(i,n,t,2048)}create_batched_mesh(e,t,s,i){return new js(e,t,s,i)}}class Is extends ze{constructor(e,t,s,i=!0,r=!1,n=!0){super(e,t,s),this.original_url="",this.colorSpaceConversion=n,this.premultiplyAlpha=r,this.flipY=i}on_preloaded_finished(e){Me.is_safari?this.load_with_old_method(e):this.load_with_new_method(e)}load_with_old_method(e){if(void 0===e.resources_by_url[this.url]){const t=new ee,s=new Image;s.src=this.url,s.onload=()=>{t.image=s,t.flipY=this.flipY,t.premultiplyAlpha=this.premultiplyAlpha,t.colorSpace=this.colorSpaceConversion?te:se,t.needsUpdate=!0,e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()},s.onerror=()=>{console.error("The source image could not be decoded.",this.original_url)}}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}load_with_new_method(e){if(void 0===e.resources_by_url[this.url]){const t={credentials:"same-origin"};fetch(this.url,t).then((e=>e.blob())).then((e=>createImageBitmap(e,{colorSpaceConversion:this.colorSpaceConversion?"default":"none",imageOrientation:this.flipY?"flipY":"none",premultiplyAlpha:this.premultiplyAlpha?"premultiply":"none"}))).then((t=>{const s=new ee(t);s.flipY=this.flipY,s.premultiplyAlpha=this.premultiplyAlpha,s.colorSpace=this.colorSpaceConversion?te:se,s.needsUpdate=!0,e.set_resource(this.resource_id,this.url,s),this.__update_downloaded_bytes(1,1),this.__loading_ended()})).catch((e=>{console.error(e,this.original_url)}))}else e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended()}}class Ns{constructor(e,t=!0,s=1,i=!1){this.buffer=e,this.loop=t,this.volume=s,this.positional=i,this.audio=void 0}init(e){this.positional?this.audio=new ie(e):this.audio=new re(e),this.audio.setBuffer(this.buffer),this.audio.setLoop(this.loop),this.audio.gain.gain.value=0,this.audio.setVolume(this.loop?0:this.volume)}play(){this.audio.play()}pause(){this.audio.pause()}stop(){this.audio.stop()}get is_playing(){return this.audio.isPlaying}}class Bs extends ze{constructor(e,t,s=!0,i=0,r,n=!1){super(e,t,r),this.loop=s,this.volume=i,this.positional=n}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.instantiate_audio(e):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}instantiate_audio(e){const t=ne.getContext(),s=t.createBuffer(2,22050,44100);fetch(this.url).then((e=>e.blob())).then((i=>{i.arrayBuffer?i.arrayBuffer().then((s=>{t.decodeAudioData(s,(t=>{e.set_resource(this.resource_id,this.url,new Ns(t,this.loop,this.volume,this.positional)),this.__update_downloaded_bytes(1,1),this.__loading_ended()}))})):(e.set_resource(this.resource_id,this.url,new Ns(s,this.loop,this.volume,this.positional)),this.__update_downloaded_bytes(1,1),this.__loading_ended())}))}}class Vs extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=s}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Ys extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=new oe,this.loader.setPath(t+"/"),this.urls=[`px.${s}`,`nx.${s}`,`py.${s}`,`ny.${s}`,`pz.${s}`,`nz.${s}`]}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.urls,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error("Image could not be loaded. Maybe wrong name or path, I don't know¯\\_(ツ)_/¯",e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class qs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new he}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Gs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Ws extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ce}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Es extends ze{constructor(e,t,s,i){super(e,t,i),this.loader=new ue,this.loader.setDRACOLoader(s)}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Xs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ue}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Qs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new de,this.url_suffix=["/px.hdr","/nx.hdr","/py.hdr","/ny.hdr","/pz.hdr","/nz.hdr"]}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.setPath(this.url).setDataType(_e).load(this.url_suffix,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class $s extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.json().then((t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Hs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new pe}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Zs extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,this.parse_path(t)),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}parse_path(e){const t=e.split("\n");""===t[t.length-1]&&t.pop();const s=[];for(let e=0;e<t.length;e+=3){const i=parseFloat(t[e+0]),r=parseFloat(t[e+1]),n=parseFloat(t[e+2]);s.push(new c(i,r,n))}return s}}class Js extends ze{constructor(e,t,s){super(e,t,s),this.loader=new me}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e+"\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"),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class Ks extends ze{constructor(e,t,s){super(e,t,s),this.loader=new ae}on_preloaded_finished(e){void 0===e.resources_by_url[this.url]?this.loader.load(this.url,(t=>{e.set_resource(this.resource_id,this.url,t),this.__update_downloaded_bytes(1,1),this.__loading_ended()}),(e=>{}),(e=>{this.__set_error(e),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class ei extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.blob().then((t=>{const s=new ee,i=URL.createObjectURL(t),r=new Image;r.src=i,r.onload=()=>{s.image=r,s.needsUpdate=!0,e.set_resource(this.resource_id,this.url,s),this.__update_downloaded_bytes(1,1),this.__loading_ended()},r.onerror=()=>{console.error("Error loading texture. Maybe the resource is not an image?",this.url)}})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class ti extends ze{constructor(e,t,s){super(e,t,s)}on_preloaded_finished(e,t){void 0===e.resources_by_url[this.url]?t.blob().then((t=>{e.set_resource(this.resource_id,this.url,URL.createObjectURL(t)),this.__update_downloaded_bytes(1,1),this.__loading_ended()})):(e.set_resource(this.resource_id,this.url,e.resources_by_url[this.url]),this.__update_downloaded_bytes(1,1),this.__loading_ended())}}class si{constructor(e){this.resource_loaders=[],this.batch_name=e||"unnamed batch"}add_loader(e){this.resource_loaders.push(e)}load(e){for(let t=0;t<this.resource_loaders.length;t++)this.resource_loaders[t].load(e||mt)}get loading_finished(){let e=!0;for(let t=0;t<this.resource_loaders.length;t++)e=e&&this.resource_loaders[t].has_finished;return e}get has_errors(){let e=!1;for(let t=0;t<this.resource_loaders.length;t++)e=e||this.resource_loaders[t].has_error;return e}print_errors(){console.error("Batch <"+this.batch_name+"> could not load successfully");for(let e=0;e<this.resource_loaders.length;e++)this.resource_loaders[e].has_error&&this.resource_loaders[e].print_error()}get_progress(){return this.get_loaded_bytes()/this.get_total_bytes()}get_loaded_bytes(){let e=1;for(let t=0;t<this.resource_loaders.length;t++)e+=this.resource_loaders[t].loaded_bytes;return e}get_total_bytes(){let e=1;for(let t=0;t<this.resource_loaders.length;t++)e+=this.resource_loaders[t].total_bytes;return e}}export{ze as AbstractLoader,Ce as ActionEvent,Le as ActionInterpolator,Pe as ActionSequencer,Oe as ActionSequencerBuilder,ve as AddMaterial,Re as ApplicationView,We as ApplicationViewController,Xt as ArrayUtilities,et as Arrow,Is as AsyncTextureLoader,Bs as AudioLoader,ge as BaseApplication,Te as BaseRender,be as BaseShaderMaterial,Vs as BasisLoader,fe as BlitMaterial,Pt as Blurrer,Me as Browser,ut as CSSAnimator,Ee as CameraManager,bt as CameraUtilities,Xe as CanvasDrawer,$e as Capabilities,Je as Cube,Ys as CubemapLoader,qs as DAELoader,rt as Debug,zt as DebugNormalsRender,je as DrawIOAnimationSheet,ys as DualFilteringBlurMaterial,Ms as DualFilteringBlurrer,De as EasingFunctions,Gs as FileLoader,Ws as FontLoader,Qt as FrustumPointFitter,Es as GLTFDRACOLoader,Xs as GLTFLoader,As as GPUParticleSystem,Ot as GaussianBlurrer,$t as GeometryUtilities,lt as Graphics,is as Grid,Qs as HDRCubeTextureLoader,Ht as HTMLUtilities,Wt as HorizontalPlane,Zt as ImageUtilities,yt as Initializer,$s as JSONLoader,Tt as KeyboardInput,rs as Line,zs as MedianFilter,Os as MeshBatcher,Jt as MeshSampler,Kt as ModelUtilities,Dt as NormalAORender,Lt as NormalRender,Ue as NumberInterpolator,Hs as OBJLoader,ke as OMath,dt as OS,tt as OScreen,es as ObjectUtilities,Mt as OrthographicCamera,wt as OrthographicFrustumPointFitter,Fs as ParticleAttribute,Cs as ParticlePositionAttribute,it as PerspectiveCamera,xt as PerspectiveFrustumPointFitter,Zs as PointArrayLoader,Js as RGBETextureLoader,Vt as RenderLoop,si as ResourceBatch,mt as ResourceContainer,ws as SDFTextBatch,Ze as SceneManager,Qe as SimpleTextDrawer,Ke as Sphere,ts as StringUtilities,os as Text2D,Ks as TextLoader,ei as TextureLoader,Ne as Time,ss as TimeUtilities,Ve as TransitionManager,Ie as TransitionTable,vt as UI,ms as UIElement,ye as UnrealBloomComposeMaterial,It as UnrealBloomRender,gs as UpdatableMaterialMesh,qe as VCManager,Nt as VRRender,Se as Validation,bs as VectorInterpolator,Et as VerticalPlane,ti as VideoLoader,qt as ViewComponent,Gt as ViewComponentController,Bt as ViewComponentControllerManager,Yt as ViewComponentManager,Fe as ViewManager,Ge as WorkerToMain,ns as WorldImage};
|
|
2
2
|
//# sourceMappingURL=index.module.js.map
|