PageSourceSearch

https://www.varsitytutors.com/homepage2025v3/_next/static/chunks/4334.22ed93a5b1dc5b65.js

js varsitytutors.com collected 2026-10-01 10:15:02 UTC 69,573 bytes, 15 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4334],{34334:(t,e,i)=>{i.r(e);var s=i(2677);i(19052);var o=i(32781),n=i(28481),r=i(10541),a=i(12667);i(59041),i(10066),i(37989),i(94857),i(84049);var h=i(37721);i(33723);var l=i(38650),c=i(62071);i(3166);var d=i(71429),p=i(61172),m=i(89855);i(38328);var u=(t,e)=>{let i=e.x-t.x,s=e.y-t.y;return Math.sqrt(i*i+s*s)},y=t=>Math.PI/180*t,g=new Map,f=(t,e,i)=>{let s,o=e.split(/[ ,]+/g);for(let e=0;e<o.length;e+=1)s=o[e],t.addEventListener?t.addEventListener(s,i,!1):t.attachEvent&&t.attachEvent(s,i)},v=(t,e,i)=>{let s,o=e.split(/[ ,]+/g);for(let e=0;e<o.length;e+=1)s=o[e],t.removeEventListener?t.removeEventListener(s,i):t.detachEvent&&t.detachEvent(s,i)},b=t=>(t.preventDefault(),t.type.match(/^touch/)?t.changedTouches:t),x=()=>{if(!(typeof window>"u"))return{x:void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft,y:void 0!==window.pageYOffset?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop}},w=(t,e)=>{e.top||e.right||e.bottom||e.left?(t.style.top=e.top,t.style.right=e.right,t.style.bottom=e.bottom,t.style.left=e.left):(t.style.left=e.x+"px",t.style.top=e.y+"px")},P=(t,e,i)=>{let s=E(t);for(let t in s)if(Object.prototype.hasOwnProperty.call(s,t))if("string"==typeof e)s[t]=e+" "+i;else{let o="";for(let t=0,s=e.length;t<s;t+=1)o+=e[t]+" "+i+", ";s[t]=o.slice(0,-2)}return s},E=t=>{let e={};return e[t]="",["webkit","Moz","o"].forEach(function(i){e[i+t.charAt(0).toUpperCase()+t.slice(1)]=""}),e},M=(t,e)=>{for(let i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t},S=(t,e)=>{if(t.length)for(let i=0,s=t.length;i<s;i+=1)e(t[i]);else e(t)};"u">typeof window&&(T="ontouchstart"in window,A=!!window.PointerEvent,j=!!window.MSPointerEvent);var T,A,j,C,D={start:"mousedown",move:"mousemove",end:"mouseup"},O={};function F(){}function k(t,e){return this.identifier=e.identifier,this.position=e.position,this.frontPosition=e.frontPosition,this.collection=t,this.defaults={size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,mode:"dynamic",zone:document.body,lockX:!1,lockY:!1,shape:"circle"},this.config(e),"dynamic"===this.options.mode&&(this.options.restOpacity=0),this.id=k.id,k.id+=1,this.buildEl().stylize(),this.instance={el:this.ui.el,on:this.on.bind(this),off:this.off.bind(this),show:this.show.bind(this),hide:this.hide.bind(this),add:this.addToDom.bind(this),remove:this.removeFromDom.bind(this),destroy:this.destroy.bind(this),setPosition:this.setPosition.bind(this),resetDirection:this.resetDirection.bind(this),computeDirection:this.computeDirection.bind(this),trigger:this.trigger.bind(this),position:this.position,frontPosition:this.frontPosition,ui:this.ui,identifier:this.identifier,id:this.id,options:this.options},this.instance}function z(t,e){this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.pressureIntervals={},this.manager=t,this.id=z.id,z.id+=1,this.defaults={zone:document.body,multitouch:!1,maxNumberOfNipples:10,mode:"dynamic",position:{top:0,left:0},catchDistance:200,size:100,threshold:.1,color:"white",fadeTime:250,dataOnly:!1,restJoystick:!0,restOpacity:1,lockX:!1,lockY:!1,shape:"circle",dynamicPage:!1,follow:!1},this.config(e),("static"===this.options.mode||"semi"===this.options.mode)&&(this.options.multitouch=!1),this.options.multitouch||(this.options.maxNumberOfNipples=1);let i=getComputedStyle(this.options.zone.parentElement);return i&&"flex"===i.display&&(this.parentIsFlex=!0),this.updateBox(),this.prepareNipples(),this.bindings(),this.begin(),this.nipples}function R(t){var e=this;e.ids={},e.index=0,e.collections=[],e.scroll=x(),e._windowBound=!1,e.config(t),e.prepareCollections();var i=function(){var t;e.collections.forEach(function(i){i.forEach(function(i){t=i.el.getBoundingClientRect(),i.position={x:e.scroll.x+t.left,y:e.scroll.y+t.top}})})};return e._onResize=function(){g.has(i)&&clearTimeout(g.get(i)),g.set(i,setTimeout(function(){g.delete(i),i()},100))},e._onScroll=function(){e.scroll=x()},e.collections}A?C={start:"pointerdown",move:"pointermove",end:"pointerup, pointercancel"}:j?C={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:T?(C={start:"touchstart",move:"touchmove",end:"touchend, touchcancel"},O=D):C=D,F.prototype.on=function(t,e){var i,s=t.split(/[ ,]+/g);this._handlers_=this._handlers_||{};for(var o=0;o<s.length;o+=1)i=s[o],this._handlers_[i]=this._handlers_[i]||[],this._handlers_[i].push(e);return this},F.prototype.off=function(t,e){return this._handlers_=this._handlers_||{},void 0===t?this._handlers_={}:void 0===e?this._handlers_[t]=null:this._handlers_[t]&&this._handlers_[t].indexOf(e)>=0&&this._handlers_[t].splice(this._handlers_[t].indexOf(e),1),this},F.prototype.trigger=function(t,e){var i,s=this,o=t.split(/[ ,]+/g);s._handlers_=s._handlers_||{};for(var n=0;n<o.length;n+=1)i=o[n],s._handlers_[i]&&s._handlers_[i].length&&s._handlers_[i].forEac
1h(function(t){t.call(s,{type:i,target:s},e)})},F.prototype.config=function(t){this.options=this.defaults||{},t&&(this.options=((t,e)=>{let i={};for(let s in t)Object.prototype.hasOwnProperty.call(t,s)&&Object.prototype.hasOwnProperty.call(e,s)?i[s]=e[s]:Object.prototype.hasOwnProperty.call(t,s)&&(i[s]=t[s]);return i})(this.options,t))},F.prototype.bindEvt=function(t,e){var i=this;return i._domHandlers_=i._domHandlers_||{},i._domHandlers_[e]=function(){"function"==typeof i["on"+e]?i["on"+e].apply(i,arguments):console.warn('[WARNING] : Missing "on'+e+'" handler.')},f(t,C[e],i._domHandlers_[e]),O[e]&&f(t,O[e],i._domHandlers_[e]),i},F.prototype.unbindEvt=function(t,e){return this._domHandlers_=this._domHandlers_||{},v(t,C[e],this._domHandlers_[e]),O[e]&&v(t,O[e],this._domHandlers_[e]),delete this._domHandlers_[e],this},k.prototype=new F,k.constructor=k,k.id=0,k.prototype.buildEl=function(t){return this.ui={},this.options.dataOnly||(this.ui.el=document.createElement("div"),this.ui.back=document.createElement("div"),this.ui.front=document.createElement("div"),this.ui.el.className="nipple collection_"+this.collection.id,this.ui.back.className="back",this.ui.front.className="front",this.ui.el.setAttribute("id","nipple_"+this.collection.id+"_"+this.id),this.ui.el.appendChild(this.ui.back),this.ui.el.appendChild(this.ui.front)),this},k.prototype.stylize=function(){if(this.options.dataOnly)return this;var t=this.options.fadeTime+"ms",e=(()=>{let t=E("borderRadius");for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&(t[e]="50%");return t})(),i=P("transition","opacity",t),s={};return s.el={position:"absolute",opacity:this.options.restOpacity,display:"block",zIndex:999},s.back={position:"absolute",display:"block",width:this.options.size+"px",height:this.options.size+"px",marginLeft:-this.options.size/2+"px",marginTop:-this.options.size/2+"px",background:"rgba(255, 255, 255, .4)",border:"solid 2px rgba(0, 0, 0, .1)"},s.front={width:this.options.size/2+"px",height:this.options.size/2+"px",position:"absolute",display:"block",marginLeft:-this.options.size/4+"px",marginTop:-this.options.size/4+"px",background:"rgba(255, 255, 255, .8)",border:"solid 2px rgba(0, 0, 0, .1)"},M(s.el,i),"circle"===this.options.shape&&M(s.back,e),M(s.front,e),this.applyStyles(s),this},k.prototype.applyStyles=function(t){for(var e in this.ui)if(Object.prototype.hasOwnProperty.call(this.ui,e))for(var i in t[e])this.ui[e].style[i]=t[e][i];return this},k.prototype.addToDom=function(){return this.options.dataOnly||document.body.contains(this.ui.el)||this.options.zone.appendChild(this.ui.el),this},k.prototype.removeFromDom=function(){return this.options.dataOnly||!document.body.contains(this.ui.el)||this.options.zone.removeChild(this.ui.el),this},k.prototype.destroy=function(){clearTimeout(this.removeTimeout),clearTimeout(this.showTimeout),clearTimeout(this.restTimeout),this.trigger("destroyed",this.instance),this.removeFromDom(),this.off(),this.ui=null,this.instance=null,this.collection=null,this.options=null},k.prototype.show=function(t){var e=this;return e.options.dataOnly||(clearTimeout(e.removeTimeout),clearTimeout(e.showTimeout),clearTimeout(e.restTimeout),e.addToDom(),e.restCallback(),setTimeout(function(){e.ui.el.style.opacity=1},0),e.showTimeout=setTimeout(function(){e.trigger("shown",e.instance),"function"==typeof t&&t.call(this)},e.options.fadeTime)),e},k.prototype.hide=function(t){var e=this;if(e.options.dataOnly)return e;if(e.ui.el.style.opacity=e.options.restOpacity,clearTimeout(e.removeTimeout),clearTimeout(e.showTimeout),clearTimeout(e.restTimeout),e.removeTimeout=setTimeout(function(){var i="dynamic"===e.options.mode?"none":"block";e.ui.el.style.display=i,"function"==typeof t&&t.call(e),e.trigger("hidden",e.instance)},e.options.fadeTime),e.options.restJoystick){let i=e.options.restJoystick,s={};s.x=!0===i||!1!==i.x?0:e.instance.frontPosition.x,s.y=!0===i||!1!==i.y?0:e.instance.frontPosition.y,e.setPosition(t,s)}return e},k.prototype.setPosition=function(t,e){var i=this;i.frontPosition={x:e.x,y:e.y};var s=i.options.fadeTime+"ms",o={};o.front=P("transition",["top","left"],s);var n={front:{}};n.front={left:i.frontPosition.x+"px",top:i.frontPosition.y+"px"},i.applyStyles(o),i.applyStyles(n),i.restTimeout=setTimeout(function(){"function"==typeof t&&t.call(i),i.restCallback()},i.options.fadeTime)},k.prototype.restCallback=function(){var t={};t.front=P("transition","none",""),this.applyStyles(t),this.trigger("rested",this.instance)},k.prototype.resetDirection=function(){this.direction={x:!1,y:!1,angle:!1}},k.prototype.computeDirection=function(t){var e,i,s,o=t.angle.radian,n=Math.PI/4,r=Math.PI/2;if(o>n&&o<3*n&&!t.lockX?e="up":o>-n&&o<=n&&!t.lockY?e="left":o>-(3*n)&&o<=-n&&!t.lockX?e="down":t.lockY||(e="right"),t.lockY||(i=o>-r&&o<r?"left":"right"),t.lockX||(s=o>0?"up":"down"),t.force>this.options.threshold){var a,h={};for(a in this.direction)Object.prototype.hasOwnProperty.call(this.direction,a)&&(h[a]=this.direction[a]);var l={};for(a in this.direction={x:i,y:s,angle:e},t.direction=this.direction,h)h[a]===this.direction[a]&&(l[a]=!0);if(l.x&&l.y&&l.angle)return t;l.x&&l.y||this.trigger("plain",t),l.x||this.trigger("plain:"+i,t),l.y||this.trigger("plain:"+s,t),l.angle||this.trigger("dir dir:"+e,t)}else this.resetDirection();return t},z.prototype=new F,z.constructor=z,z.id=0,z.prototype.prepareNipples=function(){var t=this.nipples;t.on=this.on.bind(this),t.off=this.off.bind(this),t.options=this.options,t.destroy=this.destroy.bind(this),t.ids=this.ids,t.id=this.id,t.processOnMove=this.processOnMove.bind(this),t.processOnEnd=this.processOnEnd.bind(this),t.get=function(e){if(void 0===e)return t[0];for(var i=0,s=t.length;i<s;i+=1)if(t[i].identifier===e)return t[i];return!1}},z.prototype.bindings=function(){this.bindEvt(this.options.zone,"start"),this.options.zone.style.touchAction="none",this.options.zone.style.msTouchAction="none"},z.prototype.begin=function(){var t=this.options;if("static"===t.mode){var e=this.createNipple(t.position,this.manager.getIdentifier());e.add(),this.idles.push(e)}},z.prototype.createNipple=function(t,e){var i=this.manager.scroll,s={},o=this.options,n=this.parentIsFlex?i.x:i.x+this.box.left,r=this.parentIsFlex?i.y:i.y+this.box.top;if(t.x&&t.y)s={x:t.x-n,y:t.y-r};else if(t.top||t.right||t.bottom||t.left){var a=document.createElement("DIV");a.style.display="hidden",a.style.top=t.top,a.style.right=t.right,a.style.bottom=t.bottom,a.style.left=t.left,a.style.position="absolute",o.zone.appendChild(a);var h=a.getBoundingClientRect();o.zone.removeChild(a),s=t,t={x:h.left+i.x,y:h.top+i.y}}var l=new k(this,{color:o.color,size:o.size,threshold:o.threshold,fadeTime:o.fadeTime,dataOnly:o.dataOnly,restJoystick:o.restJoystick,restOpacity:o.restOpacity,mode:o.mode,identifier:e,position:t,zone:o.zone,frontPosition:{x:0,y:0},shape:o.shape});return o.dataOnly||(w(l.ui.el,s),w(l.ui.front,l.frontPosition)),this.nipples.push(l),this.trigger("added "+l.identifier+":added",l),this.manager.trigger("added "+l.identifier+":added",l),this.bindNipple(l),l},z.prototype.updateBox=function(){this.box=this.options.zone.getBoundingClientRect()},z.prototype.bindNipple=function(t){var e,i=this,s=function(t,s){e=t.type+" "+s.id+":"+t.type,i.trigger(e,s)};t.on("destroyed",i.onDestroyed.bind(i)),t.on("shown hidden rested dir plain",s),t.on("dir:up dir:right dir:down dir:left",s),t.on("plain:up plain:right plain:down plain:left",s)}
1,z.prototype.pressureFn=function(t,e,i){var s=this,o=0;clearInterval(s.pressureIntervals[i]),s.pressureIntervals[i]=setInterval((function(){var i=t.force||t.pressure||t.webkitForce||0;i!==o&&(e.trigger("pressure",i),s.trigger("pressure "+e.identifier+":pressure",i),o=i)}).bind(s),100)},z.prototype.onstart=function(t){var e=this,i=e.options,s=t;return t=b(t),e.updateBox(),S(t,function(o){e.actives.length<i.maxNumberOfNipples?e.processOnStart(o):s.type.match(/^touch/)&&(Object.keys(e.manager.ids).forEach(function(i){if(0>Object.values(s.touches).findIndex(function(t){return t.identifier===i})){var o=[t[0]];o.identifier=i,e.processOnEnd(o)}}),e.actives.length<i.maxNumberOfNipples&&e.processOnStart(o))}),e.manager.bindDocument(),!1},z.prototype.processOnStart=function(t){var e,i=this,s=i.options,o=i.manager.getIdentifier(t),n=t.force||t.pressure||t.webkitForce||0,r={x:t.pageX,y:t.pageY},a=i.getOrCreate(o,r);a.identifier!==o&&i.manager.removeIdentifier(a.identifier),a.identifier=o;var h=function(e){e.trigger("start",e),i.trigger("start "+e.id+":start",e),e.show(),n>0&&i.pressureFn(t,e,e.identifier),i.processOnMove(t)};if((e=i.idles.indexOf(a))>=0&&i.idles.splice(e,1),i.actives.push(a),i.ids.push(a.identifier),"semi"!==s.mode)h(a);else{if(!(u(r,a.position)<=s.catchDistance))return a.destroy(),void i.processOnStart(t);h(a)}return a},z.prototype.getOrCreate=function(t,e){var i,s=this.options;return/(semi|static)/.test(s.mode)?(i=this.idles[0])?(this.idles.splice(0,1),i):"semi"===s.mode?this.createNipple(e,t):(console.warn("Coudln't find the needed nipple."),!1):i=this.createNipple(e,t)},z.prototype.processOnMove=function(t){var e=this.options,i=this.manager.getIdentifier(t),s=this.nipples.get(i),o=this.manager.scroll;if(isNaN(t.buttons)?0!==t.pressure:0!==t.buttons){let T,A,j,C;if(!s)return console.error("Found zombie joystick with ID "+i),void this.manager.removeIdentifier(i);if(e.dynamicPage){var n,r,a,h=s.el.getBoundingClientRect();s.position={x:o.x+h.left,y:o.y+h.top}}s.identifier=i;var l=s.options.size/2,c={x:t.pageX,y:t.pageY};e.lockX&&(c.y=s.position.y),e.lockY&&(c.x=s.position.x);var d,p,m,g,f=u(c,s.position),v=(d=c,T=(p=s.position).x-d.x,180/Math.PI*Math.atan2(p.y-d.y,T)),b=y(v),x=f/l,P={distance:f,position:c};if("circle"===s.options.shape?(m=Math.min(f,l),n=s.position,r=m,A={x:0,y:0},a=y(a=v),A.x=n.x-r*Math.cos(a),A.y=n.y-r*Math.sin(a),g=A):(j=c,C=s.position,m=u(g={x:Math.min(Math.max(j.x,C.x-l),C.x+l),y:Math.min(Math.max(j.y,C.y-l),C.y+l)},s.position)),e.follow){if(f>l){let t=c.x-g.x,e=c.y-g.y;s.position.x+=t,s.position.y+=e,s.el.style.top=s.position.y-(this.box.top+o.y)+"px",s.el.style.left=s.position.x-(this.box.left+o.x)+"px",f=u(c,s.position)}}else c=g,f=m;var E=c.x-s.position.x,M=c.y-s.position.y;s.frontPosition={x:E,y:M},e.dataOnly||w(s.ui.front,s.frontPosition);var S={identifier:s.identifier,position:c,force:x,pressure:t.force||t.pressure||t.webkitForce||0,distance:f,angle:{radian:b,degree:v},vector:{x:E/l,y:-M/l},raw:P,instance:s,lockX:e.lockX,lockY:e.lockY};(S=s.computeDirection(S)).angle={radian:y(180-v),degree:180-v},s.trigger("move",S),this.trigger("move "+s.id+":move",S)}else this.processOnEnd(t)},z.prototype.processOnEnd=function(t){var e=this,i=e.options,s=e.manager.getIdentifier(t),o=e.nipples.get(s),n=e.manager.removeIdentifier(o.identifier);!o||(i.dataOnly||o.hide(function(){"dynamic"===i.mode&&(o.trigger("removed",o),e.trigger("removed "+o.id+":removed",o),e.manager.trigger("removed "+o.id+":removed",o),o.destroy())}),clearInterval(e.pressureIntervals[o.identifier]),o.resetDirection(),o.trigger("end",o),e.trigger("end "+o.id+":end",o),e.ids.indexOf(o.identifier)>=0&&e.ids.splice(e.ids.indexOf(o.identifier),1),e.actives.indexOf(o)>=0&&e.actives.splice(e.actives.indexOf(o),1),/(semi|static)/.test(i.mode)?e.idles.push(o):e.nipples.indexOf(o)>=0&&e.nipples.splice(e.nipples.indexOf(o),1),e.manager.unbindDocument(),/(semi|static)/.test(i.mode)&&(e.manager.ids[n.id]=n.identifier))},z.prototype.onDestroyed=function(t,e){this.nipples.indexOf(e)>=0&&this.nipples.splice(this.nipples.indexOf(e),1),this.actives.indexOf(e)>=0&&this.actives.splice(this.actives.indexOf(e),1),this.idles.indexOf(e)>=0&&this.idles.splice(this.idles.indexOf(e),1),this.ids.indexOf(e.identifier)>=0&&this.ids.splice(this.ids.indexOf(e.identifier),1),this.manager.removeIdentifier(e.identifier),this.manager.unbindDocument()},z.prototype.destroy=function(){for(var t in this.unbindEvt(this.options.zone,"start"),this.nipples.forEac
1h(function(t){t.destroy()}),this.pressureIntervals)Object.prototype.hasOwnProperty.call(this.pressureIntervals,t)&&clearInterval(this.pressureIntervals[t]);this.trigger("destroyed",this.nipples),this.manager.unbindDocument(),this.off(),this.pressureIntervals={},this.nipples=[],this.idles=[],this.actives=[],this.ids=[],this.manager=null},R.prototype=new F,R.constructor=R,R.prototype.prepareCollections=function(){var t=this;t.collections.create=t.create.bind(t),t.collections.on=t.on.bind(t),t.collections.off=t.off.bind(t),t.collections.destroy=t.destroy.bind(t),t.collections.get=function(e){var i;return t.collections.every(function(t){return!(i=t.get(e))}),i}},R.prototype.create=function(t){return this.createCollection(t)},R.prototype.bindWindowEvents=function(){this._windowBound||typeof window>"u"||(this._windowBound=!0,f(window,"resize",this._onResize),f(window,"scroll",this._onScroll))},R.prototype.unbindWindowEvents=function(){!this._windowBound||typeof window>"u"||(this._windowBound=!1,v(window,"resize",this._onResize),v(window,"scroll",this._onScroll))},R.prototype.createCollection=function(t){var e=new z(this,t);return this.bindCollection(e),this.collections.push(e),this.bindWindowEvents(),e},R.prototype.bindCollection=function(t){var e,i=this,s=function(t,s){e=t.type+" "+s.id+":"+t.type,i.trigger(e,s)};t.on("destroyed",i.onDestroyed.bind(i)),t.on("shown hidden rested dir plain",s),t.on("dir:up dir:right dir:down dir:left",s),t.on("plain:up plain:right plain:down plain:left",s)},R.prototype.bindDocument=function(){this.binded||(this.bindEvt(document,"move").bindEvt(document,"end"),this.binded=!0)},R.prototype.unbindDocument=function(t){Object.keys(this.ids).length&&!0!==t||(this.unbindEvt(document,"move").unbindEvt(document,"end"),this.binded=!1)},R.prototype.getIdentifier=function(t){var e;return t?void 0===(e=void 0===t.identifier?t.pointerId:t.identifier)&&(e=this.latest||0):e=this.index,void 0===this.ids[e]&&(this.ids[e]=this.index,this.index+=1),this.latest=e,this.ids[e]},R.prototype.removeIdentifier=function(t){var e={};for(var i in this.ids)if(this.ids[i]===t){e.id=i,e.identifier=this.ids[i],delete this.ids[i];break}return e},R.prototype.onmove=function(t){return this.onAny("move",t),!1},R.prototype.onend=function(t){return this.onAny("end",t),!1},R.prototype.oncancel=function(t){return this.onAny("end",t),!1},R.prototype.onAny=function(t,e){var i,s=this,o="processOn"+t.charAt(0).toUpperCase()+t.slice(1);e=b(e);var n=function(t,e,i){i.ids.indexOf(e)>=0&&(i[o](t),t._found_=!0)};return S(e,function(t){i=s.getIdentifier(t),S(s.collections,n.bind(null,t,i)),t._found_||s.removeIdentifier(i)}),!1},R.prototype.destroy=function(){this.unbindDocument(!0),this.unbindWindowEvents(),this.ids={},this.index=0,this.collections.forEach(function(t){t.destroy()}),this.collections=[],this.off()},R.prototype.onDestroyed=function(t,e){if(0>this.collections.indexOf(e))return!1;this.collections.splice(this.collections.indexOf(e),1),0===this.collections.length&&this.unbindWindowEvents()};var _=null;function X(){return _||(_=new R),_}var W={create:function(t){return X().create(t)},destroy:function(){_&&(_.destroy(),_=null)},get factory(){return X()}},N=new m.Fc,I=new m.Fc,V=new m.Fc,L=new m.Fc,Q=new m.Fc,Y=new m.Fc,B=new m.Oc,Z=new m.Oc,G=new m.Oc,q=new m.Ec,U=new m.Ec,H=new m.Pc(0,0,0,"YXZ"),K=new m.Fc(1,0,0),J=new m.Fc(0,1,0),$=new m.Fc(0,0,1),tt=new m.Fc(1,1,1),te=[],ti=t=>te[t]??(te[t]=new m.Fc),ts=new m.Fc,to=new m.Fc,tn=new m.Fc,tr=new m.Fc,ta=new m.Ec,th=new m.Fc,tl=new m.Ec,tc=new m.Re,td=new m.Xc,tp={type:"requestRender"},tm={type:"updateMatrix"},tu=class extends m.Bc{constructor(t,e,i,s,n,l,c,d,u){super(),this.object=t,this.domElement=e,this.data=i,this.gloabalPhysics=s,this.controlsManager=n,this.cameraFollow=l,this.camera=c,this.page=d,this.sharedAssets=u,this.enableDamping=!0,this.hiddenMatrix0=new m.Oc,this.target0=new m.Fc,this.zoom0=1,this.rotForce=1,this.moveForce=1,this.pixelsPerMeter=o.c,this.euler0=new m.Pc(0,0,0,"YXZ"),this.position0Cam=new m.Fc,this.quat0Cam=new m.Ec,this.scale0Cam=new m.Fc,this.hiddenMatrix0Cam=new m.Oc,this.threshEndTranslate=.01,this.threshEndRotate=1e-8,this.threshEndRotVel=.005,this.collider={type:"capsule",radius:40,segment:new m.Re(new m.Fc(0,-40,0),new m.Fc(0,40,0)),matrix:new m.Oc,position:new m.Fc,rotation:new m.Ec},this.euler=new m.Pc(0,0,0,"YXZ"),this.eulerDelta=new m.Fc,this.lastPosition=new m.Fc,this.lastCameraQuaternion=new m.Ec,this.lastCameraPosition=new m.Fc,this.PI_2=Math.PI/2,this.prevMouse=new m.Dc,this.velocityTarget=new m.Fc,this.velocity=new m.Fc,this.directionXZ=new m.Fc,this.rotVelocityStick=new m.Fc,this.rotVelocityTarget=new m.Fc,this.rotVelocity=new m.Fc,this.rotDirection=new m.Fc,this.nonColliderRotOffset=new m.Oc,this.nonColliderPosOffset=new m.Oc,this.firstPointerId=-1,this.rot=new m.Fc,this.path=[],this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.onObject=!1,this.actionState={},this.keyAssignments=[["moveNegZ","W"],["moveNegX","A"],["movePosZ","S"],["movePosX","D"],["rotPosX","ArrowUp"],["rotPosY","ArrowLeft"],["rotNegX","ArrowDown"],["rotNegY","ArrowRight"],["jump"," "]],this.collisionEnabled=!0,this.offsetMatr
1ix=new m.Oc,this.objectToTarget=new m.Fc,this.objectToTarget0=new m.Fc,this.objectToCamXZ=new m.Fc,this.objectToCamXZ0=new m.Fc,this.targetToCamera=new m.Fc,this.targetToCamera0=new m.Fc,this.cameraPolarAxis0=new m.Fc,this.targetPos=new m.Fc,this.targetQuat=new m.Ec,this.lerpFactorPos=(new m.Fc).setScalar(.3),this.lerpFactorPosStart=.3,this.lerpFactorPosEnd=.3,this.lerpFactorRotStart=.3,this.lerpFactorRotEnd=.3,this.lerpFactorPosCamera=.3,this.lerpFactorRotCamera=.3,this.objXZQuat=new m.Ec,this.objXZQuatInv=new m.Ec,this.objXZRotMat=new m.Oc,this.isFirstPerson=!1,this.didHit=!1,this.groundVelocity=new m.Fc,this.pushedVelocity=new m.Fc,this.groundYRotation=0,this.objectRealQuat=new m.Ec,this.colliderWorldQuat=new m.Ec,this.groundNormal=new m.Fc,this.groundTilt=new m.Ec,this.groundTiltInv=new m.Ec,this.lastHitObj=null,this.isFirstFrame=!0,this.rotationAccumWhenOrientWithCamera=0,this.navMeshPathDest=null,this.position=new m.Fc,this.quaternion=new m.Ec,this.scale=new m.Fc,this.initialAction=!0,this.onPointerDown=t=>{(t.target===this.domElement||t.target instanceof HTMLElement&&"SPLINE-VIEWER"===t.target.tagName&&t.target.shadowRoot?.contains(this.domElement))&&-1===this.firstPointerId&&(this.firstPointerId=t.pointerId,this.domElement.ownerDocument.addEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.addEventListener("pointerup",this.onPointerUp),"keys"===this.rotBy||r.e||r.f||this.domElement.requestPointerLock(),this.prevMouse.set(t.clientX,t.clientY))},this.onPointerUp=t=>{this.firstPointerId=-1,this.domElement.ownerDocument.removeEventListener("pointermove",this.onPointerMove),this.domElement.ownerDocument.removeEventListener("pointerup",this.onPointerUp),"mouse"===t.pointerType&&this.domElement.ownerDocument.exitPointerLock()},this.onPointerMove=t=>{if(t.pointerId!==this.firstPointerId)return;let e=t.clientX-this.prevMouse.x,i=t.clientY-this.prevMouse.y;this.prevMouse.set(t.clientX,t.clientY),"mouse"===t.pointerType&&"keys"!==this.rotBy&&(r.f&&r.g<15.5&&!r.e?(this.eulerDelta.y=-e*this.mouseOrbitSensitivity,this.eulerDelta.x=-i*this.mouseOrbitSensitivity):(this.eulerDelta.y=-t.movementX*this.mouseOrbitSensitivity,this.eulerDelta.x=-t.movementY*this.mouseOrbitSensitivity)),"mouse"!==t.pointerType&&"drag"===this.rotByTouch&&(this.eulerDelta.y=-e*this.mouseOrbitSensitivity*5,this.eulerDelta.x=-i*this.mouseOrbitSensitivity*5),this.controlsManager.requestRender()},this.onPointerlockChange=t=>{this.domElement.ownerDocument.pointerLockElement===this.domElement?tu.isLocked=!0:tu.isLocked=!1},this.onPointerlockError=()=>{console.error("SPE.GameControls: Unable to use Pointer Lock API")},this.handleVisibilityChange=()=>{if(document?.hidden)for(let t in this.movementState)this.movementState[t]=0},this.onKeyDown=t=>{for(let e of(t.target instanceof HTMLInputElement||"ArrowLeft"!==t.code&&"ArrowUp"!==t.code&&"ArrowRight"!==t.code&&"ArrowDown"!==t.code&&"Space"!==t.code||t.preventDefault(),this.keyAssignments))if(t.key.toUpperCase()===e[1]||t.key===e[1]){this.movementState[e[0]]=1;break}this.controlsManager.requestRender()},this.onKeyUp=t=>{for(let e of this.keyAssignments)if(t.key.toUpperCase()===e[1]||t.key===e[1]||t.code.slice(3,t.code.length).toUpperCase()===e[1]){this.movementState[e[0]]=0;break}},this.copyVRGamePadValues=(t,e)=>{for(let i=2;i<4;i++){let s=t.axes[i];0===e?2===i?this.movementState.movePosX=s:this.movementState.movePosZ=s:(t.buttons[3].pressed?this.movementState.jump=1:this.movementState.jump=0,2===i?this.movementState.rotPosY=s:"fly"===this.moveMode&&(this.movementState.moveNegY=s))}},this.sharedGameControlGlobals=n.sharedGameControlGlobals,t===c&&(this.isFirstPerson=!0),this.hiddenMatrix0.copy(this.object.hiddenMatrix),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.euler0.setFromQuaternion(this.quaternion,"YXZ");let y=this.euler0.clone(),g=y.y;if(this.objectRealQuat.copy(this.quaternion),y.y=0,this.quaternion.setFromEuler(y),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZ
1RotMat.makeRotationFromQuaternion(this.quaternion),y.set(0,g,0),this.quaternion.setFromEuler(y),this.rot.setFromEuler(y),this.object.matrixAutoUpdate=!1,(this.isFirstPerson||!0===this.cameraFollow)&&(this.target0.copy(this.camera.getTarget()),this.zoom0=this.camera.zoom),!0===this.cameraFollow){this.position0Cam.copy(this.camera.position),this.quat0Cam.copy(this.camera.quaternion),this.scale0Cam.copy(this.camera.scale),this.hiddenMatrix0Cam.copy(this.camera.hiddenMatrix),this.camera.parent?(this.camera.hiddenMatrix.copy(this.camera?.parent.matrixWorld),this.camera.matrix.copy(this.camera.matrixWorld)):this.camera.hiddenMatrix.identity(),this.camera.matrix.copy(this.camera.matrixWorld),this.camera.matrix.decompose(this.camera.position,this.camera.quaternion,this.camera.scale),this.camera.matrixAutoUpdate=!1,this.offsetMatrix.copy(this.object.matrix).invert().multiply(this.camera.matrix);let t,e=new m.Fc(0,0,-1).applyQuaternion(this.camera.quaternion),i=(new m.Fc).subVectors(this.position,this.camera.position);this.objectToCamXZ.copy(i),this.objectToCamXZ.y=0,this.objectToCamXZ0.copy(this.objectToCamXZ),1e-6>Math.abs(e.y)?(i.y=0,e.y=0,t=i.projectOnVector(e)):t=i.y/e.y>0?e.multiplyScalar(i.y/e.y):e.multiplyScalar(i.length()),this.targetToCamera0.copy(t).negate();let s=this.camera.position.clone().add(t);this.objectToTarget0.subVectors(s,this.position);let o=(new m.Pc).setFromQuaternion(this.camera.quaternion,"YXZ");this.cameraPolarOffset=-o.x,o.x=0,o.z=0,o.y-=Math.PI/2,this.cameraPolarAxis0.set(0,0,-1).applyEuler(o)}if(this.object instanceof a.a&&(this.object.matrixAutoUpdate=!1),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.rotByTouch=i.rotByTouch??"joystick",this.rotBy=i.rotBy??"keys",this.rotationMode=i.rotationMode??"normal",this.moveMode=i.moveMode??"walk",this.collisionEnabled=i.collisionEnabled,this.speedTranslate=+(i.speedTranslate??250),this.speedOrbit=.025*(i.speedRotate??100),this.mouseOrbitSensitivity=16e-6*(i.speedRotate??100),this.keyAssignments=i.keyAssignments.map(t=>{let e=[t[0],t[1]];return"▲"===e[1]?e[1]="ArrowUp":"◀"===e[1]?e[1]="ArrowLeft":"▼"===e[1]?e[1]="ArrowDown":"▶"===e[1]?e[1]="ArrowRight":"⇧"===e[1]?e[1]="Shift":"↵"===e[1]?e[1]="Enter":"Space"===e[1]?e[1]=" ":"⌘"===e[1]?e[1]="Meta":"Ctrl"===e[1]?e[1]="Control":"Esc"===e[1]&&(e[1]="Escape"),e}),"mouse"===i.rotBy){let t;-1!==(t=this.keyAssignments.findIndex(t=>"rotNegX"===t[0]))&&(this.keyAssignments[t][1]=""),-1!==(t=this.keyAssignments.findIndex(t=>"rotPosX"===t[0]))&&(this.keyAssignments[t][1]=""),-1!==(t=this.keyAssignments.findIndex(t=>"rotPosY"===t[0]))&&(this.keyAssignments[t][1]=""),-1!==(t=this.keyAssignments.findIndex(t=>"rotNegY"===t[0]))&&(this.keyAssignments[t][1]="")}this.lerpFactorPosStart=1-.02**(1/(60*(i.delayPos[0]??.3))),this.lerpFactorPosEnd=1-.02**(1/(60*(i.delayPos[1]??.3))),this.lerpFactorPos.setScalar(this.lerpFactorPosStart),this.lerpFactorRotStart=1-.02**(1/(60*(i.delayRot[0]??.3))),this.lerpFactorRotEnd=1-.02**(1/(60*(i.delayRot[1]??.3))),this.lerpFactorPosCamera=1-.02**(1/(60*(i.delayPosCamera??.3))),this.lerpFactorRotCamera=1-.02**(1/(60*(i.delayRotCamera??.3))),this.gravity=12*(this.gloabalPhysics.gravity??p.ta.defaultData.gravity),this.usePhysics=this.gloabalPhysics.usePhysics??p.ta.defaultData.usePhysics,this.jumpPower=20*i.jumpPower,this.resetYPosition=this.position.y+Math.abs(i.resetYPosition)*(this.gravity>0?1:-1),this.alignToGround=i.alignToGround??!1,this.orientMode=i.autoOrientMove?i.orientMode:"none",this.orientWith=i.orientWith??p.Na.defaultDataThirdPerson.orientWith,this.slopeThresh=65*Math.PI/180,"capsule"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=i.collider.height/2-i.collider.radius,this.collider.segment.end.y=-this.collider.segment.start.y,this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height):"sphere"===i.collider.type?(this.collider.radius=i.collider.radius,this.collider.segment.start.y=0,this.collider.segment.end.y=0,this.offset=2*i.collider.radiu
1s*.02/this.pixelsPerMeter,this.stepThresh=2*i.collider.radius*.3/this.pixelsPerMeter,this.colliderHeight=2*i.collider.radius):(this.offset=.02*i.collider.height/this.pixelsPerMeter,this.stepThresh=.3*i.collider.height/this.pixelsPerMeter,this.colliderHeight=i.collider.height),this.collider.type=i.collider.type;let f=(new m.Fc).fromArray(i.collider.position.map(t=>"number"==typeof t?t:0)),v=(new m.Ec).setFromEuler((new m.Pc).fromArray([...i.collider.rotation.map(t=>"number"==typeof t?t:0),"XYZ"]));this.collider.position.copy(f).multiply(this.scale),this.collider.rotation.copy(v),this.collider.matrix.compose(f,v,tt),void 0!==i.cameraXAxis&&(this.cameraXAxis=i.cameraXAxis,this.cameraYAxis=i.cameraYAxis,this.minPolarAngle=i.cameraRotXLimits[0],this.maxPolarAngle=i.cameraRotXLimits[1],this.minAzimuthAngleRel=i.cameraRotYLimits[0],this.maxAzimuthAngleRel=i.cameraRotYLimits[1]),this.forwardDir=i.forwardDirection??"-z",this.isFirstPerson&&(this.forwardDir="-z"),this.runMultiplier=i.runMultiplier??2;let b=2*i.navmesh.destinationHelperRadius;if(b>0){let t=new p.f;t.push({fi:0,data:{...p.da.defaultData("light","phong"),alpha:0},id:"layer1"}),t.push({fi:0,data:{...p.da.defaultData("color"),color:i.navmesh.destinationHelperColor,alpha:i.navmesh.destinationHelperColor.a},id:"layer2"});let e=(0,h.R)({layers:t},{scene:this.page.scene,shared:this.sharedAssets});this.navMeshPathDest=new m.ld(h.q.create({parameters:{width:b,height:b/10,hollow:.7}}),e),this.navMeshPathDest.material.userData.opacity0=i.navmesh.destinationHelperColor.a}this.activate()}reset(t=!1){if(this.object.hiddenMatrix.copy(this.hiddenMatrix0),t){this.object.updateMatrix(),this.object.updateMatrixWorld(),this.object.matrix.copy(this.object.matrixWorld),this.object.matrix.decompose(this.position,this.quaternion,this.scale),this.object.parent?this.object.hiddenMatrix.copy(this.object.parent.matrixWorld).invert():this.object.hiddenMatrix.identity();let t=(new m.Pc).setFromQuaternion(this.quaternion,"YXZ"),e=t.y;this.objectRealQuat.copy(this.quaternion),t.y=0,this.quaternion.setFromEuler(t),this.objXZQuat.copy(this.quaternion),this.objXZQuatInv.copy(this.objXZQuat).invert(),this.objXZRotMat.makeRotationFromQuaternion(this.quaternion),t.set(0,e,0),this.quaternion.setFromEuler(t),this.rot.setFromEuler(t),this.euler.setFromQuaternion(this.quaternion,"YXZ"),this.velocityTarget.set(0,0,0),this.velocity.set(0,0,0)}else this.object instanceof a.a?this.object.matrixAutoUpdate=!0:this.object.updateMatrix();!0===this.cameraFollow&&(this.camera.quaternion.copy(this.quat0Cam),this.camera.position.copy(this.position0Cam),this.camera.scale.copy(this.scale0Cam),this.camera.hiddenMatrix.copy(this.hiddenMatrix0Cam),this.camera.matrixAutoUpdate=!0),this.controlsManager.requestRender()}activate(){this.instantiateActions(),this.domElement.ownerDocument.addEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.addEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.addEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.addEventListener("visibilitychange",this.handleVisibilityChange)}deactivate(){this.disposeActions(),this.domElement.ownerDocument.removeEventListener("pointerdown",this.onPointerDown),this.domElement.ownerDocument.removeEventListener("keydown",this.onKeyDown),this.domElement.ownerDocument.removeEventListener("keyup",this.onKeyUp),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError),this.domElement.ownerDocument.removeEventListener("visibilitychange",this.handleVisibilityChange)}dispose(){this.deactivate(),this.navMeshPathDest?.parent&&this.page.remove(this.navMeshPathDest)}instantiateActions(){let t=this.data,e=this.sharedAssets;void 0!==t.gameActions&&(this.actions={},p.Ma.list.forEach(i=>{this.actions[i]=(0,l.f)({...t,disabled:!1,type:"GameControl"},t.gameActions[i],this.page,e,this.controlsManager.eventManager,this.object)})),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"),this.initialAction&&(this.initialAction=!1)}disposeActions(){this.initialAction=!1,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),(0,l.g)(this.actions.idle),(0,l.g)(this.actions.move),(0,l.g)(this.actions.run),(0,l.g)(this.actions.jump)}dispatchStartEvent(t){void 0!==this.actions[t]&&(this.actionState[t]||(this.actionState[t]=!0,this.actions[t].Transition.forEach(t=>{t.play()}),this.actions[t].Animation.forEach(t=>{t.play(!1===this.initialAction)}),this.actions[t].TimelineAnimation.forEach(t=>{t.play()}),this.actions[t].Create.forEach(t=>{t.dispatchStart()}
vendor: 11,495 bytes, line 1
1),this.actions[t].Audio.forEach(t=>{t.dispatchGameControl("start")}),this.actions[t].Particles.forEach(t=>{t.dispatchGameControl("start")})))}dispatchStopEvent(t){void 0!==this.actions[t]&&this.actionState[t]&&(this.actionState[t]=!1,this.actions[t].Transition.forEach(t=>{t.stop(),null!==t.object.currentState&&t.object.changeSelectedState(null,{scene:this.page.scene,shared:this.sharedAssets})}),this.actions[t].TimelineAnimation.forEach(t=>{t.stop()}),this.actions[t].Create.forEach(t=>{t.dispatchStop()}),this.actions[t].Audio.forEach(t=>{t.dispatchGameControl("stop")}),this.actions[t].Particles.forEach(t=>{t.dispatchGameControl("stop")}))}get colliderWorldPosition(){return L.copy(this.collider.position).applyQuaternion(this.objectRealQuat).add(this.position)}update(t){if(this.gravity<0?this.position.y<this.resetYPosition:this.position.y>this.resetYPosition)return this.reset(!0),!0;this.sharedGameControlGlobals.gamePads.forEach(this.copyVRGamePadValues);let e=(this.isFirstFrame?16.6:t)/1e3;this.isFirstFrame&&(this.isFirstFrame=!1);let i=60*e,s=!1;if(this.groundYRotation=0,this.groundVelocity.set(0,0,0),this.usePhysics&&this.collisionEnabled&&this.object.rigidBody?.collider(0).shape){let t=Q.set(0,(0===this.velocity.y?this.pixelsPerMeter*Math.max(Math.abs(this.gravity)/120,1)*(this.gravity>0?1:-1):this.velocity.y)*e,0).divideScalar(this.pixelsPerMeter),i=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter),this.colliderWorldQuat,t,this.object.rigidBody?.collider(0).shape,0,1,!1,8,void 0,void 0,this.object.rigidBody);if(i){this.onObject=!0,this.groundNormal.set(i.normal2.x,i.normal2.y,i.normal2.z).applyQuaternion(this.colliderWorldQuat).negate(),this.alignToGround&&this.groundTiltAdjustment(this.groundNormal),Math.acos(this.groundNormal.y)<this.slopeThresh&&(s=!0),0===i.collider.parent()?.bodyType()&&Math.acos(this.groundNormal.y)*(180/Math.PI)>45&&(this.onObject=!1);let t=i.collider.parent(),o=null!==t&&t.isKinematic()?t:null,n=null===o?void 0:this.sharedGameControlGlobals.kinematicBodyToEntity.get(o.handle);if(null!==o&&n?.userData.isFollowingObj!==this.object.uuid){let t=this.object.getWorldPosition(L).add(this.collider.position).divideScalar(this.pixelsPerMeter),i=o.velocityAtPoint(t);this.groundVelocity.set(i.x,i.y,i.z).multiplyScalar(this.pixelsPerMeter),this.groundYRotation=o.angvel().y*e}}else this.onObject=!1}if("walk"===this.moveMode&&this.collisionEnabled&&(1===this.movementState.jump&&this.onObject&&(this.velocityTarget.y=this.jumpPower,this.movementState.jump=0,this.dispatchStopEvent("idle"),this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.dispatchStopEvent("jump"),this.dispatchStartEvent("jump"),this.onObject=!1),this.onObject?this.velocityTarget.y/=2:this.velocityTarget.y+=this.gravity*i),"fly"===this.moveMode&&(this.velocityTarget.y=(this.movementState.movePosY-this.movementState.moveNegY)*this.speedTranslate),this.directionXZ.z=this.movementState.movePosZ-this.movementState.moveNegZ,this.directionXZ.x=this.movementState.movePosX-this.movementState.moveNegX,"+z"===this.forwardDir&&this.directionXZ.multiplyScalar(-1),this.directionXZ.manhattanLength()>0&&(this.path=[]),this.navMeshPathDest){let t=this.navMeshPathDest.material;if("walk"===this.moveMode&&this.path.length>1){this.navMeshPathDest.position.copy(this.path[this.path.length-1]),this.navMeshPathDest.parent||this.page.add(this.navMeshPathDest);let e=L.subVectors(this.path[1],this.position),i=Q.subVectors(this.path[1],this.path[0]);0>e.dot(i)?this.path.shift():(this.directionXZ.x=i.x,this.directionXZ.z=i.z),t.opacity=t.userData.opacity0}else t.opacity-=.05*t.userData.opacity0,this.navMeshPathDest.material.opacity<=0&&this.navMeshPathDest.parent&&this.page.remove(this.navMeshPathDest)}this.directionXZ.normalize(),this.movementState.run?this.moveForce=this.runMultiplier:this.moveForce=1,this.velocityTarget.z=this.directionXZ.z*this.speedTranslate*this.moveForce,this.velocityTarget.x=this.directionXZ.x*this.speedTranslate*this.moveForce,("walk"===this.moveMode?this.velocityTarget.x+this.velocityTarget.z===0:0===this.velocityTarget.manhattanLength())?this.lerpFactorPos.setScalar(this.lerpFactorPosEnd):this.lerpFactorPos.setScalar(this.lerpFactorPosStart),"walk"===this.moveMode&&(this.lerpFactorPos.y=1),!1===this.didHit&&0===this.pushedVelocity.manhattanLength()||!1===this.usePhysics?(this.velocity.x+=(this.velocityTarget.x-this.velocity.x)*(1-(1-this.lerpFactorPos.x)**i),this.velocity.y+=(this.velocityTarget.y-this.velocity.y)*(1-(1-this.lerpFactorPos.y)**i),this.velocity.z+=(this.velocityTarget.z-this.velocity.z)*(1-(1-this.lerpFactorPos.z)**i)):this.velocity.copy(this.velocityTarget),("walk"===this.moveMode?this.velocity.x**2+this.velocity.z**2<this.speedTranslate:this.velocity.lengthSq()<this.speedTranslate)?(this.dispatchStopEvent("move"),this.dispatchStopEvent("run"),this.onObject&&(this.dispatchStopEvent("jump"),this.dispatchStartEvent("idle"))):(this.dispatchStopEvent("idle"),(this.onObject||"fly"===this.moveMode)&&(this.dispatchStopEvent("jump"),this.movementState.run?(this.dispatchStopEvent("move"),this.dispatchStartEvent("run")):(this.dispatchStopEvent("run"),this.dispatchStartEvent("move"))));let n=V.copy(this.velocity);if("none"!==this.orientMode&&!1===this.isFirstPerson){let t=Q.copy(n);t.y=0,n.set(0,n.y,t.length()*("+z"===this.forwardDir?1:-1))}if(this.directionXZ.manhattanLength()>0&&"none"!==this.orientMode&&!1===this.isFirstPerson)if("camera"===this.orientWith&&this.path.length<=1){this.camera.getWorldDirection(L);let t=Y.copy(J).multiplyScalar(L.dot(J));L.sub(t);let e=Q.copy(this.directionXZ);e.x*=-1,this.rot.y=L.angleTo(e)*(L.cross(e).y>0?-1:1)+this.rotationAccumWhenOrientWithCamera}else this.rot.y=(this.path.length>1?0:this.euler.y)+Math.atan2(-this.directionXZ.z,this.directionXZ.x)+Math.PI/2*("+z"===this.forwardDir?1:-1);if(H.setFromVector3(this.rot),"walk"===this.moveMode&&(H.x=0),n.applyEuler(H),s&&(U.setFromUnitVectors(J,this.groundNormal),n.applyQuaternion(U)),!0===this.usePhysics&&this.object.rigidBody){this.pushedVelocity.set(0,0,0);let t=0;for(let i of this.sharedGameControlGlobals.entitiesWithTransformAnim){if(void 0===i.rigidBody||void 0===i.prevQ)continue;(i.hasNonUniformScale?i.matrixWorldRigid:i.matrixWorld).decompose(ts,ta,to);let s=this.object.getWorldPosition(tn).add(this.collider.position).sub(ts);tl.copy(i.prevQ).invert().premultiply(ta);let r=Y.subVectors(ts,i.prevT).add(tr.copy(s).applyQuaternion(tl).sub(s)).divideScalar(e).divideScalar(this.pixelsPerMeter),a=i.rigidBody.collider(0).castCollider(r,this.object.rigidBody.collider(0),L.copy(n).divideScalar(this.pixelsPerMeter),0,e,!1);r.multiplyScalar(this.pixelsPerMeter);let l=c.h.is(i)?i:i.object;if(null!==a&&this.lastHitObj!==l){let t;i instanceof h.da&&(t=i);let e=this.sharedGameControlGlobals.entityToCollisionEvents[l.uuid];if(e)for(let i of e)"character"===i.data.target&&(i.dispatch(t),l.dispatchEvent(o.g));this.lastHitObj=l}null!==a&&(Math.abs(r.x)>Math.abs(this.pushedVelocity.x)&&(this.pushedVelocity.x=r.x),Math.abs(r.y)>Math.abs(this.pushedVelocity.y)&&(this.pushedVelocity.y=r.y),Math.abs(r.z)>Math.abs(this.pushedVelocity.z)&&(this.pushedVelocity.z=r.z),ti(t++).copy(a.normal1).applyQuaternion(i.quaternion))}if(t>0){for(let e=0;e<t;e++){let t=ti(e),i=t.dot(n);i<0&&n.addScaledVector(t,-i)}n.add(this.pushedVelocity)}else n.add(this.groundVelocity)}if(this.rotDirection.y=Number(this.movementState.rotPosY)-Number(this.movementState.rotNegY),this.rotDirection.x=Number(this.movementState.rotPosX)-Number(this.movementState.rotNegX),this.rotDirection.normalize(),"normal"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)||"steer"===this.rotationMode&&(this.movementState.rotPosX||this.movementState.rotNegX)&&(this.movementState.movePosZ||this.movementState.moveNegZ||"walk"===this.moveMode)?this.rotVelocityStick.x=-this.rotDirection.x*this.speedOrbit*this.rotForce:this.rotVelocityStick.x=0,"normal"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)||"steer"===this.rotationMode&&(this.movementState.rotPosY||this.movementState.rotNegY)&&(this.movementState.movePosZ||this.movementState.moveNegZ)?this.rotVelocityStick.y=-this.rotDirection.y*this.speedOrbit*this.rotForce:this.rotVelocityStick.y=0,this.rotVelocityTarget.subVectors(this.eulerDelta.divideScalar(e),this.rotVelocityStick),0===this.rotVelocityTarget.manhattanLength()?this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotEnd)**i):this.rotVelocity.lerp(this.rotVelocityTarget,1-(1-this.lerpFactorRotStart)**i),this.euler.x+=this.rotVelocity.x*e,this.euler.y+=this.rotVelocity.y*e+this.groundYRotation,0===this.rotVelocityTarget.y&&0===this.directionXZ.manhattanLength()?this.rotationAccumWhenOrientWithCamera=0:(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.rotationAccumWhenOrientWithCamera+=this.rotVelocity.y*e),!1===this.isFirstPerson&&"none"!==this.orientMode&&this.directionXZ.manhattanLength()>0){if("radial"===this.orientMode){this.objectToCamXZ.copy(this.objectToCamXZ0).applyAxisAngle(J,this.euler.y-this.euler0.y);let t=Q.copy(this.objectToCamXZ).normalize(),i=Y.copy(n).multiplyScalar(e);i.y=0;let s=i.sub(L.copy(t).multiplyScalar(i.dot(t))).cross(t).y;this.euler.y-=Math.atan2(s,this.objectToCamXZ.length())}}else this.rot.y+=this.rotVelocity.y*e+this.groundYRotation,0!==this.rotVelocityTarget.y&&(!1===this.cameraFollow||"Locked"===this.cameraYAxis)&&(this.euler.y=this.rot.y);if(!0===this.cameraFollow&&("walk"===this.moveMode?"Limit"===this.cameraXAxis?this.euler.x=m.Cc.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):this.euler.x=m.Cc.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset,this.PI_2+this.cameraPolarOffset):"Limit"===this.cameraXAxis&&(this.euler.x=m.Cc.clamp(this.euler.x,-this.PI_2,this.PI_2))),"fly"===this.moveMode?this.rot.x=this.euler.x:this.isFirstPerson&&(H.copy(this.euler),H.y=0,this.nonColliderRotOffset.makeRotationFromEuler(H)),q.setFromAxisAngle(K,this.rot.x),U.setFromAxisAngle(J,this.rot.y),U.multiply(q),q.setFromAxisAngle($,this.rot.z),U.multiply(q),this.quaternion.copy(U),this.objectRealQuat.multiplyQuaternions(this.quaternion,this.objXZQuat),this.colliderWorldQuat.copy(this.objectRealQuat).multiply(this.collider.rotation),this.collisionEnabled)if(this.usePhysics&&this.object.rigidBody?.collider(0).shape){let t=Q.copy(n).multiplyScalar(e/this.pixelsPerMeter),i=null;this.didHit=!1;let s=new m.Fc;for(let e=0;e<5;e++){let n=t.length(),r=Y.copy(t).normalize();if(null===(i=this.sharedGameControlGlobals.rapierWorld.castShape(this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(s),this.colliderWorldQuat,r,this.object.rigidBody.collider(0).shape,0,n,!1,12,void 0,void 0,this.object.rigidBody))){0===e&&0!==this.directionXZ.manhattanLength()&&(this.lastHitObj=null),s.add(t);break}{this.didHit=!0;let a=this.sharedGameControlGlobals.colliderToEntity.get(i.collider.handle);if(a!==this.lastHitObj&&0===e){this.lastHitObj=a;let t=this.sharedGameControlGlobals.entityToCollisionEvents[a?.uuid];if(t){for(let e of t)if("character"===e.data.target){let t,s=(this.sharedGameControlGlobals.rapierWorld?.getCollider(i.collider.handle))._parent;if(a.cloner){for(let e of a.cloner.children)if(e.rigidBody===s){t=e;break}}e.dispatch(t),a.dispatchEvent(o.g)}}}let h=N.set(i.normal2.x,i.normal2.y,i.normal2.z).applyQuaternion(this.colliderWorldQuat),l=
vendor: 4,318 bytes, line 1
1I.copy(r).multiplyScalar(i.time_of_impact).dot(h),c=i.time_of_impact;if(0===c&&(this.position.y+=this.offset*this.pixelsPerMeter),l>this.offset&&(c=i.time_of_impact*(l-this.offset)/l,s.addScaledVector(r,c)),t.copy(r).multiplyScalar(n-c),Math.acos(-h.y)>this.slopeThresh){let e=this.colliderWorldPosition.divideScalar(this.pixelsPerMeter).add(s),o=Y.copy(i.witness2).applyQuaternion(this.colliderWorldQuat);o.y=0;let n=e.add(o);n.y+=this.stepThresh;let r=this.sharedGameControlGlobals.rapierWorld.castShape(n,this.colliderWorldQuat,t,this.object.rigidBody?.collider(0).shape,0,1,!1,12,void 0,void 0,this.object.rigidBody);null!==r&&0===r.time_of_impact&&(h.y=0,h.normalize())}t.addScaledVector(h,-t.dot(h))}}this.position.addScaledVector(s,this.pixelsPerMeter),L.copy(this.position).divideScalar(this.pixelsPerMeter),q.copy(this.quaternion).premultiply(this.groundTilt).multiply(this.objXZQuat);let r=this.object.rigidBody,a=void 0!==r&&th.copy(L).sub(r.translation()).lengthSq()>1;void 0!==r&&(a?(r.setTranslation(L,!0),r.setRotation(q,!0)):(r.setNextKinematicTranslation(L),r.setNextKinematicRotation(q)))}else{let t=this.onObject?1:5,i=n.multiplyScalar(e/t);for(let s=0;s<t;s++)this.position.add(i),this.collisionAdjustment(e/t)}else this.position.addScaledVector(n,e);if("walk"===this.moveMode&&this.onObject&&(this.velocityTarget.y=0,this.velocity.y=0),this.quaternion.premultiply(this.groundTilt).multiply(this.objXZQuat),this.object.matrix.compose(this.position,this.quaternion,this.scale),this.object.matrixWorldNeedsUpdate=!0,this.object.matrix.multiply(this.nonColliderPosOffset).multiply(this.nonColliderRotOffset),this.quaternion.premultiply(this.groundTiltInv).multiply(this.objXZQuatInv),!0===this.cameraFollow){this.updateFollowArms();let t=this.objectToTarget.add(this.position),e=this.targetToCamera.add(t);B.lookAt(e,t,J).setPosition(e),B.decompose(this.targetPos,this.targetQuat,L),this.camera.quaternion.slerp(this.targetQuat,1-(1-this.lerpFactorRotCamera)**i),this.camera.position.lerp(this.targetPos,1-(1-this.lerpFactorPosCamera)**i),this.camera.updateMatrix(),this.camera.updateMatrixWorld(),"Limit"===this.cameraYAxis&&"cartesian"===this.orientMode&&(this.euler.y=m.Cc.clamp(this.euler.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel)),this.euler.x=m.Cc.clamp(this.euler.x,-this.PI_2+(this.cameraPolarOffset<0?this.cameraPolarOffset:0),this.PI_2+(this.cameraPolarOffset>0?this.cameraPolarOffset:0))}return this.eulerDelta.set(0,0,0),this.object.dispatchEvent(tm),!(this.path.length<2&&this.lastPosition.distanceToSquared(this.position)<this.threshEndTranslate&&Math.abs(this.rotVelocity.x)<this.threshEndRotVel&&Math.abs(this.rotVelocity.y)<this.threshEndRotVel&&(void 0===this.camera||this.isFirstPerson||this.lastCameraPosition.distanceToSquared(this.camera.position)<this.threshEndTranslate&&8*(1-this.lastCameraQuaternion.dot(this.camera.quaternion))<this.threshEndRotate)&&("fly"===this.moveMode||!0===this.onObject||!1===this.collisionEnabled)&&(null===this.navMeshPathDest||this.navMeshPathDest.material.opacity<-.04*this.navMeshPathDest?.material?.userData.opacity0)||(this.camera&&(this.lastCameraPosition.copy(this.camera.position),this.lastCameraQuaternion.copy(this.camera.quaternion)),this.lastPosition.copy(this.position),this.object.dispatchEvent(tp),0))}updateFollowArms(){this.objectToTarget.copy(this.objectToTarget0),this.targetToCamera.copy(this.targetToCamera0);let t,e=q.setFromAxisAngle(J,"Limit"===this.cameraYAxis&&"radial"!==this.orientMode?m.Cc.clamp(this.euler.y-this.euler0.y,this.minAzimuthAngleRel,this.maxAzimuthAngleRel):this.euler.y-this.euler0.y);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&this.objectToTarget.applyQuaternion(e),t="Limit"===this.cameraXAxis?m.Cc.clamp(this.euler.x,-this.maxPolarAngle+this.cameraPolarOffset+1e-6,-this.minPolarAngle+this.cameraPolarOffset-1e-6):m.Cc.clamp(this.euler.x,-this.PI_2+this.cameraPolarOffset+1e-6,this.PI_2+this.cameraPolarOffset-1e-6);let i=L.copy(this.cameraPolarAxis0);("Locked"!==this.cameraYAxis||"radial"===this.orientMode)&&i.applyQuaternion(e);let s=U.setFromAxisAngle(i,t);"Locked"!==this.cameraYAxis&&this.targetToCamera.applyQuaternion(e),"Locked"!==this.cameraXAxis&&this.targetToCamera.applyQuaternion(s)}groundTiltAdjustment(t){180*J.angleTo(t)/Math.PI<15||180*J.angleTo(t)/Math.PI>
185?q.identity():q.setFromUnitVectors(J,t),this.groundTilt.slerp(q,.06),this.groundTiltInv.copy(this.groundTilt).invert()}collisionAdjustment(t){let e=I.set(0,0,0);this.object.matrix.compose(this.position,this.quaternion,this.scale);let i=B.multiplyMatrices(this.object.matrix,this.objXZRotMat).multiply(this.collider.matrix).decompose(L,q,Q).compose(L,q,tt);this.sharedGameControlGlobals.entitiesWithTransformAnim.forEach(t=>{if(t===this.object||t.isDescendantOf(this.object)||!t.bvhGeometry||!t.bvhGeometry.boundsTree)return;td.makeEmpty(),t.updateMatrixWorldRigid();let s=t.matrixWorldRigid,o=Z.copy(s).invert(),n=G.copy(Z).multiply(i);tc.copy(this.collider.segment),tc.start.applyMatrix4(n),tc.end.applyMatrix4(n);let r=N.copy(this.position).applyMatrix4(o);td.expandByPoint(tc.start),td.expandByPoint(tc.end),td.min.addScalar(-this.collider.radius),td.max.addScalar(this.collider.radius),t.bvhGeometry.boundsTree.shapecast({boundsTraverseOrder:t=>t.distanceToPoint(tc.end),intersectsBounds:t=>t.intersectsBox(td),intersectsTriangle:t=>{let i=t.closestPointToSegment(tc,L,Q);if(i<this.collider.radius){let t=this.collider.radius-i,o=Q.sub(L).normalize(),n=Y.copy(r);n.addScaledVector(o,t);let a=n.applyMatrix4(s).sub(this.position);e.add(a),tc.start.addScaledVector(o,t),tc.end.addScaledVector(o,t)}}})}),td.makeEmpty(),tc.copy(this.collider.segment),tc.start.applyMatrix4(i),tc.end.applyMatrix4(i),td.expandByPoint(tc.start),td.expandByPoint(tc.end),td.min.addScalar(-this.collider.radius),td.max.addScalar(this.collider.radius),this.sharedGameControlGlobals.staticMeshBVH?.shapecast({boundsTraverseOrder:t=>t.distanceToPoint(tc.end),intersectsBounds:t=>t.intersectsBox(td),intersectsTriangle:t=>{let i=t.closestPointToSegment(tc,L,Q);if(i<this.collider.radius){let t=this.collider.radius-i,s=Q.sub(L).normalize();this.alignToGround&&this.groundTiltAdjustment(s),e.addScaledVector(s,t),tc.start.addScaledVector(s,t),tc.end.addScaledVector(s,t)}}}),this.onObject=Math.abs(e.y)>Math.abs(t*this.velocity.y*.25),this.onObject&&this.dispatchStopEvent("jump");let s=Math.max(0,e.length()-1e-5);e.normalize().multiplyScalar(s),this.position.add(e)}pause(){this.firstPointerId=-1,this.movementState={moveNegZ:0,movePosZ:0,moveNegX:0,movePosX:0,moveNegY:0,movePosY:0,rotPosX:0,rotNegX:0,rotPosY:0,rotNegY:0,jump:0,run:0},this.deactivate()}resume(){this.activate()}};tu.isLocked=!1;var ty,tg,tf,tv={cs:6,ch:2,walkableSlopeAngle:90,walkableHeight:20,walkableClimb:5,walkableRadius:0,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20,maxVertsPerPoly:6,detailSampleDist:6,detailSampleMaxError:1};o.k.then(t=>{ty=t,tg=new t.Vec3,tf=new t.Vec3});var tb=new m.Fc,tx=class{constructor(t=!1,e=!1){var i;this.usePhysics=t,this.isExport=e,this.onPointerDown=t=>{if(1!==n.a.length)return;let{raycaster:e,page:i}=this.eventContext;this.eventContext.updateRaycaster(t);let s=i.raycastWithClones(e);if(0!==s.length){if(this.gameControl){let t=tb.copy(this.gameControl.colliderWorldPosition);t.y-=this.gameControl.colliderHeight/2,this.gameControl.path=this.computePath(t,s[0].point)}this.eventContext.requestRender()}},this.traverseWithPhysics=(t,e)=>i=>{let n;if(i instanceof s.a){if(!i.objectForSample)return!0===i.object.dataPatched.physics.fusedBody&&"dynamic"===i.object.dataPatched.physics.rigidBody||void 0;if(i.objectForSample.dataPatched.physics.fusedBody)return;n=i.object}else if(i instanceof h.da)n=i.object;else if(n=i,!1===n.dataPatched.cloner?.disabled&&n.dataPatched.cloner?.hideBase&&!0!==n.dataPatched.physics?.fusedBody)return!0;if(e&&!n.userData.navmesh)return;let r=n.dataPatched;if(!r.visible&&!0!==r.physics?.enabled)return!0;i.updateMatrixWorldRigid();let a=(0,o.i)(r),l=n.userData.hasDestroy,c=n.userData.hasDrag,d=!1,p=!1;for(let t of r.events)!0!==t.data.disabled&&("GameControl"===t.data.type?d=!0:"Follow"===t.data.type&&(p=!0));if(d||a||p||l||c)return!0;if(this.usePhysics&&"dynamic"===r.physics?.rigidBody){if(this.usePhysics&&r.physics?.fusedBody)return!0}else if("geometry"in i&&i.geometry&&t.push((0,o.f)(i.geometry,i.matrixWorld)),this.usePhysics&&r.physics?.fusedBody)return i.traverseObject((e,i)=>{let n;if(0===i)return;if(e instanceof s.a){if(!e.objectForSample)return!0===e.object.dataPatched.physics.fusedBody&&"dynamic"===e.object.dataPatched.physics.rigidBody||void 0;if(e.objectForSample.dataPatched.physics.fusedBody)return;n=e.object}else if(e instanceof h.da)n=e.object;else if(n=e,e.dataPatched.cloner?.hideBase)return!0;let r=n.dataPatched;
1if(!r.visible&&!0!==r.physics?.enabled)return!0;"geometry"in e&&e.geometry&&t.push((0,o.f)(e.geometry,e.matrixWorld))}),!0},this.traverseNoPhysics=(t,e)=>i=>{let n;if(i instanceof s.a)return;let r=(n=i instanceof h.da?i.object:i).dataPatched;if("visibility"===r.physics.enabled?!r.visible:!r.physics.enabled)return!0;if(e&&!n.userData.navmesh)return;let a=i.geometry,l=!0===n.userData.hasDestroy,c=!0===n.userData.hasDrag;if((0,o.i)(r)||l||c||n.dataPatched.events.some(t=>!0!==t.data.disabled&&"GameControl"===t.data.type))return!0;a&&t.push((0,o.f)(a,i.matrixWorld))},this.navmeshWasm=ty,this.navMesh=new this.navmeshWasm.NavMesh,this._workerURL=URL.createObjectURL(new Blob([(e?(i=o.l??"https://cdn.spline.design/@splinetool/[email protected]/build/",`
2(async function() {
3	const [wasmImport, wasmBinary] = await Promise.all([
4		import('${i}' + 'navmesh.js'),
5		fetch('${i}' + 'navmesh.wasm').then((res) => res.arrayBuffer()),
6	]);
7	const wasmModule = wasmImport.default;
8	self.module = await wasmModule({ wasmBinary });
9	postMessage('ready');
10})();
11`):"\n(async function() {\n	const [wasmImport, wasmBinary] = await Promise.all([\n		import(self.location.origin + '/_libraries/navmesh.js'),\n		fetch(self.location.origin + '/_libraries/navmesh.wasm').then((res) => res.arrayBuffer()),\n	]);\n	const wasmModule = wasmImport.default;\n	self.module = await wasmModule({ wasmBinary });\n	postMessage('ready');\n})();\n")+"\n\nonmessage = function(messageEvent) {\n	const meshData = messageEvent.data;\n	const positions = meshData[0];\n	const offset = meshData[1];\n	const indices = meshData[2];\n	const indicesLength = meshData[3];\n	const parameters = meshData[4];\n\n	const module = self.module;\n	const rc = new module.rcConfig();\n	rc.cs = parameters.cs;\n	rc.ch = parameters.ch;\n	rc.borderSize = parameters.borderSize ? parameters.borderSize : 0;\n	rc.tileSize = parameters.tileSize ? parameters.tileSize : 0;\n	rc.walkableSlopeAngle = parameters.walkableSlopeAngle;\n	rc.walkableHeight = parameters.walkableHeight;\n	rc.walkableClimb = parameters.walkableClimb;\n	rc.walkableRadius = parameters.walkableRadius;\n	rc.maxEdgeLen = parameters.maxEdgeLen;\n	rc.maxSimplificationError = parameters.maxSimplificationError;\n	rc.minRegionArea = parameters.minRegionArea;\n	rc.mergeRegionArea = parameters.mergeRegionArea;\n	rc.maxVertsPerPoly = parameters.maxVertsPerPoly;\n	rc.detailSampleDist = parameters.detailSampleDist;\n	rc.detailSampleMaxError = parameters.detailSampleMaxError;\n\n	if (!self.navMesh) {\n		self.navMesh = new module.NavMesh();\n	}\n	self.navMesh.build(positions, offset, indices, indicesLength, rc);\n\n	const navmeshData = navMesh.getNavmeshData();\n	const arrView = new Uint8Array(module.HEAPU8.buffer, navmeshData.dataPointer, navmeshData.size);\n	const ret = new Uint8Array(navmeshData.size);\n	ret.set(arrView);\n	navMesh.freeNavmeshData(navmeshData);\n\n	postMessage(ret);\n}\n"])),this._worker=new Worker(this._workerURL),this.whenWorkerReady=new Promise(t=>{this._worker.addEventListener("message",()=>t(),{once:!0})})}init(t,e,i){this.gameControl=e,this.eventContext=i,this.setDefaultQueryExtent((new m.Fc).setScalar(t.ch*t.walkableRadius*1.2)),this._worker.onmessage=()=>{this.createNavMesh(i.page,t,t=>{this.buildFromNavmeshData(t.data)})},this.eventContext.renderer.domElement.addEventListener("pointerdown",this.onPointerDown)}createNavMesh(t,e,i){e.objects.forEach(e=>{let i=t.scene.find(e);i.traverseEntity(t=>{t.userData.navmesh=!0}),i.cloner?.traverseObject(t=>{t.userData.navmesh=!0})});let s=[],o=(this.usePhysics?this.traverseWithPhysics:this.traverseNoPhysics)(s,"custom"===e.zones);if(t.traverseChildren(o),e.objects.forEach(e=>{let i=t.scene.find(e);i.traverseEntity(t=>{t.userData.navmesh=void 0}),i.cloner?.traverseObject(t=>{t.userData.navmesh=void 0})}),0===s.length)return!1;let n=(0,h.a)(s),{positions:r,triIndices:a}=(0,h.K)(n.getAttribute("position"),n.getIndex());return this._worker.postMessage([r,r.length/3,a,a.length,{...tv,...e}]),this._worker.onmessage=i,!0}createDebugNavGeometry(){let t,e,i=this.navMesh.getDebugNavMesh(),s=i.getTriangleCount(),o=new Uint32Array(3*s),n=new Float32Array(3*s*3);for(t=0;t<3*s;t++)o[t]=t;for(t=0;t<s;t++)for(e=0;e<3;e++){let s=i.getTriangle(t).getPoint(e);n[9*t+3*e+0]=s.x,n[9*t+3*e+1]=s.y,n[9*t+3*e+2]=s.z}let r=new m.dd;return r.setIndex(new m.Zc(o,1)),r.setAttribute("position",new m.Zc(n,3)),r}getClosestPoint(t){return tg.x=t.x,tg.y=t.y,tg.z=t.z,this.navMesh.getClosestPoint(tg)}getClosestPointToRef(t,e){tg.x=t.x,tg.y=t.y,tg.z=t.z;let i=this.navMesh.getClosestPoint(tg);e.set(i.x,i.y,i.z)}getRandomPointAround(t,e){return tg.x=t.x,tg.y=t.y,tg.z=t.z,this.navMesh.getRandomPointAround(tg,e)}getRandomPointAroundToRef(t,e,i){tg.x=t.x,tg.y=t.y,tg.z=t.z;let s=this.navMesh.getRandomPointAround(tg,e);i.set(s.x,s.y,s.z)}moveAlong(t,e){return tg.x=t.x,tg.y=t.y,tg.z=t.z,tf.x=e.x,tf.y=e.y,tf.z=e.z,this.navMesh.moveAlong(tg,tf)}moveAlongToRef(t,e,i){return tg.x=t.x,tg.y=t.y,tg.z=t.z,tf.x=e.x,tf.y=e.y,tf.z=e.z,this.navMesh.moveAlong(tg,tf)}computePath(t,e){let i=this.getClosestPoint(e);if(tf.x=i.x,tf.y=i.y,tf.z=i.z,Math.sqrt(Math.pow(e.x-i.x,2)+Math.pow(e.y-i.y,2)+Math.pow(e.z-i.z,2))>this.getDefaultQueryExtent().y)return[];this.getClosestPoint(t);let s=this.navMesh.computePath(tg,tf),o=s.getPointCount(),n=[];for(let t=0;t<o;t++){let e=s.getPoint(t);n.push(new m.Fc(e.x,e.y,e.z))}return n}createCrowd(t,e){return new tw(this,t,e)}setDefaultQueryExtent(t){tg.x=t.x,tg.y=t.y,tg.z=t.z,this.navMesh.setDefaultQueryExtent(tg)}getDefaultQueryExtent(){return this.navMesh.getDefaultQueryExtent()}buildFromNavmeshData(t){let e=t.length*t.BYTES_PER_ELEMENT,i=this.navmeshWasm._malloc(e),s=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,i,e);s.set(t);let o=new this.navmeshWasm.NavmeshData;o.dataPointer=s.byteOffset,o.size=t.length,this.navMesh.buildFromNavmeshData(o),this.navmeshWasm._free(s.byteOffset)}getNavmeshData(){let t=this.navMesh.getNavmeshData(),e=new Uint8Array(this.navmeshWasm.HEAPU8.buffer,t.dataPointer,t.size),i=new Uint8Array(t.size);return i.set(e),this.navMesh.freeNavmeshData(t),i}getDefaultQueryExtentToRef(t){let e=this.navMesh.getDefaultQueryExtent();t.set(e.x,e.y,e.z)}dispose(){this.navMesh.destroy(),this._worker.terminate(),URL.revokeObjectURL(this._workerURL),this.eventContext?.renderer.domElement.removeEventListener("pointerdown",this.onPointerDown)}addCylinderObstacle(t,e,i){return tg.x=t.x,tg.y=t.y,tg.z=t.z,this.navMesh.addCylinderObstacle(tg,e,i)}addBoxObstacle(t,e,i){return tg.x=t.x,tg.y=t.y,tg.z=t.z,tf.x=e.x,tf.y=e.y,tf.z=e.z,this.navMesh.addB
11oxObstacle(tg,tf,i)}removeObstacle(t){this.navMesh.removeObstacle(t)}isSupported(){return void 0!==this.navmeshWasm}},tw=class{constructor(t,e,i){this.navmeshWasmWrapper=t,this.transforms=[],this.agents=[],this.reachRadii=[],this._agentDestinationArmed=[],this._agentDestination=[],this.crowd=new this.navmeshWasmWrapper.navmeshWasm.Crowd(e,i,this.navmeshWasmWrapper.navMesh.getNavMesh())}onReachTarget(t,e){}addAgent(t,e,i){let s=new this.navmeshWasmWrapper.navmeshWasm.dtCrowdAgentParams;s.radius=e.radius,s.height=e.height,s.maxAcceleration=e.maxAcceleration,s.maxSpeed=e.maxSpeed,s.collisionQueryRange=e.collisionQueryRange,s.pathOptimizationRange=e.pathOptimizationRange,s.separationWeight=e.separationWeight,s.updateFlags=7,s.obstacleAvoidanceType=0,s.queryFilterType=0,s.userData=0;let o=this.crowd.addAgent(new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z),s);return this.transforms.push(i),this.agents.push(o),this.reachRadii.push(e.reachRadius?e.reachRadius:e.radius),this._agentDestinationArmed.push(!1),this._agentDestination.push(new m.Fc(0,0,0)),o}getAgentPosition(t){return this.crowd.getAgentPosition(t)}getAgentPositionToRef(t,e){let i=this.crowd.getAgentPosition(t);e.set(i.x,i.y,i.z)}getAgentVelocity(t){return this.crowd.getAgentVelocity(t)}getAgentVelocityToRef(t,e){let i=this.crowd.getAgentVelocity(t);e.set(i.x,i.y,i.z)}getAgentNextTargetPath(t){return this.crowd.getAgentNextTargetPath(t)}getAgentNextTargetPathToRef(t,e){let i=this.crowd.getAgentNextTargetPath(t);e.set(i.x,i.y,i.z)}getAgentState(t){return this.crowd.getAgentState(t)}overOffmeshConnection(t){return this.crowd.overOffmeshConnection(t)}agentGoto(t,e){this.crowd.agentGoto(t,new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z));let i=this.agents.indexOf(t);i>-1&&(this._agentDestinationArmed[i]=!0,this._agentDestination[i].set(e.x,e.y,e.z))}agentTeleport(t,e){this.crowd.agentTeleport(t,new this.navmeshWasmWrapper.navmeshWasm.Vec3(e.x,e.y,e.z))}updateAgentParameters(t,e){let i=this.crowd.getAgentParameters(t);void 0!==e.radius&&(i.radius=e.radius),void 0!==e.height&&(i.height=e.height),void 0!==e.maxAcceleration&&(i.maxAcceleration=e.maxAcceleration),void 0!==e.maxSpeed&&(i.maxSpeed=e.maxSpeed),void 0!==e.collisionQueryRange&&(i.collisionQueryRange=e.collisionQueryRange),void 0!==e.pathOptimizationRange&&(i.pathOptimizationRange=e.pathOptimizationRange),void 0!==e.separationWeight&&(i.separationWeight=e.separationWeight),this.crowd.setAgentParameters(t,i)}removeAgent(t){this.crowd.removeAgent(t);let e=this.agents.indexOf(t);e>-1&&(this.agents.splice(e,1),this.transforms.splice(e,1),this.reachRadii.splice(e,1),this._agentDestinationArmed.splice(e,1),this._agentDestination.splice(e,1))}getAgents(){return this.agents}update(t){if(this.navmeshWasmWrapper.navMesh.update(),!(t<=.001)){{let e=Math.floor(t/(1/60));e>10&&(e=10),e<1&&(e=1);let i=t/e;for(let t=0;t<e;t++)this.crowd.update(i)}for(let t=0;t<this.agents.length;t++){let e=this.agents[t],i=this.getAgentPosition(e);if(this.transforms[t].copy(i),this._agentDestinationArmed[t]){let s=i.x-this._agentDestination[t].x,o=i.z-this._agentDestination[t].z,n=this.reachRadii[t],r=this._agentDestination[t].y-this.reachRadii[t],a=this._agentDestination[t].y+this.reachRadii[t],h=s*s+o*o;i.y>r&&i.y<a&&h<n*n&&(this.onReachTarget(e,this._agentDestination[t]),this._agentDestinationArmed[t]=!1)}}}}setDefaultQueryExtent(t){let e=new this.navmeshWasmWrapper.navmeshWasm.Vec3(t.x,t.y,t.z);this.crowd.setDefaultQueryExtent(e)}getDefaultQueryExtent(){return this.crowd.getDefaultQueryExtent()}getDefaultQueryExtentToRef(t){let e=this.crowd.getDefaultQueryExtent();t.set(e.x,e.y,e.z)}getCorners(t){let e,i=this.crowd.getCorners(t),s=i.getPointCount(),o=[];for(e=0;e<s;e++){let t=i.getPoint(e);o.push(new m.Fc(t.x,t.y,t.z))}return o}dispose(){this.crowd.destroy()}};(0,o.d)({setup:function(t){let{manager:e,camera:i}=t,s=!1,o=5,n=8,a=9,h="drag",l=e.page.data.publish.gameControlObject,c=null!==l?e.page.find(l):null,d=null;if(c)for(let t of c.data.events){if(t.data.disabled||"GameControl"!==t.data.type)continue;let i=c;for(;e.usePhysics&&null!==(i=i.parent)?.parent;)i.data.physics;t.data.collisionEnabled&&(e.needsCollisionDetection=!0),null===d&&(d=t.data)}if(c&&d&&(!0===c.data.visible||!0===c.data.physics.enabled)){s=s||d.camera===i.uuid||c.uuid===i.uuid;let l=new tu(c,t.renderer.domElement,d,t.eventContext.page.data.globalPhysics,e,c.uuid!==i.uuid&&d.camera===i.uuid,i,e.page,t.sharedAssets);e.gameControl=l,o=d.joystickPosLoc,n=d.joystickRotLoc,a=d.jumpTouchButtonLoc,h=d.rotByTouch,r.e&&d.touchControl&&(e.joystickToGameControls[o]="pos","walk"===d.moveMode&&(e.joystickToGameControls[a]="jmp"),"joystick"===h&&
11(e.joystickToGameControls[n]="rot"))}if(e.gameControl&&e.gameControl.data.navmesh.enabled){let i=e.gameControl.data;if(!e.navigationMeshWrapper){let s;e.navigationMeshWrapper=new tx(e.usePhysics,t.isExport),s=Math.floor((s="sphere"===i.collider.type?2*i.collider.radius:i.collider.height)/i.navmesh.ch-1),e.navigationMeshWrapper.init({...i.navmesh,walkableHeight:s},e.gameControl,t.eventContext)}}return s},createJoysticks:function(t,e,i){t.joystickToGameControls.forEach((s,o)=>{let n=document.body.appendChild(document.createElement("div")),[r,a,h]=t.eventManager.eventContext.publish.joystickSizeAndXYOffset[o],l=(e-5*r)/4+r,c={},d="jmp"===s,p=d?0:r;for(let t in o<10?(o<5?c.top=p/2:c.bottom=p/2,c.left=p/2+o%5*l):(10===o?c.left=p/2:c.right=p/2,c.top=i/2),c.top?c.top-=a[1]:c.bottom+=a[1],c.left?c.left+=a[0]:c.right-=a[0],c)c[t]+="px";if(d){let e=n.appendChild(document.createElement("div"));Object.assign(e.style,c,{position:"absolute",width:r+"px",height:r+"px",backgroundColor:`rgba(255,255,255,${.4*("show"===h)})`,zIndex:"9999",borderRadius:r+"px",border:"show"===h?"solid 2px rgba(0, 0, 0, .1)":"none",display:"flex",alignItems:"center",justifyContent:"center",touchAction:"none"});let i=r/16*6.4;
vendor: 1,296 bytes, lines 11-15
11return"show"===h&&(e.innerHTML=`
12						<svg width="${i}" height="${.4*r}" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
13							<path d="M2 10L8 4L14 10" stroke="black" stroke-opacity="40%" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
14						</svg>
15					`),e.addEventListener("pointerdown",()=>{t.gameControl.movementState.jump=1,t.requestRender()}),e.addEventListener("touchend",t=>t.preventDefault()),void(t.joysticks[o]=[void 0,n])}let m={zone:n,mode:"static",position:c,size:r};"hide"===h&&(m.restOpacity=0);let u=W.create(m);u.on("move",(e,i)=>{let o=t.gameControl;"pos"===s?i.force<.2?o.moveForce=0:(o.movementState.movePosZ=Math.sin(-i.angle.radian),o.movementState.movePosX=Math.cos(-i.angle.radian),i.force>1.2?o.movementState.run=1:o.movementState.run=0,i.force<.3?o.moveForce=(i.force-.2)/.1:o.moveForce=1):"rot"===s&&(i.force<.2?o.rotForce=0:(o.movementState.rotPosX=i.vector.y,o.movementState.rotPosY=-i.vector.x,i.force<.3?o.rotForce=(i.force-.2)/.1:o.rotForce=1)),t.requestRender()}),u.on("end",(e,i)=>{let o=t.gameControl;"pos"===s?(o.movementState.movePosZ=0,o.movementState.movePosX=0,o.moveForce=1):"rot"===s&&(o.movementState.rotPosX=0,o.movementState.rotPosY=0,o.rotForce=1)}),t.joysticks[o]=[u,n]})}}),(0,d.a)("game-controls")}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.