diff --git a/assets/index-cvg8TrrZ.js b/assets/index-4yE0i_lF.js similarity index 92% rename from assets/index-cvg8TrrZ.js rename to assets/index-4yE0i_lF.js index adb8e00..6f5af16 100644 --- a/assets/index-cvg8TrrZ.js +++ b/assets/index-4yE0i_lF.js @@ -815,13 +815,13 @@ If in Firefox, visit about:config * Ensure webgl.force-enabled = true * Ensure layers.acceleration.force-enabled = true -Read more about this issue at https://excaliburjs.com/docs/performance`),i&&this._toaster.toast("Excalibur is encountering performance issues. It's possible that your browser doesn't have hardware acceleration enabled. Visit [LINK] for more information and potential solutions.","https://excaliburjs.com/docs/performance"),this.useCanvas2DFallback(),this.emit("fallbackgraphicscontext",this.graphicsContext))}}useCanvas2DFallback(){var t,e,i;const s=this.canvas.cloneNode(!1);this.canvas.parentNode.replaceChild(s,this.canvas),this.canvas=s;const n={...this._originalOptions,antialiasing:this.getAntialiasing()},o=this._originalDisplayMode;this.graphicsContext=new qi({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:n.antialiasing,backgroundColor:n.backgroundColor,snapToPixel:n.snapToPixel,useDrawSorting:n.useDrawSorting}),this.screen&&this.screen.dispose(),this.screen=new Qs({canvas:this.canvas,context:this.graphicsContext,antialiasing:(t=n.antialiasing)!==null&&t!==void 0?t:!0,browser:this.browser,viewport:(e=n.viewport)!==null&&e!==void 0?e:n.width&&n.height?{width:n.width,height:n.height}:Hs.SVGA,resolution:n.resolution,displayMode:o,pixelRatio:n.suppressHiDPIScaling?1:(i=n.pixelRatio)!==null&&i!==void 0?i:null}),this.screen.setCurrentCamera(this.currentScene.camera),this.input.pointers.detach();const h=n&&n.pointerScope===ze.Document?document:this.canvas;this.input.pointers=this.input.pointers.recreate(h,this),this.input.pointers.init()}getWorldBounds(){return this.screen.getWorldBounds()}get timescale(){return this._timescale}set timescale(t){if(t<=0){V.getInstance().error("Cannot set engine.timescale to a value of 0 or less than 0.");return}this._timescale=t}addTimer(t){return this.currentScene.addTimer(t)}removeTimer(t){return this.currentScene.removeTimer(t)}addScene(t,e){this.scenes[t]&&this._logger.warn("Scene",t,"already exists overwriting"),this.scenes[t]=e}removeScene(t){if(t instanceof Ui)for(const e in this.scenes)this.scenes.hasOwnProperty(e)&&this.scenes[e]===t&&delete this.scenes[e];typeof t=="string"&&delete this.scenes[t]}add(t){if(arguments.length===2){this.addScene(arguments[0],arguments[1]);return}this._deferredGoTo&&this.scenes[this._deferredGoTo]?this.scenes[this._deferredGoTo].add(t):this.currentScene.add(t)}remove(t){t instanceof Rt&&this.currentScene.remove(t),t instanceof Ui&&this.removeScene(t),typeof t=="string"&&this.removeScene(t)}goToScene(t,e){if(!this.isInitialized){this._deferredGoTo=t;return}if(this.scenes[t]){const i=this.currentScene,s=this.scenes[t];if(this._logger.debug("Going to scene:",t),this.currentScene.isInitialized){const o={engine:this,previousScene:i,nextScene:s};this.currentScene._deactivate.apply(this.currentScene,[o,s]),this.currentScene.events.emit("deactivate",new Cs(o,this.currentScene))}this.currentScene=s,this.screen.setCurrentCamera(s.camera),this.currentScene._initialize(this);const n={engine:this,previousScene:i,nextScene:s,data:e};this.currentScene._activate.apply(this.currentScene,[n,s]),this.currentScene.events.emit("activate",new Es(n,this.currentScene))}else this._logger.error("Scene",t,"does not exist!")}screenToWorldCoordinates(t){return this.screen.screenToWorldCoordinates(t)}worldToScreenCoordinates(t){return this.screen.worldToScreenCoordinates(t)}_initialize(t){var e,i,s,n;this.pageScrollPreventionMode=t.scrollPreventionMode;const o=t&&t.pointerScope===ze.Document?document:this.canvas;this.input={keyboard:new Ms,pointers:new Gi(o,this),gamepads:new Ci},this.input.keyboard.init({grabWindowFocus:(i=(e=this._originalOptions)===null||e===void 0?void 0:e.grabWindowFocus)!==null&&i!==void 0?i:!0}),this.input.pointers.init({grabWindowFocus:(n=(s=this._originalOptions)===null||s===void 0?void 0:s.grabWindowFocus)!==null&&n!==void 0?n:!0}),this.input.gamepads.init(),this.inputMapper=new Kr(this.input),this.browser.document.on("visibilitychange",()=>{document.visibilityState==="hidden"?(this.events.emit("hidden",new Re(this)),this._logger.debug("Window hidden")):document.visibilityState==="visible"&&(this.events.emit("visible",new Lt(this)),this._logger.debug("Window visible"))}),!this.canvasElementId&&!t.canvasElement&&document.body.appendChild(this.canvas)}onInitialize(t){}setAntialiasing(t){this.screen.antialiasing=t}getAntialiasing(){return this.screen.antialiasing}get isInitialized(){return this._isInitialized}_overrideInitialize(t){if(!this.isInitialized)if(this.onInitialize(t),this.events.emit("initialize",new si(t,this)),this._isInitialized=!0,this._deferredGoTo){const e=this._deferredGoTo;this._deferredGoTo=null,this.goToScene(e)}else this.goToScene("root")}_update(t){if(!this.ready){this._loader.update(this,t),this.inputMapper.execute(),this.input.keyboard.update(),this.input.gamepads.update();return}this._preupdate(t),this.currentScene.update(this,t),this.graphicsContext.updatePostProcessors(t),this._postupdate(t),this.inputMapper.execute(),this.input.keyboard.update(),this.input.gamepads.update()}_preupdate(t){this.emit("preupdate",new ot(this,t,this)),this.onPreUpdate(this,t)}onPreUpdate(t,e){}_postupdate(t){this.emit("postupdate",new gt(this,t,this)),this.onPostUpdate(this,t)}onPostUpdate(t,e){}_draw(t){var e;if(this.graphicsContext.beginDrawLifecycle(),this.graphicsContext.clear(),this._predraw(this.graphicsContext,t),!this._isReady){this._loader.canvas.draw(this.graphicsContext,0,0),this.graphicsContext.flush();return}this.graphicsContext.backgroundColor=(e=this.currentScene.backgroundColor)!==null&&e!==void 0?e:this.backgroundColor,this.currentScene.draw(this.graphicsContext,t),this._postdraw(this.graphicsContext,t),this.graphicsContext.flush(),this.graphicsContext.endDrawLifecycle(),this._checkForScreenShots()}_predraw(t,e){this.emit("predraw",new et(t,e,this)),this.onPreDraw(t,e)}onPreDraw(t,e){}_postdraw(t,e){this.emit("postdraw",new K(t,e,this)),this.onPostDraw(t,e)}onPostDraw(t,e){}showDebug(t){this._isDebug=t}toggleDebug(){return this._isDebug=!this._isDebug,this._isDebug}get loadingComplete(){return this._loadingComplete}get ready(){return this._isReady}isReady(){return this._isReadyPromise}async start(t){if(!this._compatible)throw new Error("Excalibur is incompatible with your browser");return t&&(this.screen.pushResolutionAndViewport(),this.screen.resolution=this.screen.viewport,this.screen.applyResolutionAndViewport(),this._loader=t,this._loader.suppressPlayButton=this._suppressPlayButton||this._loader.suppressPlayButton,this._loader.wireEngine(this)),this._logger.debug("Starting game clock..."),this.browser.resume(),this.clock.start(),this._logger.debug("Game clock started"),t&&(await this.load(this._loader),this._loadingComplete=!0,this.screen.popResolutionAndViewport(),this.screen.applyResolutionAndViewport()),this._loadingComplete=!0,this._overrideInitialize(this),this._isReady=!0,this._isReadyResolve(),this.emit("start",new H(this)),this._isReadyPromise}_mainloop(t){this.emit("preframe",new Pe(this,this.stats.prevFrame));const e=t*this.timescale;this.currentFrameElapsedMs=e;const i=this.stats.prevFrame.id+1;this.stats.currFrame.reset(),this.stats.currFrame.id=i,this.stats.currFrame.delta=e,this.stats.currFrame.fps=this.clock.fpsSampler.fps,vt.clear();const s=this.clock.now(),n=1e3/this.fixedUpdateFps;if(this.fixedUpdateFps)for(this._lagMs+=e;this._lagMs>=n;)this._update(n),this._lagMs-=n;else this._update(e);const o=this.clock.now();this.currentFrameLagMs=this._lagMs,this._draw(e);const h=this.clock.now();this.stats.currFrame.duration.update=o-s,this.stats.currFrame.duration.draw=h-o,this.stats.currFrame.graphics.drawnImages=vt.DrawnImagesCount,this.stats.currFrame.graphics.drawCalls=vt.DrawCallCount,this.emit("postframe",new ii(this,this.stats.currFrame)),this.stats.prevFrame.reset(this.stats.currFrame),this._monitorPerformanceThresholdAndTriggerFallback()}stop(){this.clock.isRunning()&&(this.emit("stop",new $(this)),this.browser.pause(),this.clock.stop(),this._logger.debug("Game stopped"))}isRunning(){return this.clock.isRunning()}screenshot(t=!1){return new Promise(i=>{this._screenShotRequests.push({preserveHiDPIResolution:t,resolve:i})})}_checkForScreenShots(){for(const t of this._screenShotRequests){const e=t.preserveHiDPIResolution?this.canvas.width:this.screen.resolution.width,i=t.preserveHiDPIResolution?this.canvas.height:this.screen.resolution.height,s=document.createElement("canvas");s.width=e,s.height=i;const n=s.getContext("2d");n.imageSmoothingEnabled=this.screen.antialiasing,n.drawImage(this.canvas,0,0,e,i);const o=new Image,h=s.toDataURL("image/png");o.src=h,t.resolve(o)}this._screenShotRequests.length=0}async load(t){try{await t.load()}catch(e){this._logger.error("Error loading resources, things may not behave properly",e),await Promise.resolve()}}}wi._DEFAULT_ENGINE_OPTIONS={width:0,height:0,enableCanvasTransparency:!0,useDrawSorting:!0,configurePerformanceCanvas2DFallback:{allow:!1,showPlayerMessage:!1,threshold:{fps:20,numberOfFrames:100}},canvasElementId:"",canvasElement:void 0,snapToPixel:!1,pointerScope:ze.Canvas,suppressConsoleBootMessage:null,suppressMinimumBrowserFeatureDetection:null,suppressHiDPIScaling:null,suppressPlayButton:null,grabWindowFocus:!0,scrollPreventionMode:Oe.Canvas,backgroundColor:L.fromHex("#2185d0")};class Ea{constructor(){this._handlers={},this._wiredEventDispatchers=[],this._deferedHandlerRemovals=[]}clear(){this._handlers={},this._wiredEventDispatchers=[]}_processDeferredHandlerRemovals(){for(const t of this._deferedHandlerRemovals)this._removeHandler(t.name,t.handler);this._deferedHandlerRemovals.length=0}emit(t,e){if(this._processDeferredHandlerRemovals(),!t)return;t=t.toLowerCase(),(typeof e>"u"||e===null)&&(e=new P);let i,s;if(this._handlers[t])for(i=0,s=this._handlers[t].length,i;i-1&&this._handlers[t].splice(s,1)}}once(t,e){this._processDeferredHandlerRemovals();const i=s=>{const n=s||new P;this.off(t,i),e(n)};this.on(t,i)}wire(t){t._wiredEventDispatchers.push(this)}unwire(t){const e=t._wiredEventDispatchers.indexOf(this);e>-1&&t._wiredEventDispatchers.splice(e,1)}}class Ca extends Kt{get font(){return this._font}set font(t){this._font=t,this._text.font=t}get text(){return this._text.text}set text(t){this._text.text=t}get color(){return this._text.color}set color(t){this._text&&(this._text.color=t)}get opacity(){return this._text.opacity}set opacity(t){this._text.opacity=t}get spriteFont(){return this._spriteFont}set spriteFont(t){t&&(this._spriteFont=t,this._text.font=this._spriteFont)}constructor(t){super(t),this._font=new mi,this._text=new Mi({text:"",font:this._font});const{text:e,pos:i,x:s,y:n,spriteFont:o,font:h,color:l}=t;this.pos=i??(s&&n?R(s,n):this.pos),this.text=e??this.text,this.font=h??this.font,this.spriteFont=o??this.spriteFont,this._text.color=l??this.color;const f=this.get(Ft);f.anchor=A.Zero,f.use(this._text)}_initialize(t){super._initialize(t)}getTextWidth(){return this._text.width}}class Xr extends Rt{getGraphics(){return this._graphics}addGraphic(t,e){this._graphics.push(t),this._gfx.visible=this.map.visible,this._gfx.opacity=this.map.opacity,e!=null&&e.offset&&(this._gfx.offset=e.offset),this._gfx.localBounds=this._recalculateBounds()}_recalculateBounds(){let t=this._tileBounds.clone();for(const e of this._graphics){const i=R(this.map.graphicsOffset.x-this.map.tileWidth/2,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t=t.combine(e.localBounds.translate(i))}return t}removeGraphic(t){const e=this._graphics.indexOf(t);e>-1&&this._graphics.splice(e,1),this._gfx.localBounds=this._recalculateBounds()}clearGraphics(){this._graphics.length=0,this._gfx.visible=!1,this._gfx.localBounds=this._recalculateBounds()}getColliders(){return this._colliders}addCollider(t){this._colliders.push(t),this.map.flagCollidersDirty()}removeCollider(t){const e=this._colliders.indexOf(t);e>-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}get pos(){return this.map.tileToWorld(R(this.x,this.y))}get center(){return this.pos.add(R(0,this.map.tileHeight/2))}constructor(t,e,i,s){super([new Q,new Ft({offset:i??A.Zero,onPostDraw:(w,y)=>this.draw(w,y)}),new xs(s)]),this.solid=!1,this._tileBounds=new J,this._graphics=[],this._colliders=[],this.data=new Map,this.x=t,this.y=e,this.map=s,this._transform=this.get(Q),this._isometricEntityComponent=this.get(xs);const n=this.map.tileWidth/2,o=this.map.tileHeight/2,h=(this.x-this.y)*n,l=(this.x+this.y)*o;this._transform.pos=R(h,l),this._isometricEntityComponent.elevation=s.elevation,this._gfx=this.get(Ft),this._gfx.visible=!1;const f=this.map.tileWidth,m=this.map.tileHeight,v=R(0,this.map.renderFromTopOfGraphic?m:0);this._gfx.localBounds=this._tileBounds=new J({left:-f/2,top:-m,right:f/2,bottom:m}).translate(v)}draw(t,e){const i=this.map.tileWidth/2;t.save(),t.translate(-i,0);for(const s of this._graphics)s.draw(t,this.map.graphicsOffset.x,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:s.height-this.map.tileHeight));t.restore()}}class Sa extends Rt{constructor(t){super([new Q,new it({type:q.Fixed}),new Ct,new gs((m,v)=>this.debug(m,v),!1)],t.name),this.elevation=0,this.visible=!0,this.opacity=1,this.renderFromTopOfGraphic=!1,this.graphicsOffset=R(0,0),this._collidersDirty=!1,this._originalOffsets=new WeakMap;const{pos:e,tileWidth:i,tileHeight:s,columns:n,rows:o,renderFromTopOfGraphic:h,graphicsOffset:l,elevation:f}=t;this.transform=this.get(Q),e&&(this.transform.pos=e),this.collider=this.get(Ct),this.collider&&this.collider.set(this._composite=new kt([])),this.renderFromTopOfGraphic=h??this.renderFromTopOfGraphic,this.graphicsOffset=l??this.graphicsOffset,this.elevation=f??this.elevation,this.tileWidth=i,this.tileHeight=s,this.columns=n,this.rows=o,this.tiles=new Array(n*o);for(let m=0;m=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=this.worldToTile(t);return this.getTile(e.x,e.y)}_getMaxZIndex(){let t=Number.NEGATIVE_INFINITY;for(const e of this.tiles){const i=e.get(Q).z;i>t&&(t=i)}return t}debug(t,e){const{showAll:i,showPosition:s,positionColor:n,positionSize:o,showGrid:h,gridColor:l,gridWidth:f,showColliderGeometry:m}=e.isometric,{geometryColor:v,geometryLineWidth:w,geometryPointSize:y}=e.collider;if(t.save(),t.z=this._getMaxZIndex()+.5,i||h){for(let b=0;be.isComplete(t))}reset(){this._actions.forEach(t=>t.reset())}stop(){this._actions.forEach(t=>t.stop())}}function Ta(r){return!!r._initialize}function Pa(r){return!!r.onInitialize}function Ra(r){return!!r._preupdate}function Ba(r){return!!r.onPreUpdate}function ka(r){return!!r.onPostUpdate}function Ma(r){return!!r.onPostUpdate}function Da(r){return!!r.onPreDraw}function Fa(r){return!!r.onPostDraw}class Oa{constructor(t,e=L.Magenta,i=!1){this.path=t,this.color=e,this._stream=null,this._gif=null,this._textures=[],this._animation=null,this._transparentColor=null,this._resource=new Ki(t,"arraybuffer",i),this._transparentColor=e}get bustCache(){return this._resource.bustCache}set bustCache(t){this._resource.bustCache=t}async load(){const t=await this._resource.load();this._stream=new qr(t),this._gif=new $r(this._stream,this._transparentColor);const e=this._gif.images.map(i=>new Ls(i.src,!1));return await Promise.all(e.map(i=>i.load())),this.data=this._textures=e}isLoaded(){return!!this.data}toSprite(t=0){return this._textures[t].toSprite()}toSpriteSheet(){const t=this._textures.map(e=>e.toSprite());return new Qe({sprites:t})}toAnimation(t){const e=this.toSpriteSheet(),i=e.sprites.length;return this._animation=_e.fromSpriteSheet(e,Sn(0,i),t),this._animation}get readCheckBytes(){return this._gif.checkBytes}}const As=r=>r.reduce(function(t,e){return t*2+e},0),dn=r=>{const t=[];for(let e=7;e>=0;e--)t.push(!!(r&1<{if(this.position>=this.data.byteLength)throw new Error("Attempted to read past end of stream.");return this.data[this.position++]},this.readBytes=e=>{const i=[];for(let s=0;s{let i="";for(let s=0;s{const e=this.readBytes(2);return(e[1]<<8)+e[0]},this.data=new Uint8Array(t),this.len=this.data.byteLength,this.len===0)throw new Error("No data loaded from file")}}const Ua=function(r,t){let e=0;const i=function(w){let y=0;for(let b=0;b>3)&1<<(e&7)&&(y|=1<{const s=[];for(let n=0;n{const f=l.toString(16);return f.length===1?"0"+f:f}).join("");s.push(h)}return s},this.readSubBlocks=()=>{let i,s;s="";do i=this._st.readByte(),s+=this._st.read(i);while(i!==0);return s},this.parseHeader=()=>{const i={sig:null,ver:null,width:null,height:null,colorRes:null,globalColorTableSize:null,gctFlag:null,sorted:null,globalColorTable:[],bgColor:null,pixelAspectRatio:null};if(i.sig=this._st.read(3),i.ver=this._st.read(3),i.sig!=="GIF")throw new Error("Not a GIF file.");i.width=this._st.readUnsigned(),i.height=this._st.readUnsigned();const s=dn(this._st.readByte());i.gctFlag=s.shift(),i.colorRes=As(s.splice(0,3)),i.sorted=s.shift(),i.globalColorTableSize=As(s.splice(0,3)),i.bgColor=this._st.readByte(),i.pixelAspectRatio=this._st.readByte(),i.gctFlag&&(i.globalColorTable=this.parseColorTable(1<{const s=f=>{this.checkBytes.push(this._st.readByte());const m=dn(this._st.readByte());f.reserved=m.splice(0,3),f.disposalMethod=As(m.splice(0,3)),f.userInput=m.shift(),f.transparencyGiven=m.shift(),f.delayTime=this._st.readUnsigned(),f.transparencyIndex=this._st.readByte(),f.terminator=this._st.readByte(),this._handler.gce&&this._handler.gce(f)&&this.checkBytes.push(this._handler.gce)},n=f=>{f.comment=this.readSubBlocks(),this._handler.com&&this._handler.com(f)&&this.checkBytes.push(this._handler.com)},o=f=>{this.checkBytes.push(this._st.readByte()),f.ptHeader=this._st.readBytes(12),f.ptData=this.readSubBlocks(),this._handler.pte&&this._handler.pte(f)&&this.checkBytes.push(this._handler.pte)},h=f=>{const m=w=>{this.checkBytes.push(this._st.readByte()),w.unknown=this._st.readByte(),w.iterations=this._st.readUnsigned(),w.terminator=this._st.readByte(),this._handler.app&&this._handler.app.NETSCAPE&&this._handler.app.NETSCAPE(w)&&this.checkBytes.push(this._handler.app)},v=w=>{w.appData=this.readSubBlocks(),this._handler.app&&this._handler.app[w.identifier]&&this._handler.app[w.identifier](w)&&this.checkBytes.push(this._handler.app[w.identifier])};switch(this.checkBytes.push(this._st.readByte()),f.identifier=this._st.read(8),f.authCode=this._st.read(3),f.identifier){case"NETSCAPE":m(f);break;default:v(f);break}},l=f=>{f.data=this.readSubBlocks(),this._handler.unknown&&this._handler.unknown(f)&&this.checkBytes.push(this._handler.unknown)};switch(i.label=this._st.readByte(),i.label){case 249:i.extType="gce",s(i);break;case 254:i.extType="com",n(i);break;case 1:i.extType="pte",o(i);break;case 255:i.extType="app",h(i);break;default:i.extType="unknown",l(i);break}},this.parseImg=i=>{const s=(h,l)=>{const f=new Array(h.length),m=h.length/l,v=(M,D)=>{const S=h.slice(D*l,(D+1)*l);f.splice.apply(f,[M*l,l].concat(S))},w=[0,4,2,1],y=[8,8,4,2];let b=0;for(let M=0;M<4;M++)for(let D=w[M];D{const i={sentinel:this._st.readByte(),type:""};switch(String.fromCharCode(i.sentinel)){case"!":i.type="ext",this.parseExt(i);break;case",":i.type="img",this.parseImg(i);break;case";":i.type="eof",this._handler.eof&&this._handler.eof(i)&&this.checkBytes.push(this._handler.eof);break;default:throw new Error("Unknown block: 0x"+i.sentinel.toString(16))}i.type!=="eof"&&this.parseBlock()},this.arrayToImage=i=>{let s=0;const n=document.createElement("canvas");n.id=s.toString(),n.width=i.width,n.height=i.height,s++;const o=n.getContext("2d"),h=1;let l=0,f=0;for(let v=0;vMath.max(s.x,i),0)-e.x,this.height=this._points.reduce((i,s)=>Math.max(s.y,i),0)-e.y,this.flagDirty()}get minPoint(){const t=this._points.reduce((i,s)=>Math.min(s.x,i),1/0),e=this._points.reduce((i,s)=>Math.min(s.y,i),1/0);return R(t,e)}constructor(t){super(t),this.points=t.points,this.filtering=Ot.Blended,this.rasterize()}clone(){return new fn({points:this.points.map(t=>t.clone()),...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){if(this.points&&this.points.length){t.beginPath();const e=this.minPoint.negate(),i=this.points[0].add(e);t.moveTo(i.x,i.y),this.points.forEach(s=>{t.lineTo(s.x+e.x,s.y+e.y)}),t.lineTo(i.x,i.y),t.closePath(),this.color&&t.fill(),this.strokeColor&&t.stroke()}}}class La{constructor(){this._queue=[]}get length(){return this._queue.length}enqueue(){const t=new Ge;return this._queue.push(t),t.promise}dequeue(t){this._queue.shift().resolve(t)}}class za{constructor(t){this._count=t,this._waitQueue=new La}get count(){return this._count}get waiting(){return this._waitQueue.length}async enter(){return this._count!==0?(this._count--,Promise.resolve()):this._waitQueue.enqueue()}exit(t=1){if(t!==0){for(;t!==0&&this._waitQueue.length!==0;)this._waitQueue.dequeue(null),t--;this._count+=t}}}const gn="0.29.0-alpha.4+6f6d7bb";p()})();_.y1j;_.fWn;_.Ia8;_.rqv;_.zH6;_.hLI;_.yyv;_.tX5;var Wi=_.vtX;_.r7K;_.lCh;_.cE4;_.fwF;_.sce;_.AQ6;_._c7;_.KUs;_.Ajp;_.dkO;_.RDh;_._H9;_.mxs;_.OmD;_.kBf;_.C4F;_.NQt;_.JjN;_.EK_;_.V1s;_.xHm;_.Xz7;_.Cdc;_.FKn;_.SUY;_.ab2;_.GfZ;_.YMS;_.oyv;_.aUb;_.SdD;_.JUv;_.jEj;_.TFq;_.HDU;_.R_y;_.ydN;_.t50;_.s$$;var wn=_.v2G,vn=_.Ilk;_.s9i;_.dxL;_.LLX;_.wA2;_.R_p;_.IQ$;_.I5F;_.X8$;_.FR6;_.U8o;_.kbG;_.iS_;_.cGG;_.RPN;_.skb;_.SLU;_.RdJ;_.cNu;_.gU7;_.LSk;_.Nmp;var Ya=_.d1Y;_.xrL;_.sRW;_.cmV;_.qWz;_.N0Q;_.q8b;_.ynB;_.jT9;var Wa=_.wAz,Za=_.D4V;_.NLr;_.N6H;_.W1A;_.JHW;_.ZZ$;_.v2K;_.pBf;_.vpe;_.GMl;_.zW2;_.B0K;_.Nv7;_.C_p;_.MUA;_.xqU;_.pTp;_.vUK;_.j9l;_.Zxw;_.v51;_.Hdx;_.Z$d;_.iqV;_.o$7;_.olM;_.Zm$;_.$QH;_.i78;_.nJg;_.h6u;_.hts;_.j88;_.VME;_.fy2;_.nt;_.Ukr;_.zsu;_.oA6;_.TVh;_.TwZ;_.GTT;_.xxj;_.XdK;_.Jmb;var oe=_.cXo;_.Dm5;_.IIB;_.ebW;_.zI0;_.LYD;_.cEG;_.SEl;_.t9V;_.ez5;_.N1d;var qe=_.R8U;_.SKZ;_.__J;_.RI$;_.x12;_.ccz;var Ja=_.aNw;_.XrL;_.xwn;_.dNK;_.ini;_.YdH;_.F5T;_.y3G;_.l57;_.xn0;_.t2V;_.uxB;_.cpd;_.fiy;_.$XZ;_.UG6;_.uqK;_.STE;_.y$z;_.mAD;_.sOq;_.hUw;_._0G;_.Sqs;_.hpZ;var ja=_.Vol;_.vYX;_.wIZ;_.cBi;_.c30;_.MPV;_.RFv;_.Ux6;_.rxy;_.I$c;_.kfC;_.VjY;_.mgq;_.YVA;_.Kgp;_.HH$;_.M_d;_.rgh;_.Ra6;_.KhR;_.gvQ;_.BS5;_.xhz;_.xOq;_.a9j;_.bHk;_.CgK;_.cEd;_.cuY;_.kvE;_.SBu;_.PsT;_.AE_;_.ctO;_.OLH;_.kky;_.nSF;_.zHn;_.zwx;_.AeJ;_.hLz;_.D9g;_.wA;_.jhr;_.GVs;_._zO;_.LXZ;_.w6$;_.mhV;_.MOD;_.kwd;_.Lmr;var An=_.xsS;_.K5l;_.lLr;_.Z$r;_.IXb;_.Xsu;_.SGH;_.SMj;_.L34;_.exe;_.bnF;_.MFA;var Ni=_.$uU;_.Sap;_.jyi;_.E03;_.V6q;_.rg2;_.DVW;_.nVo;_.F6N;_.xP7;_.Odq;_.Zif;_.ZGJ;_.MJk;_.xvT;_.PHM;_.dpR;_.n9L;_.KwO;_.SxM;var Va=_.B7y;_.x7r;_.wx7;_.Uvn;_.OFT;_.xzN;_.CcZ;_.M5Z;_.ZrN;_.OWs;_.dF9;_.oZy;_.rD2;_.VHo;_.ohE;_.R$E;_.xQN;_.AdJ;_.q3I;_.Pab;_.uZ5;_.McK;_.F9c;_.k0b;_.hnT;_.RSJ;_.Mku;_.h90;_.rms;_.ErP;_.aVg;_.lPc;_.Z8E;_._N2;_.yFn;_.lNv;_.cu9;_.MZQ;_.FUM;_.BxR;_.vdf;_.iaL;_.w6H;_.Q4c;_.Xxe;_.Uxb;_.Yr5;var Ut=_.Bhw;_.yOA;const Ka="data:image/png;base64,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",Xa="data:image/png;base64,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",qa="data:image/png;base64,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",$a="data:image/png;base64,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",th="data:image/png;base64,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",eh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD2SURBVHgB7VGxDoIwEL0qJO3A4szAD7ibuPgpfpp/YqJhdvAHGFiZSIRFzr5LSwDdYNDYl5B7d+/1lbZEAQEBAQEBXwp12+0OtCCiaL0+04JY0cIIgf8QGHnCRCeaAUV0lHrf7xlkm+eKZsDn/NCjpGlqbDFZlml8lms3AxcN/WQ2rIL+Ucqy3KAWReHvkquqAsfdKOchY4z0toqpaRpynnEguNZahLZtyXLlzLLA9pj3M7aAz232MbA3YLGfeeI06bGZq5j3JxgFOnFoett9EO5DeOKnqGO+QIzj+IFAHMv23SBMJUkif1fX9XQThTDoT+arFfgF3rFtVgjtI8cAAAAASUVORK5CYII=",ih="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEASURBVHgB7VExjoMwEJzlQLILmqspeMXV94A8IveHk+4N94v7wz0gUlJE+QUFLRVSoAmOxzEISLpQJIpHQjueHc/aGAgICAgICHhQyOp7/4kFEeMt2mBBRFgYIfAVAuOeCOQPd8DArCeB/78fX7gDq5/DmvWJHiXLMm2LzvNc8bNceY3c9bieaePqMPzDsizfWYuiEC+ZqqrIDfhmFw+01m5tqzM1TQPvmQaSK6Vco21bWC7e7DbYNfVBMxb0+WE3AwcDN/daT3zPrTnMV+rDDSaBvjk2XU0fhfchZuZHbE++BTpJkuTIQF7L6t0oTNI0daer63o+RBjGvulOO0hkzks6bRNn/MavAAAAAElFTkSuQmCC",sh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADuSURBVHgB7ZXBCoJAEIZntkCP9gR5DgI7CKIv26N0UbwZBF1bn6A6hrrT7upC52YNAr/Lvxc/ZhlnFi9FQeARAZ5ZhItwES7C3wjRHdxe3Jclwhe47+e7MhJJk9c83wKD+SokxIfJV9dtgMFnhVYIQRABAyts0jTRkej2nqHvJTCwwlUYxjoiRdQe6loCg/HKwzBeE/EOTKyQiKxQ/zpPYDJWiGiFyjWGLfTIKCSKTeguS2AyT4VCCDu/gxASmPzJxsapKYFSN2AyT4V6dcUmd1XVAhP/FTZZFk9n9thZoTugJ+F6ypNijp1+Q48m359nP16rOGJzAAAAAElFTkSuQmCC",nh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD9SURBVHgB7ZQxjsIwEEX/2NFuy55gfQREg7gBQlTcBYFEjQS34ARUFJQ0CNEgbkA4AVCBkPBgOwR6xkEUeUW+U+Rp4vGY2r01IyIKkSmFpbAUlsLPCClf5PfibFwnvEH+fXG/zODUZ2ew+YeA4iokpqPPy/X8BwGvCikTKq0qEJD4R6u7rLpdrDJoewNSCAgVKkqMC1eZ3c9HjRQCgtCyrWQv6gAhQaiJg5BhTxCiMhFljWA+Qkgx59ANofFpWdbhpzAmQUikw/wq/a0VRhe682d8/ujfHYQU1BSQ8Tkd1vYQEr/CZn9lHmvx2AVhvqBIwuShW0B4sbo+THzeAZmHOzUW9OpSAAAAAElFTkSuQmCC",rh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAF0SURBVHgB7ZZNToNAFMffszSBRRPjugsuYKK7BrqwR/AEegOPoEfwBvYGHqGJpt3WSA/Agi2JCYmwUJ7vjQOZIrWQdkPCP2ne5/ymA8MAQK9evbqiwPPuN553UVc7gZba+P4TID7kiM+tgOvJxK2DEcAtux/fRNeNgTLQGgzW5rJM2BfR7HK1eqsba9Ulc+BFAZwS4oKhM47umsBEuKvw7vtzLt4Yqb2wf4EVaCNYIwXT6eN6xxbpppD32xUcURbvtwUcUa0fvR7YA43ji4+nORwg/D3eAAPfJ3HOl0uEA1RwOnRTxuOxw8ZxXdeWH/u2zomvahJXcqZVKm9KFEVnYsMwLK4lxXEsvlwb1D3gOI6K2aqmNE1B92wDxbdtWxWyLAP2UTerARxLvswRS/r0ZLXAskEGF7nC0TUVy2TaSr5cwRZQF82mP7Mb8AJClX6wcqIXKQ6Hw08ByrJAvZpLGI5GI/XvkiSpToICkzp/SbxygX4A3V2uBtBE7m4AAAAASUVORK5CYII=",oh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGBSURBVHgB7ZU7TsNAEIZnFluyi0iIOoWPQEVDQzpE3HACwgloIKGDFtFwA3IDCiTaSCAUHgUcIUXaSEiRiItkl5llbTbGAVtJY8m/FM3sP7PfevOYAFSqVKksCtuvZ3snj5tZNQEF1ey8XAPKcxTOTSHg7mk/yIIhqBalH0pO93MDeaOjxJt9LRsm5bRxd7n9nrXXyTJBzRBQrAvh9AjaQOEe5YGxcFGh2e53EcWBZf0L+xOYguaC5VLYebpa9BUppzA87u/ACuXAmujBClX4p1cBK6A1vmhedWEJqe/x9gO8vdg6hCUUdp5bHEv0odTrdZ+CHwSBxy/KPeNxrmu8Tnl21Erew+FwuMFxMBjEU1yNRiPOFZjJTj3g+75eU9RNk8kETM88kHPP83QhiiKgHE2z3kBr9hNPkbjPHJYJTBp4c+zFianpNR9mIvvJDeaApmg3/TrdgscQleoHh578HkCi67qfDORrkS8tGNZqNf104/E4fQgyjOtKzh7ov1x9AV4isRWJB09iAAAAAElFTkSuQmCC",ah="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL/SURBVHgB7Vg9T+NAEJ18kXDJ1VADNfRQXQE99KAroecHUAM9dCdBD1cDBQ1QQw81dKcTCYTEMfPG3shYQt7ZgJHRPsmwcZx9np23M7ND5OHhUXSU8Of/4uJvHvyhPBCGv36enZ2X6Yvgib8/cVXzcKnZpNrKClXn56k8PS33Bre31Ds+pv7FBYXttvVc1sTliQka392l8PGReicnFNzcRPenpqi+tkZjq6v0tLlJg4cHq/msiA0prOru77/5Dhb3T0+FGM901tetLLfyMSaFpWnSJF4OD8VauMIGVsQV9ml3by/6AfsWvjbAGD435LXlZZsps4mFqNUa+vQHv0Blbm74fXVpiRpbW/ICWHY8C9dkQaVqoM0WJX0IReOlkvdKIM4QWabFYTyBsQIWwecGMg7DN8/A8ixkE7OoYBGWVD6zZTUeN9lSXBhTbC2Elbb+PVgtNUQzvrMj22lwd0dtthJ+xksZ66AFCKuzsWEzpZ2qg+vriJz3qVEt7omYWFRmD8uWslhmwFpcMun9fRSl+DKkpclJIuzx7W3qX13ZTqdTNSIULixzKSEkWyudiQ2wzKPCFwKe+PsRq7cTQuNYKuciV2vqLZmHlEC26iM3c5YCJJjEYw3UFiMx9LnYQwrES0jIdIBT5AJ6R0fyP0DItKwsP4TY+DR0iNNAsVRdTyX7LhcJ2uXWi4sJkJuTyMXHUoMVOS0WL3Jh/1YWFoYlkBZOPgZ5nY+kLwcHcpJwgdpixGbU2LAU26oVh08t1BZD0Z3EEQbILWS6EKVRnO0EHzdYWEloeh/OxPDxU4rY+/jTiLGP0d9C76NueR4emdg0XsozM9Hn2Vl5iU8nRshEVYkWU8AdAqkwlQkCUItLOnmXlzKWgzgT56bqZAWSW5L4KOgLAc5E5URnDwiULWMnYvkRlMyVCMhCbsiAWD0HKQEhPXNrSTq6PEbv2gXONZexGPvYpeZyqqvltBh3c13hfFocFb4H4ok9sSf2xNaQWB30en8bROeUA56J/tFX4hXJx4DZFieaegAAAABJRU5ErkJggg==",hh=""+new URL("winter-H2Tu9Msb.mp3",import.meta.url).href,lh=""+new URL("start_race-hiAgOaoX.mp3",import.meta.url).href,ch=""+new URL("finish_race-uYgKFh7v.mp3",import.meta.url).href,dh=""+new URL("gate_missed-_-ZxwNrJ.mp3",import.meta.url).href,uh=""+new URL("pole_hitting-vctwAcnk.mp3",import.meta.url).href,lt={Skier:new oe(Ka),SkierCarving:new oe(Xa),SkierSliding:new oe(qa),SkierBraking:new oe($a),SkierJumping:new oe(th),PoleRed:new oe(eh),PoleBlue:new oe(ih),PoleTouchedRed:new oe(sh),PoleTouchedBlue:new oe(nh),PolePassedRed:new oe(rh),PolePassedBlue:new oe(oh),FinalPole:new oe(ah),WinterSound:new Ni(hh),FinishRaceSound:new Ni(ch),StartRaceSound:new Ni(lh),GateMissedSound:new Ni(dh),PoleHittingSound:new Ni(uh)},Z=class Z{};I(Z,"DISPLAY_WIDTH",800),I(Z,"DISPLAY_HEIGHT",800),I(Z,"VISIBLE_ON_SCREEN_MARGIN_FACTOR",1.5),I(Z,"CAMERA_ZOOM",.6),I(Z,"DISPLAY_MIN_MARGIN",25),I(Z,"DISPLAY_MAX_RIGHT_POSITION",Z.DISPLAY_WIDTH/2-Z.DISPLAY_MIN_MARGIN),I(Z,"DISPLAY_MAX_LEFT_POSITION",-Z.DISPLAY_MAX_RIGHT_POSITION),I(Z,"FRONT_GHOST_DISTANCE",-Z.DISPLAY_HEIGHT/2),I(Z,"FORMAT_TIMING","mm:ss:SS"),I(Z,"DEFAULT_TRACKS",["soelden","davos","wengen","adelboden","zermatt"]),I(Z,"KEYBOARD_CONTROL_CARVE_RIGHT",qe.ArrowRight),I(Z,"KEYBOARD_CONTROL_CARVE_LEFT",qe.ArrowLeft),I(Z,"KEYBOARD_CONTROL_BRAKE",qe.Space),I(Z,"KEYBOARD_DEBUG_KEY",qe.D),I(Z,"KEYBOARD_RESTART_KEY",qe.R),I(Z,"KEYBOARD_EXIT_KEY",qe.Escape),I(Z,"KEYBOARD_START_KEY",qe.ArrowUp),I(Z,"MAX_SPEED",150),I(Z,"VELOCITY_MULTIPLIER_RATE",7),I(Z,"LATERAL_VELOCITY_ROTATION_RATE",1.15),I(Z,"MAX_RIGHT_ROTATION_ANGLE",Math.PI/2),I(Z,"MAX_LEFT_ROTATION_ANGLE",3*Math.PI/2),I(Z,"ROTATION_RECENTER_RATE",.2),I(Z,"INITIAL_SLOPE",.1),I(Z,"ACCELERATION_RATE",3),I(Z,"BRAKING_RATE",1),I(Z,"CARVING_ADHERENCE_RATE",.9),I(Z,"CARVING_BRAKING_RATE",.01),I(Z,"SLIDING_ADHERENCE_RATE",.6),I(Z,"SLIDING_BRAKING_RATE",.9),I(Z,"SL_SKIER_CONFIG",{windFrictionRate:.0025,carvingRotationRate:3.2,carvingOptimalSpeed:50,slidingRotationRate:4.2,slidingOptimalSpeed:35}),I(Z,"GS_SKIER_CONFIG",{windFrictionRate:.0022,carvingRotationRate:3.1,carvingOptimalSpeed:60,slidingRotationRate:4.1,slidingOptimalSpeed:45}),I(Z,"SG_SKIER_CONFIG",{windFrictionRate:.002,carvingRotationRate:2.6,carvingOptimalSpeed:70,slidingRotationRate:3.2,slidingOptimalSpeed:50}),I(Z,"DH_SKIER_CONFIG",{windFrictionRate:.0018,carvingRotationRate:2.2,carvingOptimalSpeed:75,slidingRotationRate:3.1,slidingOptimalSpeed:60}),I(Z,"GATE_MAX_LEFT_POSITION",Z.DISPLAY_MAX_LEFT_POSITION),I(Z,"GATE_MAX_RIGHT_POSITION",Z.DISPLAY_MAX_RIGHT_POSITION),I(Z,"FINAL_GATE_WIDTH",Z.DISPLAY_WIDTH-2*Z.DISPLAY_MIN_MARGIN),I(Z,"FINAL_GATE_POSITION",Z.DISPLAY_MAX_LEFT_POSITION),I(Z,"GATE_OTHER_SIDE_PROBABILITY",.95),I(Z,"SL_GATES_CONFIG",{maxWidth:190,minWidth:150,maxHorizontalDistance:320,minVerticalDistance:170,maxVerticalDistance:270,minNumber:41,maxNumber:51}),I(Z,"GS_GATES_CONFIG",{maxWidth:200,minWidth:160,maxHorizontalDistance:320,minVerticalDistance:200,maxVerticalDistance:350,minNumber:44,maxNumber:54}),I(Z,"SG_GATES_CONFIG",{maxWidth:240,minWidth:190,maxHorizontalDistance:350,minVerticalDistance:320,maxVerticalDistance:500,minNumber:46,maxNumber:56}),I(Z,"DH_GATES_CONFIG",{maxWidth:250,minWidth:200,maxHorizontalDistance:300,minVerticalDistance:420,maxVerticalDistance:530,minNumber:48,maxNumber:58}),I(Z,"POLE_WIDTH",20),I(Z,"POLE_HEIGHT",40),I(Z,"POLE_DETECTOR_MARGIN",22),I(Z,"FINAL_POLE_WIDTH",30),I(Z,"FINAL_POLE_HEIGHT",80);let N=Z;class fh{constructor(d,a,c,g,p){I(this,"position");I(this,"player");I(this,"date");I(this,"time");I(this,"difference");this.position=d,this.player=a,this.date=c,this.time=g,this.difference=p}}class gh{static getParticlesEmitter(){return new ja({pos:Ut(0,-20),emitterType:Wa.Circle,radius:6,minVel:50,maxVel:200,minAngle:3.4,maxAngle:6,emitRate:300,opacity:.5,fadeFlag:!0,particleLife:800,maxSize:4,minSize:1,beginColor:vn.ExcaliburBlue,isEmitting:!1})}}class yn extends Wi{constructor(a,c){super({pos:Ut(0,0),width:30,height:50,z:10,anchor:Ut(.5,.5),collisionType:wn.Fixed});I(this,"speed",0);I(this,"skierName");I(this,"skierConfig");I(this,"racing",!1);I(this,"finish",!1);I(this,"skierSprite",lt.Skier.toSprite());I(this,"skierCarvingSprite",lt.SkierCarving.toSprite());I(this,"skierSlidingSprite",lt.SkierSliding.toSprite());I(this,"skierBrakingSprite",lt.SkierBraking.toSprite());I(this,"particlesEmitter");this.skierName=a,this.skierConfig=c}onInitialize(){this.graphics.add(this.skierSprite),this.particlesEmitter=gh.getParticlesEmitter(),this.addChild(this.particlesEmitter)}update(a){this.racing?(this.updateRotation(a),this.updateSpeed(a,!1),this.updateVelocity(a),this.updateGraphics(a),this.updateCameraPosition(),this.emitParticles(a)):this.finish?(this.updateSpeed(a,!0),this.updateVelocity(a),this.graphics.use(this.skierBrakingSprite),this.emitBreakingParticles()):a.input.keyboard.isHeld(N.KEYBOARD_START_KEY)&&this.scene.startRace()}finishRace(){this.racing=!1,this.finish=!0,this.graphics.use(this.skierBrakingSprite),this.emitBreakingParticles()}startRace(){this.racing=!0}updateRotation(a){let c=0,g=0;if(this.hasTurningIntention(a)){if(this.hasSlidingIntention(a)){const x=this.speed=270?this.rotation+x:this.rotation-x)}const p=g*(180/Math.PI);p>180&&p<270?this.rotation=N.MAX_LEFT_ROTATION_ANGLE:p<180&&p>90?this.rotation=N.MAX_RIGHT_ROTATION_ANGLE:this.rotation=g}updateSpeed(a,c){let g=this.rotation*(180/Math.PI);g>=270&&(g=360-g);let p=N.ACCELERATION_RATE*N.INITIAL_SLOPE;p-=p*g/90,p-=this.skierConfig.windFrictionRate*this.speed,c?p-=N.BRAKING_RATE:this.hasSlidingIntention(a)?p-=N.SLIDING_BRAKING_RATE:this.hasCarvingIntention(a)?p-=N.CARVING_BRAKING_RATE:this.hasBreakingIntention(a)&&(p-=N.BRAKING_RATE);const x=this.speed+p;x<0?this.speed=0:this.speed=x}updateVelocity(a){let c=0,g=0;const p=this.getAdherenceRate(a),x=this.rotation*(180/Math.PI);if(x===0)c=0,g=this.speed;else if(x<=90){const C=x/90*this.speed;c=C*N.LATERAL_VELOCITY_ROTATION_RATE*p,g=Math.max(0,this.speed-p*C)}else{const C=(360-x)/90*this.speed;c=-C*N.LATERAL_VELOCITY_ROTATION_RATE*p,g=Math.max(0,this.speed-p*C)}this.vel=Ut(c*N.VELOCITY_MULTIPLIER_RATE,-g*N.VELOCITY_MULTIPLIER_RATE)}updateCameraPosition(){this.scene.updateGhost(this.pos.y)}getAdherenceRate(a){let c=1;return this.hasTurningIntention(a)&&(c=this.hasSlidingIntention(a)?N.SLIDING_ADHERENCE_RATE:N.CARVING_ADHERENCE_RATE),c}updateGraphics(a){this.hasSlidingIntention(a)?(this.graphics.use(this.skierSlidingSprite),this.graphics.flipHorizontal=this.hasLeftSlidingIntention(a)):this.hasBreakingIntention(a)?this.graphics.use(this.skierBrakingSprite):this.hasCarvingIntention(a)?(this.graphics.use(this.skierCarvingSprite),this.graphics.flipHorizontal=this.hasLeftCarvingIntention(a)):this.graphics.use(this.skierSprite)}emitParticles(a){if(this.particlesEmitter){const c=this.speed/N.MAX_SPEED;this.hasSlidingIntention(a)?(this.particlesEmitter.pos.y=5,this.particlesEmitter.radius=6,this.particlesEmitter.particleLife=1500,this.hasLeftSlidingIntention(a)?(this.particlesEmitter.maxAngle=1.6,this.particlesEmitter.minAngle=.5,this.particlesEmitter.pos.x=12):(this.particlesEmitter.maxAngle=2.6,this.particlesEmitter.minAngle=1.6,this.particlesEmitter.pos.x=-12),this.particlesEmitter.emitParticles(c*30)):this.hasCarvingIntention(a)?(this.particlesEmitter.pos.y=5,this.particlesEmitter.radius=1,this.particlesEmitter.particleLife=450,this.particlesEmitter.maxAngle=4.8,this.particlesEmitter.minAngle=4.6,this.particlesEmitter.pos.x=this.hasLeftCarvingIntention(a)?12:-12,this.particlesEmitter.emitParticles(c*15)):this.hasBreakingIntention(a)?this.emitBreakingParticles():this.speed>0&&(this.particlesEmitter.pos.y=0,this.particlesEmitter.radius=3,this.particlesEmitter.particleLife=500,this.particlesEmitter.maxAngle=6,this.particlesEmitter.minAngle=3.4,this.particlesEmitter.pos.x=0,this.particlesEmitter.emitParticles(c*5))}}emitBreakingParticles(){this.particlesEmitter.pos.y=-20,this.particlesEmitter.radius=6,this.particlesEmitter.particleLife=1500,this.particlesEmitter.maxAngle=6,this.particlesEmitter.minAngle=3.4,this.particlesEmitter.pos.x=0,this.particlesEmitter.emitParticles(this.speed/N.MAX_SPEED*50)}hasBreakingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_BRAKE)}hasCarvingIntention(a){return this.hasLeftCarvingIntention(a)||this.hasRightCarvingIntention(a)}hasSlidingIntention(a){return this.hasLeftSlidingIntention(a)||this.hasRightSlidingIntention(a)}hasLeftTurningIntention(a){return this.hasLeftCarvingIntention(a)||this.hasLeftSlidingIntention(a)}hasLeftSlidingIntention(a){return this.hasLeftCarvingIntention(a)&&this.hasBreakingIntention(a)}hasRightSlidingIntention(a){return this.hasRightCarvingIntention(a)&&this.hasBreakingIntention(a)}hasLeftCarvingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_CARVE_LEFT)}hasRightCarvingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_CARVE_RIGHT)}hasTurningIntention(a){return this.hasSlidingIntention(a)||this.hasCarvingIntention(a)}}class pn extends Wi{constructor(d,a,c=!1){super({pos:d,width:c?N.FINAL_POLE_WIDTH:N.POLE_WIDTH,height:c?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT,anchor:Ut(0,.5),collisionType:wn.Active}),c?this.graphics.use(lt.FinalPole.toSprite()):this.graphics.use(a==="red"?lt.PoleRed.toSprite():lt.PoleBlue.toSprite())}onInitialize(){this.on("collisionstart",d=>this.onPreCollision(d))}onPreCollision(d){d.other instanceof yn&&this.scene.engine.soundPlayer.playSound(lt.PoleHittingSound,.2)}}class ph extends Wi{constructor(d,a,c=!1){super({pos:d,width:a,height:c?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT/2,anchor:Ut(0,c?.5:0),collisionType:wn.Passive})}onInitialize(){this.on("precollision",d=>this.onPreCollision(d))}onPreCollision(d){d.other instanceof yn&&(this.parent.emit("passed"),this.kill())}}class mn extends Wi{constructor(a,c,g,p,x=!1){super({pos:a,width:c,height:x?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT,anchor:Ut(0,.5)});I(this,"isFinalGate");I(this,"leftPole");I(this,"rightPole");I(this,"gateDetector");I(this,"gateNumber");I(this,"polesColor");I(this,"gatePassed",!1);this.isFinalGate=x,this.polesColor=g,this.gateNumber=p}onInitialize(){this.on("passed",()=>this.onGatePassed())}update(){this.isOnScreen()&&!this.children.length&&this.buildComponents(),!this.isFinalGate&&!this.gatePassed&&this.shouldBePassed()&&(this.scene.addPenalty(this.gateNumber),this.gatePassed=!0),this.canBeDestroy()&&this.kill()}getStockableGate(){return{x:this.pos.x,y:this.pos.y,color:this.polesColor,width:this.width,gateNumber:this.gateNumber,isFinal:this.isFinalGate}}isOnScreen(){return Math.abs(this.scene.camera.y-this.pos.y)this.scene.camera.pos.y)}canBeDestroy(){return this.scene.camera.y-this.pos.y<-N.DISPLAY_HEIGHT*N.VISIBLE_ON_SCREEN_MARGIN_FACTOR}buildComponents(){const a=this.isFinalGate?N.FINAL_POLE_WIDTH:N.POLE_WIDTH;this.leftPole=new pn(Ut(0,0),this.polesColor,this.isFinalGate),this.gateDetector=new ph(Ut(a+N.POLE_DETECTOR_MARGIN,0),this.width-2*(a+N.POLE_DETECTOR_MARGIN),this.isFinalGate),this.rightPole=new pn(Ut(this.width-a,0),this.polesColor,this.isFinalGate),this.addChild(this.leftPole),this.addChild(this.gateDetector),this.addChild(this.rightPole)}onGatePassed(){this.gatePassed=!0,this.isFinalGate?this.scene.stopRace():this.updatePassedPolesGraphics()}updatePassedPolesGraphics(){this.children.forEach(a=>{const c=this.polesColor==="red"?lt.PolePassedRed.toSprite():lt.PolePassedBlue.toSprite();a instanceof pn&&a.graphics.use(c)})}}class oo{constructor(d,a,c,g,p){I(this,"name");I(this,"style");I(this,"date");I(this,"gates");I(this,"records");this.name=d,this.style=a,this.date=c,this.gates=g,this.records=p}toStockable(){return new xn(this.name,this.style,this.date,this.gates.map(d=>d.getStockableGate()),this.records)}}var ti=(u=>(u.SL="SL",u.GS="GS",u.SG="SG",u.DH="DH",u))(ti||{});class fe{static designTrack(d,a){const c=[],g=fe.getGatesConfig(a),p=this.getRandomGatesNumber(g);console.log("TrackBuilder - Designing a new track of ",p," gates");let x=fe.getRandomGateWidth(g),C=fe.getNextGatePosition(x,g);for(let T=0;T0?"red":"blue",T+1);c.push(B),x=fe.getRandomGateWidth(g),C=fe.getNextGatePosition(x,g,C)}return c.push(fe.generateFinalGate(C.y)),new oo(d,a,new Date,c,[])}static buildTrack(d){console.log("TrackBuilder - Rebuilding an existing track");const a=[];return d.gates.forEach(c=>{a.push(new mn(Ut(c.x,c.y),c.width,c.color,c.gateNumber,c.isFinal))}),new oo(d.name,d.style,d.date,a,d.records)}static getRandomGatesNumber(d){return Math.floor(d.minNumber+Math.random()*(d.maxNumber-d.minNumber))}static getRandomGateWidth(d){return d.minWidth+Math.random()*(d.maxWidth-d.minWidth)}static generateFinalGate(d){return new mn(Ut(N.FINAL_GATE_POSITION,d),N.FINAL_GATE_WIDTH,"red",void 0,!0)}static getNextGatePosition(d,a,c){const g=Math.random(),p=N.GATE_MAX_RIGHT_POSITION-d;if(c){const C=this.getGateSide(c)==="left"?g>=N.GATE_OTHER_SIDE_PROBABILITY:ga.maxHorizontalDistance?P=fe.furtherAutorizedXPosition(c.x,C?"left":"right",p,a):P=T;const z=c.y-(a.minVerticalDistance+Math.random()*(a.maxVerticalDistance-a.minVerticalDistance));return Ut(P,z)}else{const x=g>.5,C=p*Math.random();return Ut(x?-C:C,-((a.maxVerticalDistance+a.minVerticalDistance)/2))}}static getGatesConfig(d){return d===ti.SL?N.SL_GATES_CONFIG:d===ti.GS?N.GS_GATES_CONFIG:d===ti.SG?N.SG_GATES_CONFIG:N.DH_GATES_CONFIG}static furtherAutorizedXPosition(d,a,c,g){return a==="left"?Math.max(d-g.maxHorizontalDistance,N.GATE_MAX_LEFT_POSITION):Math.min(d+g.maxHorizontalDistance,c)}static getDistance(d,a){return d>=0&&a>=0?Math.abs(d-a):d>=0&&a<0?d-a:Math.abs(a-d)}static getGateSide(d){return d.x<0?"left":d.x>0?"right":"middle"}}class xn{constructor(d,a,c,g,p){I(this,"name");I(this,"style");I(this,"date");I(this,"gates");I(this,"records");this.name=d,this.style=a,this.date=c,this.gates=g,this.records=p}toTrack(){return fe.buildTrack(this)}}function be(u){const d=Object.prototype.toString.call(u);return u instanceof Date||typeof u=="object"&&d==="[object Date]"?new u.constructor(+u):typeof u=="number"||d==="[object Number]"||typeof u=="string"||d==="[object String]"?new Date(u):new Date(NaN)}function ei(u,d){return u instanceof Date?new u.constructor(d):new Date(d)}const po=6048e5,mh=864e5;let _h={};function bs(){return _h}function Yi(u,d){var C,T,B,P;const a=bs(),c=(d==null?void 0:d.weekStartsOn)??((T=(C=d==null?void 0:d.locale)==null?void 0:C.options)==null?void 0:T.weekStartsOn)??a.weekStartsOn??((P=(B=a.locale)==null?void 0:B.options)==null?void 0:P.weekStartsOn)??0,g=be(u),p=g.getDay(),x=(p=g.getTime()?a+1:d.getTime()>=x.getTime()?a:a-1}function ao(u){const d=be(u);return d.setHours(0,0,0,0),d}function ho(u){const d=new Date(Date.UTC(u.getFullYear(),u.getMonth(),u.getDate(),u.getHours(),u.getMinutes(),u.getSeconds(),u.getMilliseconds()));return d.setUTCFullYear(u.getFullYear()),u.getTime()-d.getTime()}function vh(u,d){const a=ao(u),c=ao(d),g=a.getTime()-ho(a),p=c.getTime()-ho(c);return Math.round((g-p)/mh)}function xh(u){const d=mo(u),a=ei(u,0);return a.setFullYear(d,0,4),a.setHours(0,0,0,0),ys(a)}function wh(u){return u instanceof Date||typeof u=="object"&&Object.prototype.toString.call(u)==="[object Date]"}function Ah(u){if(!wh(u)&&typeof u!="number")return!1;const d=be(u);return!isNaN(Number(d))}function yh(u){const d=be(u),a=ei(u,0);return a.setFullYear(d.getFullYear(),0,1),a.setHours(0,0,0,0),a}const bh={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Eh=(u,d,a)=>{let c;const g=bh[u];return typeof g=="string"?c=g:d===1?c=g.one:c=g.other.replace("{{count}}",d.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+c:c+" ago":c};function _n(u){return(d={})=>{const a=d.width?String(d.width):u.defaultWidth;return u.formats[a]||u.formats[u.defaultWidth]}}const Ch={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Sh={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Ih={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Th={date:_n({formats:Ch,defaultWidth:"full"}),time:_n({formats:Sh,defaultWidth:"full"}),dateTime:_n({formats:Ih,defaultWidth:"full"})},Ph={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Rh=(u,d,a,c)=>Ph[u];function Hi(u){return(d,a)=>{const c=a!=null&&a.context?String(a.context):"standalone";let g;if(c==="formatting"&&u.formattingValues){const x=u.defaultFormattingWidth||u.defaultWidth,C=a!=null&&a.width?String(a.width):x;g=u.formattingValues[C]||u.formattingValues[x]}else{const x=u.defaultWidth,C=a!=null&&a.width?String(a.width):u.defaultWidth;g=u.values[C]||u.values[x]}const p=u.argumentCallback?u.argumentCallback(d):d;return g[p]}}const Bh={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},kh={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Mh={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Dh={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Fh={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Oh={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Uh=(u,d)=>{const a=Number(u),c=a%100;if(c>20||c<10)switch(c%10){case 1:return a+"st";case 2:return a+"nd";case 3:return a+"rd"}return a+"th"},Lh={ordinalNumber:Uh,era:Hi({values:Bh,defaultWidth:"wide"}),quarter:Hi({values:kh,defaultWidth:"wide",argumentCallback:u=>u-1}),month:Hi({values:Mh,defaultWidth:"wide"}),day:Hi({values:Dh,defaultWidth:"wide"}),dayPeriod:Hi({values:Fh,defaultWidth:"wide",formattingValues:Oh,defaultFormattingWidth:"wide"})};function Qi(u){return(d,a={})=>{const c=a.width,g=c&&u.matchPatterns[c]||u.matchPatterns[u.defaultMatchWidth],p=d.match(g);if(!p)return null;const x=p[0],C=c&&u.parsePatterns[c]||u.parsePatterns[u.defaultParseWidth],T=Array.isArray(C)?Gh(C,z=>z.test(x)):zh(C,z=>z.test(x));let B;B=u.valueCallback?u.valueCallback(T):T,B=a.valueCallback?a.valueCallback(B):B;const P=d.slice(x.length);return{value:B,rest:P}}}function zh(u,d){for(const a in u)if(Object.prototype.hasOwnProperty.call(u,a)&&d(u[a]))return a}function Gh(u,d){for(let a=0;a{const c=d.match(u.matchPattern);if(!c)return null;const g=c[0],p=d.match(u.parsePattern);if(!p)return null;let x=u.valueCallback?u.valueCallback(p[0]):p[0];x=a.valueCallback?a.valueCallback(x):x;const C=d.slice(g.length);return{value:x,rest:C}}}const Hh=/^(\d+)(th|st|nd|rd)?/i,Qh=/\d+/i,Yh={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Wh={any:[/^b/i,/^(a|c)/i]},Zh={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Jh={any:[/1/i,/2/i,/3/i,/4/i]},jh={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Vh={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Kh={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Xh={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qh={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},$h={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},tl={ordinalNumber:Nh({matchPattern:Hh,parsePattern:Qh,valueCallback:u=>parseInt(u,10)}),era:Qi({matchPatterns:Yh,defaultMatchWidth:"wide",parsePatterns:Wh,defaultParseWidth:"any"}),quarter:Qi({matchPatterns:Zh,defaultMatchWidth:"wide",parsePatterns:Jh,defaultParseWidth:"any",valueCallback:u=>u+1}),month:Qi({matchPatterns:jh,defaultMatchWidth:"wide",parsePatterns:Vh,defaultParseWidth:"any"}),day:Qi({matchPatterns:Kh,defaultMatchWidth:"wide",parsePatterns:Xh,defaultParseWidth:"any"}),dayPeriod:Qi({matchPatterns:qh,defaultMatchWidth:"any",parsePatterns:$h,defaultParseWidth:"any"})},el={code:"en-US",formatDistance:Eh,formatLong:Th,formatRelative:Rh,localize:Lh,match:tl,options:{weekStartsOn:0,firstWeekContainsDate:1}};function il(u){const d=be(u);return vh(d,yh(d))+1}function sl(u){const d=be(u),a=ys(d).getTime()-xh(d).getTime();return Math.round(a/po)+1}function _o(u,d){var P,z,G,O;const a=be(u),c=a.getFullYear(),g=bs(),p=(d==null?void 0:d.firstWeekContainsDate)??((z=(P=d==null?void 0:d.locale)==null?void 0:P.options)==null?void 0:z.firstWeekContainsDate)??g.firstWeekContainsDate??((O=(G=g.locale)==null?void 0:G.options)==null?void 0:O.firstWeekContainsDate)??1,x=ei(u,0);x.setFullYear(c+1,0,p),x.setHours(0,0,0,0);const C=Yi(x,d),T=ei(u,0);T.setFullYear(c,0,p),T.setHours(0,0,0,0);const B=Yi(T,d);return a.getTime()>=C.getTime()?c+1:a.getTime()>=B.getTime()?c:c-1}function nl(u,d){var C,T,B,P;const a=bs(),c=(d==null?void 0:d.firstWeekContainsDate)??((T=(C=d==null?void 0:d.locale)==null?void 0:C.options)==null?void 0:T.firstWeekContainsDate)??a.firstWeekContainsDate??((P=(B=a.locale)==null?void 0:B.options)==null?void 0:P.firstWeekContainsDate)??1,g=_o(u,d),p=ei(u,0);return p.setFullYear(g,0,c),p.setHours(0,0,0,0),Yi(p,d)}function rl(u,d){const a=be(u),c=Yi(a,d).getTime()-nl(a,d).getTime();return Math.round(c/po)+1}function ut(u,d){const a=u<0?"-":"",c=Math.abs(u).toString().padStart(d,"0");return a+c}const Ue={y(u,d){const a=u.getFullYear(),c=a>0?a:1-a;return ut(d==="yy"?c%100:c,d.length)},M(u,d){const a=u.getMonth();return d==="M"?String(a+1):ut(a+1,2)},d(u,d){return ut(u.getDate(),d.length)},a(u,d){const a=u.getHours()/12>=1?"pm":"am";switch(d){case"a":case"aa":return a.toUpperCase();case"aaa":return a;case"aaaaa":return a[0];case"aaaa":default:return a==="am"?"a.m.":"p.m."}},h(u,d){return ut(u.getHours()%12||12,d.length)},H(u,d){return ut(u.getHours(),d.length)},m(u,d){return ut(u.getMinutes(),d.length)},s(u,d){return ut(u.getSeconds(),d.length)},S(u,d){const a=d.length,c=u.getMilliseconds(),g=Math.floor(c*Math.pow(10,a-3));return ut(g,d.length)}},yi={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ol={G:function(u,d,a){const c=u.getFullYear()>0?1:0;switch(d){case"G":case"GG":case"GGG":return a.era(c,{width:"abbreviated"});case"GGGGG":return a.era(c,{width:"narrow"});case"GGGG":default:return a.era(c,{width:"wide"})}},y:function(u,d,a){if(d==="yo"){const c=u.getFullYear(),g=c>0?c:1-c;return a.ordinalNumber(g,{unit:"year"})}return Ue.y(u,d)},Y:function(u,d,a,c){const g=_o(u,c),p=g>0?g:1-g;if(d==="YY"){const x=p%100;return ut(x,2)}return d==="Yo"?a.ordinalNumber(p,{unit:"year"}):ut(p,d.length)},R:function(u,d){const a=mo(u);return ut(a,d.length)},u:function(u,d){const a=u.getFullYear();return ut(a,d.length)},Q:function(u,d,a){const c=Math.ceil((u.getMonth()+1)/3);switch(d){case"Q":return String(c);case"QQ":return ut(c,2);case"Qo":return a.ordinalNumber(c,{unit:"quarter"});case"QQQ":return a.quarter(c,{width:"abbreviated",context:"formatting"});case"QQQQQ":return a.quarter(c,{width:"narrow",context:"formatting"});case"QQQQ":default:return a.quarter(c,{width:"wide",context:"formatting"})}},q:function(u,d,a){const c=Math.ceil((u.getMonth()+1)/3);switch(d){case"q":return String(c);case"qq":return ut(c,2);case"qo":return a.ordinalNumber(c,{unit:"quarter"});case"qqq":return a.quarter(c,{width:"abbreviated",context:"standalone"});case"qqqqq":return a.quarter(c,{width:"narrow",context:"standalone"});case"qqqq":default:return a.quarter(c,{width:"wide",context:"standalone"})}},M:function(u,d,a){const c=u.getMonth();switch(d){case"M":case"MM":return Ue.M(u,d);case"Mo":return a.ordinalNumber(c+1,{unit:"month"});case"MMM":return a.month(c,{width:"abbreviated",context:"formatting"});case"MMMMM":return a.month(c,{width:"narrow",context:"formatting"});case"MMMM":default:return a.month(c,{width:"wide",context:"formatting"})}},L:function(u,d,a){const c=u.getMonth();switch(d){case"L":return String(c+1);case"LL":return ut(c+1,2);case"Lo":return a.ordinalNumber(c+1,{unit:"month"});case"LLL":return a.month(c,{width:"abbreviated",context:"standalone"});case"LLLLL":return a.month(c,{width:"narrow",context:"standalone"});case"LLLL":default:return a.month(c,{width:"wide",context:"standalone"})}},w:function(u,d,a,c){const g=rl(u,c);return d==="wo"?a.ordinalNumber(g,{unit:"week"}):ut(g,d.length)},I:function(u,d,a){const c=sl(u);return d==="Io"?a.ordinalNumber(c,{unit:"week"}):ut(c,d.length)},d:function(u,d,a){return d==="do"?a.ordinalNumber(u.getDate(),{unit:"date"}):Ue.d(u,d)},D:function(u,d,a){const c=il(u);return d==="Do"?a.ordinalNumber(c,{unit:"dayOfYear"}):ut(c,d.length)},E:function(u,d,a){const c=u.getDay();switch(d){case"E":case"EE":case"EEE":return a.day(c,{width:"abbreviated",context:"formatting"});case"EEEEE":return a.day(c,{width:"narrow",context:"formatting"});case"EEEEEE":return a.day(c,{width:"short",context:"formatting"});case"EEEE":default:return a.day(c,{width:"wide",context:"formatting"})}},e:function(u,d,a,c){const g=u.getDay(),p=(g-c.weekStartsOn+8)%7||7;switch(d){case"e":return String(p);case"ee":return ut(p,2);case"eo":return a.ordinalNumber(p,{unit:"day"});case"eee":return a.day(g,{width:"abbreviated",context:"formatting"});case"eeeee":return a.day(g,{width:"narrow",context:"formatting"});case"eeeeee":return a.day(g,{width:"short",context:"formatting"});case"eeee":default:return a.day(g,{width:"wide",context:"formatting"})}},c:function(u,d,a,c){const g=u.getDay(),p=(g-c.weekStartsOn+8)%7||7;switch(d){case"c":return String(p);case"cc":return ut(p,d.length);case"co":return a.ordinalNumber(p,{unit:"day"});case"ccc":return a.day(g,{width:"abbreviated",context:"standalone"});case"ccccc":return a.day(g,{width:"narrow",context:"standalone"});case"cccccc":return a.day(g,{width:"short",context:"standalone"});case"cccc":default:return a.day(g,{width:"wide",context:"standalone"})}},i:function(u,d,a){const c=u.getDay(),g=c===0?7:c;switch(d){case"i":return String(g);case"ii":return ut(g,d.length);case"io":return a.ordinalNumber(g,{unit:"day"});case"iii":return a.day(c,{width:"abbreviated",context:"formatting"});case"iiiii":return a.day(c,{width:"narrow",context:"formatting"});case"iiiiii":return a.day(c,{width:"short",context:"formatting"});case"iiii":default:return a.day(c,{width:"wide",context:"formatting"})}},a:function(u,d,a){const g=u.getHours()/12>=1?"pm":"am";switch(d){case"a":case"aa":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"aaa":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"aaaa":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},b:function(u,d,a){const c=u.getHours();let g;switch(c===12?g=yi.noon:c===0?g=yi.midnight:g=c/12>=1?"pm":"am",d){case"b":case"bb":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"bbb":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"bbbb":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},B:function(u,d,a){const c=u.getHours();let g;switch(c>=17?g=yi.evening:c>=12?g=yi.afternoon:c>=4?g=yi.morning:g=yi.night,d){case"B":case"BB":case"BBB":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"BBBBB":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"BBBB":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},h:function(u,d,a){if(d==="ho"){let c=u.getHours()%12;return c===0&&(c=12),a.ordinalNumber(c,{unit:"hour"})}return Ue.h(u,d)},H:function(u,d,a){return d==="Ho"?a.ordinalNumber(u.getHours(),{unit:"hour"}):Ue.H(u,d)},K:function(u,d,a){const c=u.getHours()%12;return d==="Ko"?a.ordinalNumber(c,{unit:"hour"}):ut(c,d.length)},k:function(u,d,a){let c=u.getHours();return c===0&&(c=24),d==="ko"?a.ordinalNumber(c,{unit:"hour"}):ut(c,d.length)},m:function(u,d,a){return d==="mo"?a.ordinalNumber(u.getMinutes(),{unit:"minute"}):Ue.m(u,d)},s:function(u,d,a){return d==="so"?a.ordinalNumber(u.getSeconds(),{unit:"second"}):Ue.s(u,d)},S:function(u,d){return Ue.S(u,d)},X:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();if(p===0)return"Z";switch(d){case"X":return co(p);case"XXXX":case"XX":return $e(p);case"XXXXX":case"XXX":default:return $e(p,":")}},x:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"x":return co(p);case"xxxx":case"xx":return $e(p);case"xxxxx":case"xxx":default:return $e(p,":")}},O:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"O":case"OO":case"OOO":return"GMT"+lo(p,":");case"OOOO":default:return"GMT"+$e(p,":")}},z:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"z":case"zz":case"zzz":return"GMT"+lo(p,":");case"zzzz":default:return"GMT"+$e(p,":")}},t:function(u,d,a,c){const g=c._originalDate||u,p=Math.floor(g.getTime()/1e3);return ut(p,d.length)},T:function(u,d,a,c){const p=(c._originalDate||u).getTime();return ut(p,d.length)}};function lo(u,d=""){const a=u>0?"-":"+",c=Math.abs(u),g=Math.floor(c/60),p=c%60;return p===0?a+String(g):a+String(g)+d+ut(p,2)}function co(u,d){return u%60===0?(u>0?"-":"+")+ut(Math.abs(u)/60,2):$e(u,d)}function $e(u,d=""){const a=u>0?"-":"+",c=Math.abs(u),g=ut(Math.floor(c/60),2),p=ut(c%60,2);return a+g+d+p}const uo=(u,d)=>{switch(u){case"P":return d.date({width:"short"});case"PP":return d.date({width:"medium"});case"PPP":return d.date({width:"long"});case"PPPP":default:return d.date({width:"full"})}},vo=(u,d)=>{switch(u){case"p":return d.time({width:"short"});case"pp":return d.time({width:"medium"});case"ppp":return d.time({width:"long"});case"pppp":default:return d.time({width:"full"})}},al=(u,d)=>{const a=u.match(/(P+)(p+)?/)||[],c=a[1],g=a[2];if(!g)return uo(u,d);let p;switch(c){case"P":p=d.dateTime({width:"short"});break;case"PP":p=d.dateTime({width:"medium"});break;case"PPP":p=d.dateTime({width:"long"});break;case"PPPP":default:p=d.dateTime({width:"full"});break}return p.replace("{{date}}",uo(c,d)).replace("{{time}}",vo(g,d))},hl={p:vo,P:al},ll=/^D+$/,cl=/^Y+$/,dl=["D","DD","YY","YYYY"];function ul(u){return ll.test(u)}function fl(u){return cl.test(u)}function fo(u,d,a){const c=gl(u,d,a);if(console.warn(c),dl.includes(u))throw new RangeError(c)}function gl(u,d,a){const c=u[0]==="Y"?"years":"days of the month";return`Use \`${u.toLowerCase()}\` instead of \`${u}\` (in \`${d}\`) for formatting ${c} to the input \`${a}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const pl=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ml=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,_l=/^'([^]*?)'?$/,vl=/''/g,xl=/[a-zA-Z]/;function ye(u,d,a){var P,z,G,O,H,$,et,K;const c=bs(),g=(a==null?void 0:a.locale)??c.locale??el,p=(a==null?void 0:a.firstWeekContainsDate)??((z=(P=a==null?void 0:a.locale)==null?void 0:P.options)==null?void 0:z.firstWeekContainsDate)??c.firstWeekContainsDate??((O=(G=c.locale)==null?void 0:G.options)==null?void 0:O.firstWeekContainsDate)??1,x=(a==null?void 0:a.weekStartsOn)??(($=(H=a==null?void 0:a.locale)==null?void 0:H.options)==null?void 0:$.weekStartsOn)??c.weekStartsOn??((K=(et=c.locale)==null?void 0:et.options)==null?void 0:K.weekStartsOn)??0,C=be(u);if(!Ah(C))throw new RangeError("Invalid time value");const T={firstWeekContainsDate:p,weekStartsOn:x,locale:g,_originalDate:C};return d.match(ml).map(function(st){const ht=st[0];if(ht==="p"||ht==="P"){const mt=hl[ht];return mt(st,g.formatLong)}return st}).join("").match(pl).map(function(st){if(st==="''")return"'";const ht=st[0];if(ht==="'")return wl(st);const mt=ol[ht];if(mt)return!(a!=null&&a.useAdditionalWeekYearTokens)&&fl(st)&&fo(st,d,String(u)),!(a!=null&&a.useAdditionalDayOfYearTokens)&&ul(st)&&fo(st,d,String(u)),mt(C,st,g.localize,T);if(ht.match(xl))throw new RangeError("Format string contains an unescaped latin alphabet character `"+ht+"`");return st}).join("")}function wl(u){const d=u.match(_l);return d?d[1].replace(vl,"'"):u}class Al{constructor(){}loadTrack(d,a){const c=this.getTrackFromLocalStorage(d);if(c)return c.toTrack();const g=fe.designTrack(d,a),p=g.toStockable();return this.saveTrackToLocalStorage(p),g}importDefaultTracks(){N.DEFAULT_TRACKS.forEach(d=>{localStorage.getItem(`track_${d}`)||fetch(`tracks/${d}.json`).then(a=>a.json()).then(a=>{localStorage.setItem(`track_${d}`,JSON.stringify(a))})})}saveRecord(d,a){const c=this.getTrackFromLocalStorage(d);return c&&(c.records.push(a),c.records.sort((g,p)=>g.timing-p.timing),this.saveTrackToLocalStorage(c)),{position:c.records.filter(g=>g.timingc.timing===a)+1}getRecord(d){const a=this.getRecords(d);return a.length?a[0].timing:null}getRecords(d){var a;return((a=this.getTrackFromLocalStorage(d))==null?void 0:a.records)||[]}saveTrackToLocalStorage(d){localStorage.setItem(`track_${d.name}`,JSON.stringify(d))}getTrackFromLocalStorage(d){let a=localStorage.getItem("track_"+d);if(a){const c=Object.assign(new xn,JSON.parse(a));return new xn(c.name,c.style,c.date,c.gates,c.records)}return null}getCurrentRecords(d){const a=this.getTrackFromLocalStorage(d).records;return a==null?void 0:a.map((c,g)=>{const p=c.timing-a[0].timing;return new fh(g+1,c.player,ye(c.date,"d MMM yyyy HH:mm"),ye(c.timing,"mm:ss:SS"),p?ye(p,"ss:SS"):"")})}}class yl{constructor(d,a,c,g,p){I(this,"raceNumber");I(this,"trackName");I(this,"trackStyle");I(this,"skier1Name");I(this,"skier2Name");I(this,"skier1Timing");I(this,"skier2Timing");this.raceNumber=d,this.trackName=a,this.trackStyle=c,this.skier1Name=g,this.skier2Name=p}getWinner(){return this.isCompleted()?this.skier1Timing(a.raceNumber===d.raceNumber&&a.setTiming(d.skierName,d.timing),a))}getNextRace(){return this.racesResults.find(d=>!d.isCompleted())||null}getActualRankings(){let d=0,a=0,c=0,g=0;return this.racesResults.filter(p=>p.isCompleted()).forEach(p=>{p.getWinner()===this.skier1Name?d++:a++,c+=p.skier1Timing,g+=p.skier2Timing}),[new go(this.skier1Name,d,c),new go(this.skier2Name,a,g)].sort((p,x)=>p.time-x.time)}initRacesResults(d){this.racesResults=[];for(let a=1;a<=d;a++)this.racesResults.push(new yl(a,this.trackName,this.trackStyle,this.skier1Name,this.skier2Name))}}class El extends An{constructor(a){super();I(this,"headerLogoUi",document.getElementById("header-logo"));I(this,"raceSetupUi",document.getElementById("event-setup"));I(this,"trackInput",document.getElementById("track-input"));I(this,"trackStyleSelect",document.getElementById("track-style-select"));I(this,"skier1Input",document.getElementById("skier-1-input"));I(this,"skier2Input",document.getElementById("skier-2-input"));I(this,"racesNumberInput",document.getElementById("races-number-input"));I(this,"setupCompletedButton",document.getElementById("setup-completed-button"));this.engine=a,this.listenSetupCompleted()}onActivate(a){this.showHeaderLogoUi(),this.prepareRaceSetup()}onDeactivate(a){this.cleanRaceSetup()}prepareRaceSetup(){this.raceSetupUi.style.display="flex",this.engine.soundPlayer.showButton()}cleanRaceSetup(){this.raceSetupUi.style.display="none"}listenSetupCompleted(){this.setupCompletedButton.addEventListener("click",()=>{this.completeSetup()})}completeSetup(){const a=this.trackInput.value.toLowerCase()||N.DEFAULT_TRACKS[0],c=this.trackStyleSelect.value,g=this.skier1Input.value||"Skier 1",p=this.skier2Input.value||"Skier 2",x=+this.racesNumberInput.value||1,C=new bl(a,c,g,p!==g?p:`${p} 2`,x);this.engine.goToScene("eventManager",{eventConfig:C})}showHeaderLogoUi(){this.headerLogoUi.style.display="inline"}}class Cl{constructor(){I(this,"resultUi",document.getElementById("result"));I(this,"resultsContainerUi",document.getElementById("results-container"));I(this,"trackNameUi",document.getElementById("track-name"));I(this,"speedometerUi",document.getElementById("speedometer"));I(this,"timerUi",document.getElementById("timer"));I(this,"backToManagerButton",document.getElementById("back-to-manager"))}buildUi(d){this.displayTrackName(d)}displayRacingUi(){this.speedometerUi.style.display="flex",this.timerUi.style.display="flex"}updateRacingUi(d,a){this.speedometerUi.innerText=`${Math.floor(d)} km/h`,this.timerUi.innerText=`${ye(a,"mm:ss:SS")}`}displayResultUi(d){this.resultUi.style.display="flex",this.updateResultUi(d)}hideUi(){this.hideTrackName(),this.hideRacingUi(),this.hideResultUi()}hideRacingUi(){this.speedometerUi.style.display="none",this.timerUi.style.display="none"}hideResultUi(){this.resultUi.style.display="none"}updateResultUi(d){location.hash="",this.resultsContainerUi.innerHTML=this.prepareResultsTable(d),location.hash="startPosition"}displayTrackName(d){this.trackNameUi.innerText=d,this.trackNameUi.style.display="flex"}hideTrackName(){this.trackNameUi.style.display="none"}prepareResultsTable(d){return d.records.map(a=>{const c=a.position===d.position;return`
-
${a.position}
-
${a.player}
-
${a.date}
-
${a.time}
-
${a.difference?"+ "+a.difference:""}
-
`}).join("")}}class Sl{constructor(d){I(this,"player");I(this,"date");I(this,"timing");this.player=d.skierName,this.date=d.date,this.timing=d.timing}}class Il{constructor(d,a,c,g){I(this,"raceNumber");I(this,"skierName");I(this,"date");I(this,"timing");this.raceNumber=d,this.skierName=a,this.date=c,this.timing=g}}class Tl extends An{constructor(a){super();I(this,"uiManager",new Cl);I(this,"uiTimer",new Va({interval:50,repeats:!0,fcn:()=>this.updateRacingUi()}));I(this,"raceConfig");I(this,"track");I(this,"skier");I(this,"skierGhost");I(this,"gates");I(this,"startTime");I(this,"endTime");this.engine=a}onPreUpdate(a,c){a.input.keyboard.wasPressed(N.KEYBOARD_RESTART_KEY)&&this.returnToEventManager()}onActivate(a){var c,g;(c=a.data)!=null&&c.raceConfig?(this.raceConfig=(g=a.data)==null?void 0:g.raceConfig,this.uiManager.buildUi(this.raceConfig.getFullTrackName()),this.prepareRace(this.raceConfig.trackName,this.raceConfig.trackStyle,this.raceConfig.getNextSkierName())):this.returnToEventManager()}onDeactivate(a){this.cleanRace()}setupCamera(){this.camera.strategy.elasticToActor(this.skierGhost,.12,.2),this.camera.zoom=N.CAMERA_ZOOM}startRace(){this.uiManager.displayRacingUi(),this.startTime=this.engine.clock.now(),this.uiTimer.start(),this.listenStopRaceEvent(),this.skier.startRace(),this.engine.soundPlayer.playSound(lt.StartRaceSound,.2)}stopRace(){var p,x;this.endTime=this.engine.clock.now(),this.skier.finishRace(),this.uiTimer.stop();const a=this.endTime-this.startTime,c=new Il((p=this.raceConfig)==null?void 0:p.raceNumber,(x=this.skier)==null?void 0:x.skierName,new Date,a),g=this.engine.trackManager.saveRecord(this.raceConfig.trackName,new Sl(c));this.uiManager.displayResultUi(g),this.uiManager.backToManagerButton.addEventListener("click",()=>this.returnToEventManager(c),{once:!0}),this.engine.soundPlayer.playSound(lt.FinishRaceSound,.3)}addPenalty(a){console.warn("Missed the gate n°",a," (+ 3s.)"),this.camera.shake(3,3,250),this.startTime-=3e3,this.engine.soundPlayer.playSound(lt.GateMissedSound,.3)}updateGhost(a){this.skierGhost.pos=Ut(0,a+N.FRONT_GHOST_DISTANCE)}returnToEventManager(a){lt.FinishRaceSound.stop(),this.engine.goToScene("eventManager",a?{raceResult:a}:{}),this.engine.removeScene("race")}prepareRace(a,c,g){this.track=this.buildTrack(a,c),this.skier=new yn(g,this.getSkierConfig(this.track.style)),this.add(this.skier),this.skierGhost=new Wi({width:1,height:1,pos:Ut(this.skier.pos.x,this.skier.pos.y+N.FRONT_GHOST_DISTANCE)}),this.setupCamera(),this.add(this.skierGhost),this.addTimer(this.uiTimer),this.engine.soundPlayer.playSound(lt.WinterSound,.1,!0)}cleanRace(){this.startTime=void 0,this.endTime=void 0,this.uiManager.hideUi(),this.gates=[],this.raceConfig=void 0,this.track=void 0,this.engine.soundPlayer.stopSound(lt.WinterSound),this.clear()}listenStopRaceEvent(){var a;(a=this.gates)==null||a.find(c=>c.isFinalGate).on("stoprace",()=>this.stopRace())}updateRacingUi(){this.uiManager.updateRacingUi(this.skier.speed,this.engine.clock.now()-this.startTime)}buildTrack(a,c){const g=this.engine.trackManager.loadTrack(a,c);return g.gates.forEach(p=>{var x;(x=this.gates)==null||x.push(p),this.add(p)}),g}getSkierConfig(a){return a===ti.SL?N.SL_SKIER_CONFIG:a===ti.GS?N.GS_SKIER_CONFIG:a===ti.SG?N.SG_SKIER_CONFIG:N.DH_SKIER_CONFIG}}class Pl extends An{constructor(a){super();I(this,"eventConfig");I(this,"trackManager");I(this,"eventManagerUi",document.getElementById("event-manager"));I(this,"skier1Label",document.getElementById("skier-1-label"));I(this,"skier2Label",document.getElementById("skier-2-label"));I(this,"lastResultsContainer",document.getElementById("last-results-container"));I(this,"actualRankingContainer",document.getElementById("actual-ranking-container"));I(this,"nextRacesContainer",document.getElementById("next-races-container"));I(this,"startRaceButton",document.getElementById("start-race-button"));this.engine=a,this.startRaceButton.addEventListener("click",()=>{this.eventConfig.getNextRace()?this.startRace():this.backToMenu()})}onActivate(a){var c,g,p;this.trackManager=this.engine.trackManager,(c=a.data)!=null&&c.eventConfig&&(this.eventConfig=(g=a.data)==null?void 0:g.eventConfig,this.startRaceButton),(p=a.data)!=null&&p.raceResult&&this.eventConfig.updateRaceResult(a.data.raceResult),this.prepareManager(this.eventConfig)}onDeactivate(a){this.cleanManager()}prepareManager(a){this.eventConfig=a,this.startRaceButton.innerText=this.eventConfig.getNextRace()?"Race":"Back to menu",this.eventManagerUi.style.display="flex",this.skier1Label.innerText=a.skier1Name,this.skier2Label.innerText=a.skier2Name,this.lastResultsContainer.innerHTML=this.prepareLastResultsTable(a)||'
No result for the moment
',this.actualRankingContainer.innerHTML=this.prepareActualRankingTable(a)||'
No ranking for the moment
',this.nextRacesContainer.innerHTML=this.prepareNextRacesTable(a)||'
No race to come
',this.engine.soundPlayer.showButton()}cleanManager(){this.eventManagerUi.style.display="none",this.startRaceButton.removeEventListener("click",()=>{})}startRace(){this.engine.soundPlayer.hideButton(),this.engine.addScene("race",new Tl(this.engine)),this.engine.goToScene("race",{raceConfig:this.eventConfig.getNextRace()})}prepareLastResultsTable(a){return a.racesResults.filter(c=>c.isStarted()).map(c=>{const g=`${c.skier1Timing?" ("+this.trackManager.getRecordPosition(c.trackName,c.skier1Timing)+")":""}`,p=`${c.skier2Timing?" ("+this.trackManager.getRecordPosition(c.trackName,c.skier2Timing)+")":""}`;return`
+Read more about this issue at https://excaliburjs.com/docs/performance`),i&&this._toaster.toast("Excalibur is encountering performance issues. It's possible that your browser doesn't have hardware acceleration enabled. Visit [LINK] for more information and potential solutions.","https://excaliburjs.com/docs/performance"),this.useCanvas2DFallback(),this.emit("fallbackgraphicscontext",this.graphicsContext))}}useCanvas2DFallback(){var t,e,i;const s=this.canvas.cloneNode(!1);this.canvas.parentNode.replaceChild(s,this.canvas),this.canvas=s;const n={...this._originalOptions,antialiasing:this.getAntialiasing()},o=this._originalDisplayMode;this.graphicsContext=new qi({canvasElement:this.canvas,enableTransparency:this.enableCanvasTransparency,smoothing:n.antialiasing,backgroundColor:n.backgroundColor,snapToPixel:n.snapToPixel,useDrawSorting:n.useDrawSorting}),this.screen&&this.screen.dispose(),this.screen=new Qs({canvas:this.canvas,context:this.graphicsContext,antialiasing:(t=n.antialiasing)!==null&&t!==void 0?t:!0,browser:this.browser,viewport:(e=n.viewport)!==null&&e!==void 0?e:n.width&&n.height?{width:n.width,height:n.height}:Hs.SVGA,resolution:n.resolution,displayMode:o,pixelRatio:n.suppressHiDPIScaling?1:(i=n.pixelRatio)!==null&&i!==void 0?i:null}),this.screen.setCurrentCamera(this.currentScene.camera),this.input.pointers.detach();const h=n&&n.pointerScope===ze.Document?document:this.canvas;this.input.pointers=this.input.pointers.recreate(h,this),this.input.pointers.init()}getWorldBounds(){return this.screen.getWorldBounds()}get timescale(){return this._timescale}set timescale(t){if(t<=0){V.getInstance().error("Cannot set engine.timescale to a value of 0 or less than 0.");return}this._timescale=t}addTimer(t){return this.currentScene.addTimer(t)}removeTimer(t){return this.currentScene.removeTimer(t)}addScene(t,e){this.scenes[t]&&this._logger.warn("Scene",t,"already exists overwriting"),this.scenes[t]=e}removeScene(t){if(t instanceof Ui)for(const e in this.scenes)this.scenes.hasOwnProperty(e)&&this.scenes[e]===t&&delete this.scenes[e];typeof t=="string"&&delete this.scenes[t]}add(t){if(arguments.length===2){this.addScene(arguments[0],arguments[1]);return}this._deferredGoTo&&this.scenes[this._deferredGoTo]?this.scenes[this._deferredGoTo].add(t):this.currentScene.add(t)}remove(t){t instanceof Rt&&this.currentScene.remove(t),t instanceof Ui&&this.removeScene(t),typeof t=="string"&&this.removeScene(t)}goToScene(t,e){if(!this.isInitialized){this._deferredGoTo=t;return}if(this.scenes[t]){const i=this.currentScene,s=this.scenes[t];if(this._logger.debug("Going to scene:",t),this.currentScene.isInitialized){const o={engine:this,previousScene:i,nextScene:s};this.currentScene._deactivate.apply(this.currentScene,[o,s]),this.currentScene.events.emit("deactivate",new Cs(o,this.currentScene))}this.currentScene=s,this.screen.setCurrentCamera(s.camera),this.currentScene._initialize(this);const n={engine:this,previousScene:i,nextScene:s,data:e};this.currentScene._activate.apply(this.currentScene,[n,s]),this.currentScene.events.emit("activate",new Es(n,this.currentScene))}else this._logger.error("Scene",t,"does not exist!")}screenToWorldCoordinates(t){return this.screen.screenToWorldCoordinates(t)}worldToScreenCoordinates(t){return this.screen.worldToScreenCoordinates(t)}_initialize(t){var e,i,s,n;this.pageScrollPreventionMode=t.scrollPreventionMode;const o=t&&t.pointerScope===ze.Document?document:this.canvas;this.input={keyboard:new Ms,pointers:new Gi(o,this),gamepads:new Ci},this.input.keyboard.init({grabWindowFocus:(i=(e=this._originalOptions)===null||e===void 0?void 0:e.grabWindowFocus)!==null&&i!==void 0?i:!0}),this.input.pointers.init({grabWindowFocus:(n=(s=this._originalOptions)===null||s===void 0?void 0:s.grabWindowFocus)!==null&&n!==void 0?n:!0}),this.input.gamepads.init(),this.inputMapper=new Kr(this.input),this.browser.document.on("visibilitychange",()=>{document.visibilityState==="hidden"?(this.events.emit("hidden",new Re(this)),this._logger.debug("Window hidden")):document.visibilityState==="visible"&&(this.events.emit("visible",new Lt(this)),this._logger.debug("Window visible"))}),!this.canvasElementId&&!t.canvasElement&&document.body.appendChild(this.canvas)}onInitialize(t){}setAntialiasing(t){this.screen.antialiasing=t}getAntialiasing(){return this.screen.antialiasing}get isInitialized(){return this._isInitialized}_overrideInitialize(t){if(!this.isInitialized)if(this.onInitialize(t),this.events.emit("initialize",new si(t,this)),this._isInitialized=!0,this._deferredGoTo){const e=this._deferredGoTo;this._deferredGoTo=null,this.goToScene(e)}else this.goToScene("root")}_update(t){if(!this.ready){this._loader.update(this,t),this.inputMapper.execute(),this.input.keyboard.update(),this.input.gamepads.update();return}this._preupdate(t),this.currentScene.update(this,t),this.graphicsContext.updatePostProcessors(t),this._postupdate(t),this.inputMapper.execute(),this.input.keyboard.update(),this.input.gamepads.update()}_preupdate(t){this.emit("preupdate",new ot(this,t,this)),this.onPreUpdate(this,t)}onPreUpdate(t,e){}_postupdate(t){this.emit("postupdate",new gt(this,t,this)),this.onPostUpdate(this,t)}onPostUpdate(t,e){}_draw(t){var e;if(this.graphicsContext.beginDrawLifecycle(),this.graphicsContext.clear(),this._predraw(this.graphicsContext,t),!this._isReady){this._loader.canvas.draw(this.graphicsContext,0,0),this.graphicsContext.flush();return}this.graphicsContext.backgroundColor=(e=this.currentScene.backgroundColor)!==null&&e!==void 0?e:this.backgroundColor,this.currentScene.draw(this.graphicsContext,t),this._postdraw(this.graphicsContext,t),this.graphicsContext.flush(),this.graphicsContext.endDrawLifecycle(),this._checkForScreenShots()}_predraw(t,e){this.emit("predraw",new et(t,e,this)),this.onPreDraw(t,e)}onPreDraw(t,e){}_postdraw(t,e){this.emit("postdraw",new K(t,e,this)),this.onPostDraw(t,e)}onPostDraw(t,e){}showDebug(t){this._isDebug=t}toggleDebug(){return this._isDebug=!this._isDebug,this._isDebug}get loadingComplete(){return this._loadingComplete}get ready(){return this._isReady}isReady(){return this._isReadyPromise}async start(t){if(!this._compatible)throw new Error("Excalibur is incompatible with your browser");return t&&(this.screen.pushResolutionAndViewport(),this.screen.resolution=this.screen.viewport,this.screen.applyResolutionAndViewport(),this._loader=t,this._loader.suppressPlayButton=this._suppressPlayButton||this._loader.suppressPlayButton,this._loader.wireEngine(this)),this._logger.debug("Starting game clock..."),this.browser.resume(),this.clock.start(),this._logger.debug("Game clock started"),t&&(await this.load(this._loader),this._loadingComplete=!0,this.screen.popResolutionAndViewport(),this.screen.applyResolutionAndViewport()),this._loadingComplete=!0,this._overrideInitialize(this),this._isReady=!0,this._isReadyResolve(),this.emit("start",new H(this)),this._isReadyPromise}_mainloop(t){this.emit("preframe",new Pe(this,this.stats.prevFrame));const e=t*this.timescale;this.currentFrameElapsedMs=e;const i=this.stats.prevFrame.id+1;this.stats.currFrame.reset(),this.stats.currFrame.id=i,this.stats.currFrame.delta=e,this.stats.currFrame.fps=this.clock.fpsSampler.fps,vt.clear();const s=this.clock.now(),n=1e3/this.fixedUpdateFps;if(this.fixedUpdateFps)for(this._lagMs+=e;this._lagMs>=n;)this._update(n),this._lagMs-=n;else this._update(e);const o=this.clock.now();this.currentFrameLagMs=this._lagMs,this._draw(e);const h=this.clock.now();this.stats.currFrame.duration.update=o-s,this.stats.currFrame.duration.draw=h-o,this.stats.currFrame.graphics.drawnImages=vt.DrawnImagesCount,this.stats.currFrame.graphics.drawCalls=vt.DrawCallCount,this.emit("postframe",new ii(this,this.stats.currFrame)),this.stats.prevFrame.reset(this.stats.currFrame),this._monitorPerformanceThresholdAndTriggerFallback()}stop(){this.clock.isRunning()&&(this.emit("stop",new $(this)),this.browser.pause(),this.clock.stop(),this._logger.debug("Game stopped"))}isRunning(){return this.clock.isRunning()}screenshot(t=!1){return new Promise(i=>{this._screenShotRequests.push({preserveHiDPIResolution:t,resolve:i})})}_checkForScreenShots(){for(const t of this._screenShotRequests){const e=t.preserveHiDPIResolution?this.canvas.width:this.screen.resolution.width,i=t.preserveHiDPIResolution?this.canvas.height:this.screen.resolution.height,s=document.createElement("canvas");s.width=e,s.height=i;const n=s.getContext("2d");n.imageSmoothingEnabled=this.screen.antialiasing,n.drawImage(this.canvas,0,0,e,i);const o=new Image,h=s.toDataURL("image/png");o.src=h,t.resolve(o)}this._screenShotRequests.length=0}async load(t){try{await t.load()}catch(e){this._logger.error("Error loading resources, things may not behave properly",e),await Promise.resolve()}}}wi._DEFAULT_ENGINE_OPTIONS={width:0,height:0,enableCanvasTransparency:!0,useDrawSorting:!0,configurePerformanceCanvas2DFallback:{allow:!1,showPlayerMessage:!1,threshold:{fps:20,numberOfFrames:100}},canvasElementId:"",canvasElement:void 0,snapToPixel:!1,pointerScope:ze.Canvas,suppressConsoleBootMessage:null,suppressMinimumBrowserFeatureDetection:null,suppressHiDPIScaling:null,suppressPlayButton:null,grabWindowFocus:!0,scrollPreventionMode:Oe.Canvas,backgroundColor:L.fromHex("#2185d0")};class Ea{constructor(){this._handlers={},this._wiredEventDispatchers=[],this._deferedHandlerRemovals=[]}clear(){this._handlers={},this._wiredEventDispatchers=[]}_processDeferredHandlerRemovals(){for(const t of this._deferedHandlerRemovals)this._removeHandler(t.name,t.handler);this._deferedHandlerRemovals.length=0}emit(t,e){if(this._processDeferredHandlerRemovals(),!t)return;t=t.toLowerCase(),(typeof e>"u"||e===null)&&(e=new P);let i,s;if(this._handlers[t])for(i=0,s=this._handlers[t].length,i;i-1&&this._handlers[t].splice(s,1)}}once(t,e){this._processDeferredHandlerRemovals();const i=s=>{const n=s||new P;this.off(t,i),e(n)};this.on(t,i)}wire(t){t._wiredEventDispatchers.push(this)}unwire(t){const e=t._wiredEventDispatchers.indexOf(this);e>-1&&t._wiredEventDispatchers.splice(e,1)}}class Ca extends Kt{get font(){return this._font}set font(t){this._font=t,this._text.font=t}get text(){return this._text.text}set text(t){this._text.text=t}get color(){return this._text.color}set color(t){this._text&&(this._text.color=t)}get opacity(){return this._text.opacity}set opacity(t){this._text.opacity=t}get spriteFont(){return this._spriteFont}set spriteFont(t){t&&(this._spriteFont=t,this._text.font=this._spriteFont)}constructor(t){super(t),this._font=new mi,this._text=new Mi({text:"",font:this._font});const{text:e,pos:i,x:s,y:n,spriteFont:o,font:h,color:l}=t;this.pos=i??(s&&n?R(s,n):this.pos),this.text=e??this.text,this.font=h??this.font,this.spriteFont=o??this.spriteFont,this._text.color=l??this.color;const f=this.get(Ft);f.anchor=A.Zero,f.use(this._text)}_initialize(t){super._initialize(t)}getTextWidth(){return this._text.width}}class Xr extends Rt{getGraphics(){return this._graphics}addGraphic(t,e){this._graphics.push(t),this._gfx.visible=this.map.visible,this._gfx.opacity=this.map.opacity,e!=null&&e.offset&&(this._gfx.offset=e.offset),this._gfx.localBounds=this._recalculateBounds()}_recalculateBounds(){let t=this._tileBounds.clone();for(const e of this._graphics){const i=R(this.map.graphicsOffset.x-this.map.tileWidth/2,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:e.height-this.map.tileHeight));t=t.combine(e.localBounds.translate(i))}return t}removeGraphic(t){const e=this._graphics.indexOf(t);e>-1&&this._graphics.splice(e,1),this._gfx.localBounds=this._recalculateBounds()}clearGraphics(){this._graphics.length=0,this._gfx.visible=!1,this._gfx.localBounds=this._recalculateBounds()}getColliders(){return this._colliders}addCollider(t){this._colliders.push(t),this.map.flagCollidersDirty()}removeCollider(t){const e=this._colliders.indexOf(t);e>-1&&this._colliders.splice(e,1),this.map.flagCollidersDirty()}clearColliders(){this._colliders.length=0,this.map.flagCollidersDirty()}get pos(){return this.map.tileToWorld(R(this.x,this.y))}get center(){return this.pos.add(R(0,this.map.tileHeight/2))}constructor(t,e,i,s){super([new Q,new Ft({offset:i??A.Zero,onPostDraw:(w,y)=>this.draw(w,y)}),new xs(s)]),this.solid=!1,this._tileBounds=new J,this._graphics=[],this._colliders=[],this.data=new Map,this.x=t,this.y=e,this.map=s,this._transform=this.get(Q),this._isometricEntityComponent=this.get(xs);const n=this.map.tileWidth/2,o=this.map.tileHeight/2,h=(this.x-this.y)*n,l=(this.x+this.y)*o;this._transform.pos=R(h,l),this._isometricEntityComponent.elevation=s.elevation,this._gfx=this.get(Ft),this._gfx.visible=!1;const f=this.map.tileWidth,m=this.map.tileHeight,v=R(0,this.map.renderFromTopOfGraphic?m:0);this._gfx.localBounds=this._tileBounds=new J({left:-f/2,top:-m,right:f/2,bottom:m}).translate(v)}draw(t,e){const i=this.map.tileWidth/2;t.save(),t.translate(-i,0);for(const s of this._graphics)s.draw(t,this.map.graphicsOffset.x,this.map.graphicsOffset.y-(this.map.renderFromTopOfGraphic?0:s.height-this.map.tileHeight));t.restore()}}class Sa extends Rt{constructor(t){super([new Q,new it({type:q.Fixed}),new Ct,new gs((m,v)=>this.debug(m,v),!1)],t.name),this.elevation=0,this.visible=!0,this.opacity=1,this.renderFromTopOfGraphic=!1,this.graphicsOffset=R(0,0),this._collidersDirty=!1,this._originalOffsets=new WeakMap;const{pos:e,tileWidth:i,tileHeight:s,columns:n,rows:o,renderFromTopOfGraphic:h,graphicsOffset:l,elevation:f}=t;this.transform=this.get(Q),e&&(this.transform.pos=e),this.collider=this.get(Ct),this.collider&&this.collider.set(this._composite=new kt([])),this.renderFromTopOfGraphic=h??this.renderFromTopOfGraphic,this.graphicsOffset=l??this.graphicsOffset,this.elevation=f??this.elevation,this.tileWidth=i,this.tileHeight=s,this.columns=n,this.rows=o,this.tiles=new Array(n*o);for(let m=0;m=this.columns||e>=this.rows?null:this.tiles[t+e*this.columns]}getTileByPoint(t){const e=this.worldToTile(t);return this.getTile(e.x,e.y)}_getMaxZIndex(){let t=Number.NEGATIVE_INFINITY;for(const e of this.tiles){const i=e.get(Q).z;i>t&&(t=i)}return t}debug(t,e){const{showAll:i,showPosition:s,positionColor:n,positionSize:o,showGrid:h,gridColor:l,gridWidth:f,showColliderGeometry:m}=e.isometric,{geometryColor:v,geometryLineWidth:w,geometryPointSize:y}=e.collider;if(t.save(),t.z=this._getMaxZIndex()+.5,i||h){for(let b=0;be.isComplete(t))}reset(){this._actions.forEach(t=>t.reset())}stop(){this._actions.forEach(t=>t.stop())}}function Ta(r){return!!r._initialize}function Pa(r){return!!r.onInitialize}function Ra(r){return!!r._preupdate}function Ba(r){return!!r.onPreUpdate}function ka(r){return!!r.onPostUpdate}function Ma(r){return!!r.onPostUpdate}function Da(r){return!!r.onPreDraw}function Fa(r){return!!r.onPostDraw}class Oa{constructor(t,e=L.Magenta,i=!1){this.path=t,this.color=e,this._stream=null,this._gif=null,this._textures=[],this._animation=null,this._transparentColor=null,this._resource=new Ki(t,"arraybuffer",i),this._transparentColor=e}get bustCache(){return this._resource.bustCache}set bustCache(t){this._resource.bustCache=t}async load(){const t=await this._resource.load();this._stream=new qr(t),this._gif=new $r(this._stream,this._transparentColor);const e=this._gif.images.map(i=>new Ls(i.src,!1));return await Promise.all(e.map(i=>i.load())),this.data=this._textures=e}isLoaded(){return!!this.data}toSprite(t=0){return this._textures[t].toSprite()}toSpriteSheet(){const t=this._textures.map(e=>e.toSprite());return new Qe({sprites:t})}toAnimation(t){const e=this.toSpriteSheet(),i=e.sprites.length;return this._animation=_e.fromSpriteSheet(e,Sn(0,i),t),this._animation}get readCheckBytes(){return this._gif.checkBytes}}const As=r=>r.reduce(function(t,e){return t*2+e},0),dn=r=>{const t=[];for(let e=7;e>=0;e--)t.push(!!(r&1<{if(this.position>=this.data.byteLength)throw new Error("Attempted to read past end of stream.");return this.data[this.position++]},this.readBytes=e=>{const i=[];for(let s=0;s{let i="";for(let s=0;s{const e=this.readBytes(2);return(e[1]<<8)+e[0]},this.data=new Uint8Array(t),this.len=this.data.byteLength,this.len===0)throw new Error("No data loaded from file")}}const Ua=function(r,t){let e=0;const i=function(w){let y=0;for(let b=0;b>3)&1<<(e&7)&&(y|=1<{const s=[];for(let n=0;n{const f=l.toString(16);return f.length===1?"0"+f:f}).join("");s.push(h)}return s},this.readSubBlocks=()=>{let i,s;s="";do i=this._st.readByte(),s+=this._st.read(i);while(i!==0);return s},this.parseHeader=()=>{const i={sig:null,ver:null,width:null,height:null,colorRes:null,globalColorTableSize:null,gctFlag:null,sorted:null,globalColorTable:[],bgColor:null,pixelAspectRatio:null};if(i.sig=this._st.read(3),i.ver=this._st.read(3),i.sig!=="GIF")throw new Error("Not a GIF file.");i.width=this._st.readUnsigned(),i.height=this._st.readUnsigned();const s=dn(this._st.readByte());i.gctFlag=s.shift(),i.colorRes=As(s.splice(0,3)),i.sorted=s.shift(),i.globalColorTableSize=As(s.splice(0,3)),i.bgColor=this._st.readByte(),i.pixelAspectRatio=this._st.readByte(),i.gctFlag&&(i.globalColorTable=this.parseColorTable(1<{const s=f=>{this.checkBytes.push(this._st.readByte());const m=dn(this._st.readByte());f.reserved=m.splice(0,3),f.disposalMethod=As(m.splice(0,3)),f.userInput=m.shift(),f.transparencyGiven=m.shift(),f.delayTime=this._st.readUnsigned(),f.transparencyIndex=this._st.readByte(),f.terminator=this._st.readByte(),this._handler.gce&&this._handler.gce(f)&&this.checkBytes.push(this._handler.gce)},n=f=>{f.comment=this.readSubBlocks(),this._handler.com&&this._handler.com(f)&&this.checkBytes.push(this._handler.com)},o=f=>{this.checkBytes.push(this._st.readByte()),f.ptHeader=this._st.readBytes(12),f.ptData=this.readSubBlocks(),this._handler.pte&&this._handler.pte(f)&&this.checkBytes.push(this._handler.pte)},h=f=>{const m=w=>{this.checkBytes.push(this._st.readByte()),w.unknown=this._st.readByte(),w.iterations=this._st.readUnsigned(),w.terminator=this._st.readByte(),this._handler.app&&this._handler.app.NETSCAPE&&this._handler.app.NETSCAPE(w)&&this.checkBytes.push(this._handler.app)},v=w=>{w.appData=this.readSubBlocks(),this._handler.app&&this._handler.app[w.identifier]&&this._handler.app[w.identifier](w)&&this.checkBytes.push(this._handler.app[w.identifier])};switch(this.checkBytes.push(this._st.readByte()),f.identifier=this._st.read(8),f.authCode=this._st.read(3),f.identifier){case"NETSCAPE":m(f);break;default:v(f);break}},l=f=>{f.data=this.readSubBlocks(),this._handler.unknown&&this._handler.unknown(f)&&this.checkBytes.push(this._handler.unknown)};switch(i.label=this._st.readByte(),i.label){case 249:i.extType="gce",s(i);break;case 254:i.extType="com",n(i);break;case 1:i.extType="pte",o(i);break;case 255:i.extType="app",h(i);break;default:i.extType="unknown",l(i);break}},this.parseImg=i=>{const s=(h,l)=>{const f=new Array(h.length),m=h.length/l,v=(M,D)=>{const S=h.slice(D*l,(D+1)*l);f.splice.apply(f,[M*l,l].concat(S))},w=[0,4,2,1],y=[8,8,4,2];let b=0;for(let M=0;M<4;M++)for(let D=w[M];D{const i={sentinel:this._st.readByte(),type:""};switch(String.fromCharCode(i.sentinel)){case"!":i.type="ext",this.parseExt(i);break;case",":i.type="img",this.parseImg(i);break;case";":i.type="eof",this._handler.eof&&this._handler.eof(i)&&this.checkBytes.push(this._handler.eof);break;default:throw new Error("Unknown block: 0x"+i.sentinel.toString(16))}i.type!=="eof"&&this.parseBlock()},this.arrayToImage=i=>{let s=0;const n=document.createElement("canvas");n.id=s.toString(),n.width=i.width,n.height=i.height,s++;const o=n.getContext("2d"),h=1;let l=0,f=0;for(let v=0;vMath.max(s.x,i),0)-e.x,this.height=this._points.reduce((i,s)=>Math.max(s.y,i),0)-e.y,this.flagDirty()}get minPoint(){const t=this._points.reduce((i,s)=>Math.min(s.x,i),1/0),e=this._points.reduce((i,s)=>Math.min(s.y,i),1/0);return R(t,e)}constructor(t){super(t),this.points=t.points,this.filtering=Ot.Blended,this.rasterize()}clone(){return new fn({points:this.points.map(t=>t.clone()),...this.cloneGraphicOptions(),...this.cloneRasterOptions()})}execute(t){if(this.points&&this.points.length){t.beginPath();const e=this.minPoint.negate(),i=this.points[0].add(e);t.moveTo(i.x,i.y),this.points.forEach(s=>{t.lineTo(s.x+e.x,s.y+e.y)}),t.lineTo(i.x,i.y),t.closePath(),this.color&&t.fill(),this.strokeColor&&t.stroke()}}}class La{constructor(){this._queue=[]}get length(){return this._queue.length}enqueue(){const t=new Ge;return this._queue.push(t),t.promise}dequeue(t){this._queue.shift().resolve(t)}}class za{constructor(t){this._count=t,this._waitQueue=new La}get count(){return this._count}get waiting(){return this._waitQueue.length}async enter(){return this._count!==0?(this._count--,Promise.resolve()):this._waitQueue.enqueue()}exit(t=1){if(t!==0){for(;t!==0&&this._waitQueue.length!==0;)this._waitQueue.dequeue(null),t--;this._count+=t}}}const gn="0.29.0-alpha.4+6f6d7bb";p()})();_.y1j;_.fWn;_.Ia8;_.rqv;_.zH6;_.hLI;_.yyv;_.tX5;var Wi=_.vtX;_.r7K;_.lCh;_.cE4;_.fwF;_.sce;_.AQ6;_._c7;_.KUs;_.Ajp;_.dkO;_.RDh;_._H9;_.mxs;_.OmD;_.kBf;_.C4F;_.NQt;_.JjN;_.EK_;_.V1s;_.xHm;_.Xz7;_.Cdc;_.FKn;_.SUY;_.ab2;_.GfZ;_.YMS;_.oyv;_.aUb;_.SdD;_.JUv;_.jEj;_.TFq;_.HDU;_.R_y;_.ydN;_.t50;_.s$$;var wn=_.v2G,vn=_.Ilk;_.s9i;_.dxL;_.LLX;_.wA2;_.R_p;_.IQ$;_.I5F;_.X8$;_.FR6;_.U8o;_.kbG;_.iS_;_.cGG;_.RPN;_.skb;_.SLU;_.RdJ;_.cNu;_.gU7;_.LSk;_.Nmp;var Ya=_.d1Y;_.xrL;_.sRW;_.cmV;_.qWz;_.N0Q;_.q8b;_.ynB;_.jT9;var Wa=_.wAz,Za=_.D4V;_.NLr;_.N6H;_.W1A;_.JHW;_.ZZ$;_.v2K;_.pBf;_.vpe;_.GMl;_.zW2;_.B0K;_.Nv7;_.C_p;_.MUA;_.xqU;_.pTp;_.vUK;_.j9l;_.Zxw;_.v51;_.Hdx;_.Z$d;_.iqV;_.o$7;_.olM;_.Zm$;_.$QH;_.i78;_.nJg;_.h6u;_.hts;_.j88;_.VME;_.fy2;_.nt;_.Ukr;_.zsu;_.oA6;_.TVh;_.TwZ;_.GTT;_.xxj;_.XdK;_.Jmb;var oe=_.cXo;_.Dm5;_.IIB;_.ebW;_.zI0;_.LYD;_.cEG;_.SEl;_.t9V;_.ez5;_.N1d;var qe=_.R8U;_.SKZ;_.__J;_.RI$;_.x12;_.ccz;var Ja=_.aNw;_.XrL;_.xwn;_.dNK;_.ini;_.YdH;_.F5T;_.y3G;_.l57;_.xn0;_.t2V;_.uxB;_.cpd;_.fiy;_.$XZ;_.UG6;_.uqK;_.STE;_.y$z;_.mAD;_.sOq;_.hUw;_._0G;_.Sqs;_.hpZ;var ja=_.Vol;_.vYX;_.wIZ;_.cBi;_.c30;_.MPV;_.RFv;_.Ux6;_.rxy;_.I$c;_.kfC;_.VjY;_.mgq;_.YVA;_.Kgp;_.HH$;_.M_d;_.rgh;_.Ra6;_.KhR;_.gvQ;_.BS5;_.xhz;_.xOq;_.a9j;_.bHk;_.CgK;_.cEd;_.cuY;_.kvE;_.SBu;_.PsT;_.AE_;_.ctO;_.OLH;_.kky;_.nSF;_.zHn;_.zwx;_.AeJ;_.hLz;_.D9g;_.wA;_.jhr;_.GVs;_._zO;_.LXZ;_.w6$;_.mhV;_.MOD;_.kwd;_.Lmr;var An=_.xsS;_.K5l;_.lLr;_.Z$r;_.IXb;_.Xsu;_.SGH;_.SMj;_.L34;_.exe;_.bnF;_.MFA;var Ni=_.$uU;_.Sap;_.jyi;_.E03;_.V6q;_.rg2;_.DVW;_.nVo;_.F6N;_.xP7;_.Odq;_.Zif;_.ZGJ;_.MJk;_.xvT;_.PHM;_.dpR;_.n9L;_.KwO;_.SxM;var Va=_.B7y;_.x7r;_.wx7;_.Uvn;_.OFT;_.xzN;_.CcZ;_.M5Z;_.ZrN;_.OWs;_.dF9;_.oZy;_.rD2;_.VHo;_.ohE;_.R$E;_.xQN;_.AdJ;_.q3I;_.Pab;_.uZ5;_.McK;_.F9c;_.k0b;_.hnT;_.RSJ;_.Mku;_.h90;_.rms;_.ErP;_.aVg;_.lPc;_.Z8E;_._N2;_.yFn;_.lNv;_.cu9;_.MZQ;_.FUM;_.BxR;_.vdf;_.iaL;_.w6H;_.Q4c;_.Xxe;_.Uxb;_.Yr5;var Ut=_.Bhw;_.yOA;const Ka="data:image/png;base64,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",Xa="data:image/png;base64,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",qa="data:image/png;base64,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",$a="data:image/png;base64,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",th="data:image/png;base64,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",eh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD2SURBVHgB7VGxDoIwEL0qJO3A4szAD7ibuPgpfpp/YqJhdvAHGFiZSIRFzr5LSwDdYNDYl5B7d+/1lbZEAQEBAQEBXwp12+0OtCCiaL0+04JY0cIIgf8QGHnCRCeaAUV0lHrf7xlkm+eKZsDn/NCjpGlqbDFZlml8lms3AxcN/WQ2rIL+Ucqy3KAWReHvkquqAsfdKOchY4z0toqpaRpynnEguNZahLZtyXLlzLLA9pj3M7aAz232MbA3YLGfeeI06bGZq5j3JxgFOnFoett9EO5DeOKnqGO+QIzj+IFAHMv23SBMJUkif1fX9XQThTDoT+arFfgF3rFtVgjtI8cAAAAASUVORK5CYII=",ih="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEASURBVHgB7VExjoMwEJzlQLILmqspeMXV94A8IveHk+4N94v7wz0gUlJE+QUFLRVSoAmOxzEISLpQJIpHQjueHc/aGAgICAgICHhQyOp7/4kFEeMt2mBBRFgYIfAVAuOeCOQPd8DArCeB/78fX7gDq5/DmvWJHiXLMm2LzvNc8bNceY3c9bieaePqMPzDsizfWYuiEC+ZqqrIDfhmFw+01m5tqzM1TQPvmQaSK6Vco21bWC7e7DbYNfVBMxb0+WE3AwcDN/daT3zPrTnMV+rDDSaBvjk2XU0fhfchZuZHbE++BTpJkuTIQF7L6t0oTNI0daer63o+RBjGvulOO0hkzks6bRNn/MavAAAAAElFTkSuQmCC",sh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAADuSURBVHgB7ZXBCoJAEIZntkCP9gR5DgI7CKIv26N0UbwZBF1bn6A6hrrT7upC52YNAr/Lvxc/ZhlnFi9FQeARAZ5ZhItwES7C3wjRHdxe3Jclwhe47+e7MhJJk9c83wKD+SokxIfJV9dtgMFnhVYIQRABAyts0jTRkej2nqHvJTCwwlUYxjoiRdQe6loCg/HKwzBeE/EOTKyQiKxQ/zpPYDJWiGiFyjWGLfTIKCSKTeguS2AyT4VCCDu/gxASmPzJxsapKYFSN2AyT4V6dcUmd1XVAhP/FTZZFk9n9thZoTugJ+F6ypNijp1+Q48m359nP16rOGJzAAAAAElFTkSuQmCC",nh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAD9SURBVHgB7ZQxjsIwEEX/2NFuy55gfQREg7gBQlTcBYFEjQS34ARUFJQ0CNEgbkA4AVCBkPBgOwR6xkEUeUW+U+Rp4vGY2r01IyIKkSmFpbAUlsLPCClf5PfibFwnvEH+fXG/zODUZ2ew+YeA4iokpqPPy/X8BwGvCikTKq0qEJD4R6u7rLpdrDJoewNSCAgVKkqMC1eZ3c9HjRQCgtCyrWQv6gAhQaiJg5BhTxCiMhFljWA+Qkgx59ANofFpWdbhpzAmQUikw/wq/a0VRhe682d8/ujfHYQU1BSQ8Tkd1vYQEr/CZn9lHmvx2AVhvqBIwuShW0B4sbo+THzeAZmHOzUW9OpSAAAAAElFTkSuQmCC",rh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAF0SURBVHgB7ZZNToNAFMffszSBRRPjugsuYKK7BrqwR/AEegOPoEfwBvYGHqGJpt3WSA/Agi2JCYmwUJ7vjQOZIrWQdkPCP2ne5/ymA8MAQK9evbqiwPPuN553UVc7gZba+P4TID7kiM+tgOvJxK2DEcAtux/fRNeNgTLQGgzW5rJM2BfR7HK1eqsba9Ulc+BFAZwS4oKhM47umsBEuKvw7vtzLt4Yqb2wf4EVaCNYIwXT6eN6xxbpppD32xUcURbvtwUcUa0fvR7YA43ji4+nORwg/D3eAAPfJ3HOl0uEA1RwOnRTxuOxw8ZxXdeWH/u2zomvahJXcqZVKm9KFEVnYsMwLK4lxXEsvlwb1D3gOI6K2aqmNE1B92wDxbdtWxWyLAP2UTerARxLvswRS/r0ZLXAskEGF7nC0TUVy2TaSr5cwRZQF82mP7Mb8AJClX6wcqIXKQ6Hw08ByrJAvZpLGI5GI/XvkiSpToICkzp/SbxygX4A3V2uBtBE7m4AAAAASUVORK5CYII=",oh="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAoCAYAAAD+MdrbAAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAGBSURBVHgB7ZU7TsNAEIZnFluyi0iIOoWPQEVDQzpE3HACwgloIKGDFtFwA3IDCiTaSCAUHgUcIUXaSEiRiItkl5llbTbGAVtJY8m/FM3sP7PfevOYAFSqVKksCtuvZ3snj5tZNQEF1ey8XAPKcxTOTSHg7mk/yIIhqBalH0pO93MDeaOjxJt9LRsm5bRxd7n9nrXXyTJBzRBQrAvh9AjaQOEe5YGxcFGh2e53EcWBZf0L+xOYguaC5VLYebpa9BUppzA87u/ACuXAmujBClX4p1cBK6A1vmhedWEJqe/x9gO8vdg6hCUUdp5bHEv0odTrdZ+CHwSBxy/KPeNxrmu8Tnl21Erew+FwuMFxMBjEU1yNRiPOFZjJTj3g+75eU9RNk8kETM88kHPP83QhiiKgHE2z3kBr9hNPkbjPHJYJTBp4c+zFianpNR9mIvvJDeaApmg3/TrdgscQleoHh578HkCi67qfDORrkS8tGNZqNf104/E4fQgyjOtKzh7ov1x9AV4isRWJB09iAAAAAElFTkSuQmCC",ah="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAABQCAYAAAAOYsW+AAAACXBIWXMAAAEUAAABFAH7OeD/AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAL/SURBVHgB7Vg9T+NAEJ18kXDJ1VADNfRQXQE99KAroecHUAM9dCdBD1cDBQ1QQw81dKcTCYTEMfPG3shYQt7ZgJHRPsmwcZx9np23M7ND5OHhUXSU8Of/4uJvHvyhPBCGv36enZ2X6Yvgib8/cVXzcKnZpNrKClXn56k8PS33Bre31Ds+pv7FBYXttvVc1sTliQka392l8PGReicnFNzcRPenpqi+tkZjq6v0tLlJg4cHq/msiA0prOru77/5Dhb3T0+FGM901tetLLfyMSaFpWnSJF4OD8VauMIGVsQV9ml3by/6AfsWvjbAGD435LXlZZsps4mFqNUa+vQHv0Blbm74fXVpiRpbW/ICWHY8C9dkQaVqoM0WJX0IReOlkvdKIM4QWabFYTyBsQIWwecGMg7DN8/A8ixkE7OoYBGWVD6zZTUeN9lSXBhTbC2Elbb+PVgtNUQzvrMj22lwd0dtthJ+xksZ66AFCKuzsWEzpZ2qg+vriJz3qVEt7omYWFRmD8uWslhmwFpcMun9fRSl+DKkpclJIuzx7W3qX13ZTqdTNSIULixzKSEkWyudiQ2wzKPCFwKe+PsRq7cTQuNYKuciV2vqLZmHlEC26iM3c5YCJJjEYw3UFiMx9LnYQwrES0jIdIBT5AJ6R0fyP0DItKwsP4TY+DR0iNNAsVRdTyX7LhcJ2uXWi4sJkJuTyMXHUoMVOS0WL3Jh/1YWFoYlkBZOPgZ5nY+kLwcHcpJwgdpixGbU2LAU26oVh08t1BZD0Z3EEQbILWS6EKVRnO0EHzdYWEloeh/OxPDxU4rY+/jTiLGP0d9C76NueR4emdg0XsozM9Hn2Vl5iU8nRshEVYkWU8AdAqkwlQkCUItLOnmXlzKWgzgT56bqZAWSW5L4KOgLAc5E5URnDwiULWMnYvkRlMyVCMhCbsiAWD0HKQEhPXNrSTq6PEbv2gXONZexGPvYpeZyqqvltBh3c13hfFocFb4H4ok9sSf2xNaQWB30en8bROeUA56J/tFX4hXJx4DZFieaegAAAABJRU5ErkJggg==",hh=""+new URL("winter-H2Tu9Msb.mp3",import.meta.url).href,lh=""+new URL("start_race-hiAgOaoX.mp3",import.meta.url).href,ch=""+new URL("finish_race-uYgKFh7v.mp3",import.meta.url).href,dh=""+new URL("gate_missed-_-ZxwNrJ.mp3",import.meta.url).href,uh=""+new URL("pole_hitting-vctwAcnk.mp3",import.meta.url).href,lt={Skier:new oe(Ka),SkierCarving:new oe(Xa),SkierSliding:new oe(qa),SkierBraking:new oe($a),SkierJumping:new oe(th),PoleRed:new oe(eh),PoleBlue:new oe(ih),PoleTouchedRed:new oe(sh),PoleTouchedBlue:new oe(nh),PolePassedRed:new oe(rh),PolePassedBlue:new oe(oh),FinalPole:new oe(ah),WinterSound:new Ni(hh),FinishRaceSound:new Ni(ch),StartRaceSound:new Ni(lh),GateMissedSound:new Ni(dh),PoleHittingSound:new Ni(uh)},Z=class Z{};I(Z,"DISPLAY_WIDTH",800),I(Z,"DISPLAY_HEIGHT",800),I(Z,"VISIBLE_ON_SCREEN_MARGIN_FACTOR",1.5),I(Z,"CAMERA_ZOOM",.6),I(Z,"DISPLAY_MIN_MARGIN",25),I(Z,"DISPLAY_MAX_RIGHT_POSITION",Z.DISPLAY_WIDTH/2-Z.DISPLAY_MIN_MARGIN),I(Z,"DISPLAY_MAX_LEFT_POSITION",-Z.DISPLAY_MAX_RIGHT_POSITION),I(Z,"FRONT_GHOST_DISTANCE",-Z.DISPLAY_HEIGHT/2),I(Z,"MISSED_GATE_PENALTY_TIME",3e3),I(Z,"FORMAT_TIMING","mm:ss:SS"),I(Z,"DEFAULT_TRACKS",["soelden","davos","wengen","adelboden","zermatt"]),I(Z,"KEYBOARD_CONTROL_CARVE_RIGHT",qe.ArrowRight),I(Z,"KEYBOARD_CONTROL_CARVE_LEFT",qe.ArrowLeft),I(Z,"KEYBOARD_CONTROL_BRAKE",qe.Space),I(Z,"KEYBOARD_DEBUG_KEY",qe.D),I(Z,"KEYBOARD_RESTART_KEY",qe.R),I(Z,"KEYBOARD_EXIT_KEY",qe.Escape),I(Z,"KEYBOARD_START_KEY",qe.ArrowUp),I(Z,"MAX_SPEED",150),I(Z,"VELOCITY_MULTIPLIER_RATE",7),I(Z,"LATERAL_VELOCITY_ROTATION_RATE",1.15),I(Z,"MAX_RIGHT_ROTATION_ANGLE",Math.PI/2),I(Z,"MAX_LEFT_ROTATION_ANGLE",3*Math.PI/2),I(Z,"ROTATION_RECENTER_RATE",.2),I(Z,"INITIAL_SLOPE",.1),I(Z,"ACCELERATION_RATE",3),I(Z,"BRAKING_RATE",1),I(Z,"CARVING_ADHERENCE_RATE",.9),I(Z,"CARVING_BRAKING_RATE",.01),I(Z,"SLIDING_ADHERENCE_RATE",.6),I(Z,"SLIDING_BRAKING_RATE",.9),I(Z,"SL_SKIER_CONFIG",{windFrictionRate:.0025,carvingRotationRate:3.2,carvingOptimalSpeed:50,slidingRotationRate:4.2,slidingOptimalSpeed:35}),I(Z,"GS_SKIER_CONFIG",{windFrictionRate:.0022,carvingRotationRate:3.1,carvingOptimalSpeed:60,slidingRotationRate:4.1,slidingOptimalSpeed:45}),I(Z,"SG_SKIER_CONFIG",{windFrictionRate:.002,carvingRotationRate:2.6,carvingOptimalSpeed:70,slidingRotationRate:3.2,slidingOptimalSpeed:50}),I(Z,"DH_SKIER_CONFIG",{windFrictionRate:.0018,carvingRotationRate:2.2,carvingOptimalSpeed:75,slidingRotationRate:3.1,slidingOptimalSpeed:60}),I(Z,"GATE_MAX_LEFT_POSITION",Z.DISPLAY_MAX_LEFT_POSITION),I(Z,"GATE_MAX_RIGHT_POSITION",Z.DISPLAY_MAX_RIGHT_POSITION),I(Z,"FINAL_GATE_WIDTH",Z.DISPLAY_WIDTH-2*Z.DISPLAY_MIN_MARGIN),I(Z,"FINAL_GATE_POSITION",Z.DISPLAY_MAX_LEFT_POSITION),I(Z,"GATE_OTHER_SIDE_PROBABILITY",.95),I(Z,"SL_GATES_CONFIG",{maxWidth:190,minWidth:150,maxHorizontalDistance:320,minVerticalDistance:170,maxVerticalDistance:270,minNumber:41,maxNumber:51}),I(Z,"GS_GATES_CONFIG",{maxWidth:200,minWidth:160,maxHorizontalDistance:320,minVerticalDistance:200,maxVerticalDistance:350,minNumber:44,maxNumber:54}),I(Z,"SG_GATES_CONFIG",{maxWidth:240,minWidth:190,maxHorizontalDistance:350,minVerticalDistance:320,maxVerticalDistance:500,minNumber:46,maxNumber:56}),I(Z,"DH_GATES_CONFIG",{maxWidth:250,minWidth:200,maxHorizontalDistance:300,minVerticalDistance:420,maxVerticalDistance:530,minNumber:48,maxNumber:58}),I(Z,"POLE_WIDTH",20),I(Z,"POLE_HEIGHT",40),I(Z,"POLE_DETECTOR_MARGIN",22),I(Z,"FINAL_POLE_WIDTH",30),I(Z,"FINAL_POLE_HEIGHT",80);let N=Z;class fh{constructor(d,a,c,g,p){I(this,"position");I(this,"player");I(this,"date");I(this,"time");I(this,"difference");this.position=d,this.player=a,this.date=c,this.time=g,this.difference=p}}class gh{static getParticlesEmitter(){return new ja({pos:Ut(0,-20),emitterType:Wa.Circle,radius:6,minVel:50,maxVel:200,minAngle:3.4,maxAngle:6,emitRate:300,opacity:.5,fadeFlag:!0,particleLife:800,maxSize:4,minSize:1,beginColor:vn.ExcaliburBlue,isEmitting:!1})}}class yn extends Wi{constructor(a,c){super({pos:Ut(0,0),width:30,height:50,z:10,anchor:Ut(.5,.5),collisionType:wn.Fixed});I(this,"speed",0);I(this,"skierName");I(this,"skierConfig");I(this,"racing",!1);I(this,"finish",!1);I(this,"skierSprite",lt.Skier.toSprite());I(this,"skierCarvingSprite",lt.SkierCarving.toSprite());I(this,"skierSlidingSprite",lt.SkierSliding.toSprite());I(this,"skierBrakingSprite",lt.SkierBraking.toSprite());I(this,"particlesEmitter");this.skierName=a,this.skierConfig=c}onInitialize(){this.graphics.add(this.skierSprite),this.particlesEmitter=gh.getParticlesEmitter(),this.addChild(this.particlesEmitter)}update(a){this.racing?(this.updateRotation(a),this.updateSpeed(a,!1),this.updateVelocity(a),this.updateGraphics(a),this.updateCameraPosition(),this.emitParticles(a)):this.finish?(this.updateSpeed(a,!0),this.updateVelocity(a),this.graphics.use(this.skierBrakingSprite),this.emitBreakingParticles()):a.input.keyboard.isHeld(N.KEYBOARD_START_KEY)&&this.scene.startRace()}finishRace(){this.racing=!1,this.finish=!0,this.graphics.use(this.skierBrakingSprite),this.emitBreakingParticles()}startRace(){this.racing=!0}updateRotation(a){let c=0,g=0;if(this.hasTurningIntention(a)){if(this.hasSlidingIntention(a)){const x=this.speed=270?this.rotation+x:this.rotation-x)}const p=g*(180/Math.PI);p>180&&p<270?this.rotation=N.MAX_LEFT_ROTATION_ANGLE:p<180&&p>90?this.rotation=N.MAX_RIGHT_ROTATION_ANGLE:this.rotation=g}updateSpeed(a,c){let g=this.rotation*(180/Math.PI);g>=270&&(g=360-g);let p=N.ACCELERATION_RATE*N.INITIAL_SLOPE;p-=p*g/90,p-=this.skierConfig.windFrictionRate*this.speed,c?p-=N.BRAKING_RATE:this.hasSlidingIntention(a)?p-=N.SLIDING_BRAKING_RATE:this.hasCarvingIntention(a)?p-=N.CARVING_BRAKING_RATE:this.hasBreakingIntention(a)&&(p-=N.BRAKING_RATE);const x=this.speed+p;x<0?this.speed=0:this.speed=x}updateVelocity(a){let c=0,g=0;const p=this.getAdherenceRate(a),x=this.rotation*(180/Math.PI);if(x===0)c=0,g=this.speed;else if(x<=90){const C=x/90*this.speed;c=C*N.LATERAL_VELOCITY_ROTATION_RATE*p,g=Math.max(0,this.speed-p*C)}else{const C=(360-x)/90*this.speed;c=-C*N.LATERAL_VELOCITY_ROTATION_RATE*p,g=Math.max(0,this.speed-p*C)}this.vel=Ut(c*N.VELOCITY_MULTIPLIER_RATE,-g*N.VELOCITY_MULTIPLIER_RATE)}updateCameraPosition(){this.scene.updateGhost(this.pos.y)}getAdherenceRate(a){let c=1;return this.hasTurningIntention(a)&&(c=this.hasSlidingIntention(a)?N.SLIDING_ADHERENCE_RATE:N.CARVING_ADHERENCE_RATE),c}updateGraphics(a){this.hasSlidingIntention(a)?(this.graphics.use(this.skierSlidingSprite),this.graphics.flipHorizontal=this.hasLeftSlidingIntention(a)):this.hasBreakingIntention(a)?this.graphics.use(this.skierBrakingSprite):this.hasCarvingIntention(a)?(this.graphics.use(this.skierCarvingSprite),this.graphics.flipHorizontal=this.hasLeftCarvingIntention(a)):this.graphics.use(this.skierSprite)}emitParticles(a){if(this.particlesEmitter){const c=this.speed/N.MAX_SPEED;this.hasSlidingIntention(a)?(this.particlesEmitter.pos.y=5,this.particlesEmitter.radius=6,this.particlesEmitter.particleLife=1500,this.hasLeftSlidingIntention(a)?(this.particlesEmitter.maxAngle=1.6,this.particlesEmitter.minAngle=.5,this.particlesEmitter.pos.x=12):(this.particlesEmitter.maxAngle=2.6,this.particlesEmitter.minAngle=1.6,this.particlesEmitter.pos.x=-12),this.particlesEmitter.emitParticles(c*30)):this.hasCarvingIntention(a)?(this.particlesEmitter.pos.y=5,this.particlesEmitter.radius=1,this.particlesEmitter.particleLife=450,this.particlesEmitter.maxAngle=4.8,this.particlesEmitter.minAngle=4.6,this.particlesEmitter.pos.x=this.hasLeftCarvingIntention(a)?12:-12,this.particlesEmitter.emitParticles(c*15)):this.hasBreakingIntention(a)?this.emitBreakingParticles():this.speed>0&&(this.particlesEmitter.pos.y=0,this.particlesEmitter.radius=3,this.particlesEmitter.particleLife=500,this.particlesEmitter.maxAngle=6,this.particlesEmitter.minAngle=3.4,this.particlesEmitter.pos.x=0,this.particlesEmitter.emitParticles(c*5))}}emitBreakingParticles(){this.particlesEmitter.pos.y=-20,this.particlesEmitter.radius=6,this.particlesEmitter.particleLife=1500,this.particlesEmitter.maxAngle=6,this.particlesEmitter.minAngle=3.4,this.particlesEmitter.pos.x=0,this.particlesEmitter.emitParticles(this.speed/N.MAX_SPEED*50)}hasBreakingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_BRAKE)}hasCarvingIntention(a){return this.hasLeftCarvingIntention(a)||this.hasRightCarvingIntention(a)}hasSlidingIntention(a){return this.hasLeftSlidingIntention(a)||this.hasRightSlidingIntention(a)}hasLeftTurningIntention(a){return this.hasLeftCarvingIntention(a)||this.hasLeftSlidingIntention(a)}hasLeftSlidingIntention(a){return this.hasLeftCarvingIntention(a)&&this.hasBreakingIntention(a)}hasRightSlidingIntention(a){return this.hasRightCarvingIntention(a)&&this.hasBreakingIntention(a)}hasLeftCarvingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_CARVE_LEFT)}hasRightCarvingIntention(a){return a.input.keyboard.isHeld(N.KEYBOARD_CONTROL_CARVE_RIGHT)}hasTurningIntention(a){return this.hasSlidingIntention(a)||this.hasCarvingIntention(a)}}class pn extends Wi{constructor(d,a,c=!1){super({pos:d,width:c?N.FINAL_POLE_WIDTH:N.POLE_WIDTH,height:c?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT,anchor:Ut(0,.5),collisionType:wn.Active}),c?this.graphics.use(lt.FinalPole.toSprite()):this.graphics.use(a==="red"?lt.PoleRed.toSprite():lt.PoleBlue.toSprite())}onInitialize(){this.on("collisionstart",d=>this.onPreCollision(d))}onPreCollision(d){d.other instanceof yn&&this.scene.engine.soundPlayer.playSound(lt.PoleHittingSound,.2)}}class ph extends Wi{constructor(d,a,c=!1){super({pos:d,width:a,height:c?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT/2,anchor:Ut(0,c?.5:0),collisionType:wn.Passive})}onInitialize(){this.on("precollision",d=>this.onPreCollision(d))}onPreCollision(d){d.other instanceof yn&&(this.parent.emit("passed"),this.kill())}}class mn extends Wi{constructor(a,c,g,p,x=!1){super({pos:a,width:c,height:x?N.FINAL_POLE_HEIGHT:N.POLE_HEIGHT,anchor:Ut(0,.5)});I(this,"isFinalGate");I(this,"passed",!1);I(this,"leftPole");I(this,"rightPole");I(this,"gateDetector");I(this,"gateNumber");I(this,"polesColor");I(this,"missed",!1);this.isFinalGate=x,this.polesColor=g,this.gateNumber=p}onInitialize(){this.on("passed",()=>this.onGatePassed())}update(){this.isOnScreen()&&!this.children.length&&this.buildComponents(),!this.isFinalGate&&!this.passed&&!this.missed&&this.shouldBePassed()&&(this.scene.addPenalty(),this.missed=!0),this.canBeDestroy()&&this.kill()}getStockableGate(){return{x:this.pos.x,y:this.pos.y,color:this.polesColor,width:this.width,gateNumber:this.gateNumber,isFinal:this.isFinalGate}}isOnScreen(){return Math.abs(this.scene.camera.y-this.pos.y)this.scene.camera.pos.y)}canBeDestroy(){return this.scene.camera.y-this.pos.y<-N.DISPLAY_HEIGHT*N.VISIBLE_ON_SCREEN_MARGIN_FACTOR}buildComponents(){const a=this.isFinalGate?N.FINAL_POLE_WIDTH:N.POLE_WIDTH;this.leftPole=new pn(Ut(0,0),this.polesColor,this.isFinalGate),this.gateDetector=new ph(Ut(a+N.POLE_DETECTOR_MARGIN,0),this.width-2*(a+N.POLE_DETECTOR_MARGIN),this.isFinalGate),this.rightPole=new pn(Ut(this.width-a,0),this.polesColor,this.isFinalGate),this.addChild(this.leftPole),this.addChild(this.gateDetector),this.addChild(this.rightPole)}onGatePassed(){this.passed=!0,this.isFinalGate?this.scene.stopRace():this.updatePassedPolesGraphics()}updatePassedPolesGraphics(){this.children.forEach(a=>{const c=this.polesColor==="red"?lt.PolePassedRed.toSprite():lt.PolePassedBlue.toSprite();a instanceof pn&&a.graphics.use(c)})}}class oo{constructor(d,a,c,g,p){I(this,"name");I(this,"style");I(this,"date");I(this,"gates");I(this,"records");this.name=d,this.style=a,this.date=c,this.gates=g,this.records=p}toStockable(){return new xn(this.name,this.style,this.date,this.gates.map(d=>d.getStockableGate()),this.records)}}var ti=(u=>(u.SL="SL",u.GS="GS",u.SG="SG",u.DH="DH",u))(ti||{});class fe{static designTrack(d,a){const c=[],g=fe.getGatesConfig(a),p=this.getRandomGatesNumber(g);console.log("TrackBuilder - Designing a new track of ",p," gates");let x=fe.getRandomGateWidth(g),C=fe.getNextGatePosition(x,g);for(let T=0;T0?"red":"blue",T+1);c.push(B),x=fe.getRandomGateWidth(g),C=fe.getNextGatePosition(x,g,C)}return c.push(fe.generateFinalGate(C.y)),new oo(d,a,new Date,c,[])}static buildTrack(d){console.log("TrackBuilder - Rebuilding an existing track");const a=[];return d.gates.forEach(c=>{a.push(new mn(Ut(c.x,c.y),c.width,c.color,c.gateNumber,c.isFinal))}),new oo(d.name,d.style,d.date,a,d.records)}static getRandomGatesNumber(d){return Math.floor(d.minNumber+Math.random()*(d.maxNumber-d.minNumber))}static getRandomGateWidth(d){return d.minWidth+Math.random()*(d.maxWidth-d.minWidth)}static generateFinalGate(d){return new mn(Ut(N.FINAL_GATE_POSITION,d),N.FINAL_GATE_WIDTH,"red",void 0,!0)}static getNextGatePosition(d,a,c){const g=Math.random(),p=N.GATE_MAX_RIGHT_POSITION-d;if(c){const C=this.getGateSide(c)==="left"?g>=N.GATE_OTHER_SIDE_PROBABILITY:ga.maxHorizontalDistance?P=fe.furtherAutorizedXPosition(c.x,C?"left":"right",p,a):P=T;const z=c.y-(a.minVerticalDistance+Math.random()*(a.maxVerticalDistance-a.minVerticalDistance));return Ut(P,z)}else{const x=g>.5,C=p*Math.random();return Ut(x?-C:C,-((a.maxVerticalDistance+a.minVerticalDistance)/2))}}static getGatesConfig(d){return d===ti.SL?N.SL_GATES_CONFIG:d===ti.GS?N.GS_GATES_CONFIG:d===ti.SG?N.SG_GATES_CONFIG:N.DH_GATES_CONFIG}static furtherAutorizedXPosition(d,a,c,g){return a==="left"?Math.max(d-g.maxHorizontalDistance,N.GATE_MAX_LEFT_POSITION):Math.min(d+g.maxHorizontalDistance,c)}static getDistance(d,a){return d>=0&&a>=0?Math.abs(d-a):d>=0&&a<0?d-a:Math.abs(a-d)}static getGateSide(d){return d.x<0?"left":d.x>0?"right":"middle"}}class xn{constructor(d,a,c,g,p){I(this,"name");I(this,"style");I(this,"date");I(this,"gates");I(this,"records");this.name=d,this.style=a,this.date=c,this.gates=g,this.records=p}toTrack(){return fe.buildTrack(this)}}function be(u){const d=Object.prototype.toString.call(u);return u instanceof Date||typeof u=="object"&&d==="[object Date]"?new u.constructor(+u):typeof u=="number"||d==="[object Number]"||typeof u=="string"||d==="[object String]"?new Date(u):new Date(NaN)}function ei(u,d){return u instanceof Date?new u.constructor(d):new Date(d)}const po=6048e5,mh=864e5;let _h={};function bs(){return _h}function Yi(u,d){var C,T,B,P;const a=bs(),c=(d==null?void 0:d.weekStartsOn)??((T=(C=d==null?void 0:d.locale)==null?void 0:C.options)==null?void 0:T.weekStartsOn)??a.weekStartsOn??((P=(B=a.locale)==null?void 0:B.options)==null?void 0:P.weekStartsOn)??0,g=be(u),p=g.getDay(),x=(p=g.getTime()?a+1:d.getTime()>=x.getTime()?a:a-1}function ao(u){const d=be(u);return d.setHours(0,0,0,0),d}function ho(u){const d=new Date(Date.UTC(u.getFullYear(),u.getMonth(),u.getDate(),u.getHours(),u.getMinutes(),u.getSeconds(),u.getMilliseconds()));return d.setUTCFullYear(u.getFullYear()),u.getTime()-d.getTime()}function vh(u,d){const a=ao(u),c=ao(d),g=a.getTime()-ho(a),p=c.getTime()-ho(c);return Math.round((g-p)/mh)}function xh(u){const d=mo(u),a=ei(u,0);return a.setFullYear(d,0,4),a.setHours(0,0,0,0),ys(a)}function wh(u){return u instanceof Date||typeof u=="object"&&Object.prototype.toString.call(u)==="[object Date]"}function Ah(u){if(!wh(u)&&typeof u!="number")return!1;const d=be(u);return!isNaN(Number(d))}function yh(u){const d=be(u),a=ei(u,0);return a.setFullYear(d.getFullYear(),0,1),a.setHours(0,0,0,0),a}const bh={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},Eh=(u,d,a)=>{let c;const g=bh[u];return typeof g=="string"?c=g:d===1?c=g.one:c=g.other.replace("{{count}}",d.toString()),a!=null&&a.addSuffix?a.comparison&&a.comparison>0?"in "+c:c+" ago":c};function _n(u){return(d={})=>{const a=d.width?String(d.width):u.defaultWidth;return u.formats[a]||u.formats[u.defaultWidth]}}const Ch={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},Sh={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Ih={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},Th={date:_n({formats:Ch,defaultWidth:"full"}),time:_n({formats:Sh,defaultWidth:"full"}),dateTime:_n({formats:Ih,defaultWidth:"full"})},Ph={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Rh=(u,d,a,c)=>Ph[u];function Hi(u){return(d,a)=>{const c=a!=null&&a.context?String(a.context):"standalone";let g;if(c==="formatting"&&u.formattingValues){const x=u.defaultFormattingWidth||u.defaultWidth,C=a!=null&&a.width?String(a.width):x;g=u.formattingValues[C]||u.formattingValues[x]}else{const x=u.defaultWidth,C=a!=null&&a.width?String(a.width):u.defaultWidth;g=u.values[C]||u.values[x]}const p=u.argumentCallback?u.argumentCallback(d):d;return g[p]}}const Bh={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},kh={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Mh={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Dh={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Fh={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Oh={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Uh=(u,d)=>{const a=Number(u),c=a%100;if(c>20||c<10)switch(c%10){case 1:return a+"st";case 2:return a+"nd";case 3:return a+"rd"}return a+"th"},Lh={ordinalNumber:Uh,era:Hi({values:Bh,defaultWidth:"wide"}),quarter:Hi({values:kh,defaultWidth:"wide",argumentCallback:u=>u-1}),month:Hi({values:Mh,defaultWidth:"wide"}),day:Hi({values:Dh,defaultWidth:"wide"}),dayPeriod:Hi({values:Fh,defaultWidth:"wide",formattingValues:Oh,defaultFormattingWidth:"wide"})};function Qi(u){return(d,a={})=>{const c=a.width,g=c&&u.matchPatterns[c]||u.matchPatterns[u.defaultMatchWidth],p=d.match(g);if(!p)return null;const x=p[0],C=c&&u.parsePatterns[c]||u.parsePatterns[u.defaultParseWidth],T=Array.isArray(C)?Gh(C,z=>z.test(x)):zh(C,z=>z.test(x));let B;B=u.valueCallback?u.valueCallback(T):T,B=a.valueCallback?a.valueCallback(B):B;const P=d.slice(x.length);return{value:B,rest:P}}}function zh(u,d){for(const a in u)if(Object.prototype.hasOwnProperty.call(u,a)&&d(u[a]))return a}function Gh(u,d){for(let a=0;a{const c=d.match(u.matchPattern);if(!c)return null;const g=c[0],p=d.match(u.parsePattern);if(!p)return null;let x=u.valueCallback?u.valueCallback(p[0]):p[0];x=a.valueCallback?a.valueCallback(x):x;const C=d.slice(g.length);return{value:x,rest:C}}}const Hh=/^(\d+)(th|st|nd|rd)?/i,Qh=/\d+/i,Yh={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Wh={any:[/^b/i,/^(a|c)/i]},Zh={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Jh={any:[/1/i,/2/i,/3/i,/4/i]},jh={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Vh={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Kh={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Xh={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},qh={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},$h={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},tl={ordinalNumber:Nh({matchPattern:Hh,parsePattern:Qh,valueCallback:u=>parseInt(u,10)}),era:Qi({matchPatterns:Yh,defaultMatchWidth:"wide",parsePatterns:Wh,defaultParseWidth:"any"}),quarter:Qi({matchPatterns:Zh,defaultMatchWidth:"wide",parsePatterns:Jh,defaultParseWidth:"any",valueCallback:u=>u+1}),month:Qi({matchPatterns:jh,defaultMatchWidth:"wide",parsePatterns:Vh,defaultParseWidth:"any"}),day:Qi({matchPatterns:Kh,defaultMatchWidth:"wide",parsePatterns:Xh,defaultParseWidth:"any"}),dayPeriod:Qi({matchPatterns:qh,defaultMatchWidth:"any",parsePatterns:$h,defaultParseWidth:"any"})},el={code:"en-US",formatDistance:Eh,formatLong:Th,formatRelative:Rh,localize:Lh,match:tl,options:{weekStartsOn:0,firstWeekContainsDate:1}};function il(u){const d=be(u);return vh(d,yh(d))+1}function sl(u){const d=be(u),a=ys(d).getTime()-xh(d).getTime();return Math.round(a/po)+1}function _o(u,d){var P,z,G,O;const a=be(u),c=a.getFullYear(),g=bs(),p=(d==null?void 0:d.firstWeekContainsDate)??((z=(P=d==null?void 0:d.locale)==null?void 0:P.options)==null?void 0:z.firstWeekContainsDate)??g.firstWeekContainsDate??((O=(G=g.locale)==null?void 0:G.options)==null?void 0:O.firstWeekContainsDate)??1,x=ei(u,0);x.setFullYear(c+1,0,p),x.setHours(0,0,0,0);const C=Yi(x,d),T=ei(u,0);T.setFullYear(c,0,p),T.setHours(0,0,0,0);const B=Yi(T,d);return a.getTime()>=C.getTime()?c+1:a.getTime()>=B.getTime()?c:c-1}function nl(u,d){var C,T,B,P;const a=bs(),c=(d==null?void 0:d.firstWeekContainsDate)??((T=(C=d==null?void 0:d.locale)==null?void 0:C.options)==null?void 0:T.firstWeekContainsDate)??a.firstWeekContainsDate??((P=(B=a.locale)==null?void 0:B.options)==null?void 0:P.firstWeekContainsDate)??1,g=_o(u,d),p=ei(u,0);return p.setFullYear(g,0,c),p.setHours(0,0,0,0),Yi(p,d)}function rl(u,d){const a=be(u),c=Yi(a,d).getTime()-nl(a,d).getTime();return Math.round(c/po)+1}function ut(u,d){const a=u<0?"-":"",c=Math.abs(u).toString().padStart(d,"0");return a+c}const Ue={y(u,d){const a=u.getFullYear(),c=a>0?a:1-a;return ut(d==="yy"?c%100:c,d.length)},M(u,d){const a=u.getMonth();return d==="M"?String(a+1):ut(a+1,2)},d(u,d){return ut(u.getDate(),d.length)},a(u,d){const a=u.getHours()/12>=1?"pm":"am";switch(d){case"a":case"aa":return a.toUpperCase();case"aaa":return a;case"aaaaa":return a[0];case"aaaa":default:return a==="am"?"a.m.":"p.m."}},h(u,d){return ut(u.getHours()%12||12,d.length)},H(u,d){return ut(u.getHours(),d.length)},m(u,d){return ut(u.getMinutes(),d.length)},s(u,d){return ut(u.getSeconds(),d.length)},S(u,d){const a=d.length,c=u.getMilliseconds(),g=Math.floor(c*Math.pow(10,a-3));return ut(g,d.length)}},yi={am:"am",pm:"pm",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ol={G:function(u,d,a){const c=u.getFullYear()>0?1:0;switch(d){case"G":case"GG":case"GGG":return a.era(c,{width:"abbreviated"});case"GGGGG":return a.era(c,{width:"narrow"});case"GGGG":default:return a.era(c,{width:"wide"})}},y:function(u,d,a){if(d==="yo"){const c=u.getFullYear(),g=c>0?c:1-c;return a.ordinalNumber(g,{unit:"year"})}return Ue.y(u,d)},Y:function(u,d,a,c){const g=_o(u,c),p=g>0?g:1-g;if(d==="YY"){const x=p%100;return ut(x,2)}return d==="Yo"?a.ordinalNumber(p,{unit:"year"}):ut(p,d.length)},R:function(u,d){const a=mo(u);return ut(a,d.length)},u:function(u,d){const a=u.getFullYear();return ut(a,d.length)},Q:function(u,d,a){const c=Math.ceil((u.getMonth()+1)/3);switch(d){case"Q":return String(c);case"QQ":return ut(c,2);case"Qo":return a.ordinalNumber(c,{unit:"quarter"});case"QQQ":return a.quarter(c,{width:"abbreviated",context:"formatting"});case"QQQQQ":return a.quarter(c,{width:"narrow",context:"formatting"});case"QQQQ":default:return a.quarter(c,{width:"wide",context:"formatting"})}},q:function(u,d,a){const c=Math.ceil((u.getMonth()+1)/3);switch(d){case"q":return String(c);case"qq":return ut(c,2);case"qo":return a.ordinalNumber(c,{unit:"quarter"});case"qqq":return a.quarter(c,{width:"abbreviated",context:"standalone"});case"qqqqq":return a.quarter(c,{width:"narrow",context:"standalone"});case"qqqq":default:return a.quarter(c,{width:"wide",context:"standalone"})}},M:function(u,d,a){const c=u.getMonth();switch(d){case"M":case"MM":return Ue.M(u,d);case"Mo":return a.ordinalNumber(c+1,{unit:"month"});case"MMM":return a.month(c,{width:"abbreviated",context:"formatting"});case"MMMMM":return a.month(c,{width:"narrow",context:"formatting"});case"MMMM":default:return a.month(c,{width:"wide",context:"formatting"})}},L:function(u,d,a){const c=u.getMonth();switch(d){case"L":return String(c+1);case"LL":return ut(c+1,2);case"Lo":return a.ordinalNumber(c+1,{unit:"month"});case"LLL":return a.month(c,{width:"abbreviated",context:"standalone"});case"LLLLL":return a.month(c,{width:"narrow",context:"standalone"});case"LLLL":default:return a.month(c,{width:"wide",context:"standalone"})}},w:function(u,d,a,c){const g=rl(u,c);return d==="wo"?a.ordinalNumber(g,{unit:"week"}):ut(g,d.length)},I:function(u,d,a){const c=sl(u);return d==="Io"?a.ordinalNumber(c,{unit:"week"}):ut(c,d.length)},d:function(u,d,a){return d==="do"?a.ordinalNumber(u.getDate(),{unit:"date"}):Ue.d(u,d)},D:function(u,d,a){const c=il(u);return d==="Do"?a.ordinalNumber(c,{unit:"dayOfYear"}):ut(c,d.length)},E:function(u,d,a){const c=u.getDay();switch(d){case"E":case"EE":case"EEE":return a.day(c,{width:"abbreviated",context:"formatting"});case"EEEEE":return a.day(c,{width:"narrow",context:"formatting"});case"EEEEEE":return a.day(c,{width:"short",context:"formatting"});case"EEEE":default:return a.day(c,{width:"wide",context:"formatting"})}},e:function(u,d,a,c){const g=u.getDay(),p=(g-c.weekStartsOn+8)%7||7;switch(d){case"e":return String(p);case"ee":return ut(p,2);case"eo":return a.ordinalNumber(p,{unit:"day"});case"eee":return a.day(g,{width:"abbreviated",context:"formatting"});case"eeeee":return a.day(g,{width:"narrow",context:"formatting"});case"eeeeee":return a.day(g,{width:"short",context:"formatting"});case"eeee":default:return a.day(g,{width:"wide",context:"formatting"})}},c:function(u,d,a,c){const g=u.getDay(),p=(g-c.weekStartsOn+8)%7||7;switch(d){case"c":return String(p);case"cc":return ut(p,d.length);case"co":return a.ordinalNumber(p,{unit:"day"});case"ccc":return a.day(g,{width:"abbreviated",context:"standalone"});case"ccccc":return a.day(g,{width:"narrow",context:"standalone"});case"cccccc":return a.day(g,{width:"short",context:"standalone"});case"cccc":default:return a.day(g,{width:"wide",context:"standalone"})}},i:function(u,d,a){const c=u.getDay(),g=c===0?7:c;switch(d){case"i":return String(g);case"ii":return ut(g,d.length);case"io":return a.ordinalNumber(g,{unit:"day"});case"iii":return a.day(c,{width:"abbreviated",context:"formatting"});case"iiiii":return a.day(c,{width:"narrow",context:"formatting"});case"iiiiii":return a.day(c,{width:"short",context:"formatting"});case"iiii":default:return a.day(c,{width:"wide",context:"formatting"})}},a:function(u,d,a){const g=u.getHours()/12>=1?"pm":"am";switch(d){case"a":case"aa":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"aaa":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"aaaa":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},b:function(u,d,a){const c=u.getHours();let g;switch(c===12?g=yi.noon:c===0?g=yi.midnight:g=c/12>=1?"pm":"am",d){case"b":case"bb":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"bbb":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"bbbb":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},B:function(u,d,a){const c=u.getHours();let g;switch(c>=17?g=yi.evening:c>=12?g=yi.afternoon:c>=4?g=yi.morning:g=yi.night,d){case"B":case"BB":case"BBB":return a.dayPeriod(g,{width:"abbreviated",context:"formatting"});case"BBBBB":return a.dayPeriod(g,{width:"narrow",context:"formatting"});case"BBBB":default:return a.dayPeriod(g,{width:"wide",context:"formatting"})}},h:function(u,d,a){if(d==="ho"){let c=u.getHours()%12;return c===0&&(c=12),a.ordinalNumber(c,{unit:"hour"})}return Ue.h(u,d)},H:function(u,d,a){return d==="Ho"?a.ordinalNumber(u.getHours(),{unit:"hour"}):Ue.H(u,d)},K:function(u,d,a){const c=u.getHours()%12;return d==="Ko"?a.ordinalNumber(c,{unit:"hour"}):ut(c,d.length)},k:function(u,d,a){let c=u.getHours();return c===0&&(c=24),d==="ko"?a.ordinalNumber(c,{unit:"hour"}):ut(c,d.length)},m:function(u,d,a){return d==="mo"?a.ordinalNumber(u.getMinutes(),{unit:"minute"}):Ue.m(u,d)},s:function(u,d,a){return d==="so"?a.ordinalNumber(u.getSeconds(),{unit:"second"}):Ue.s(u,d)},S:function(u,d){return Ue.S(u,d)},X:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();if(p===0)return"Z";switch(d){case"X":return co(p);case"XXXX":case"XX":return $e(p);case"XXXXX":case"XXX":default:return $e(p,":")}},x:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"x":return co(p);case"xxxx":case"xx":return $e(p);case"xxxxx":case"xxx":default:return $e(p,":")}},O:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"O":case"OO":case"OOO":return"GMT"+lo(p,":");case"OOOO":default:return"GMT"+$e(p,":")}},z:function(u,d,a,c){const p=(c._originalDate||u).getTimezoneOffset();switch(d){case"z":case"zz":case"zzz":return"GMT"+lo(p,":");case"zzzz":default:return"GMT"+$e(p,":")}},t:function(u,d,a,c){const g=c._originalDate||u,p=Math.floor(g.getTime()/1e3);return ut(p,d.length)},T:function(u,d,a,c){const p=(c._originalDate||u).getTime();return ut(p,d.length)}};function lo(u,d=""){const a=u>0?"-":"+",c=Math.abs(u),g=Math.floor(c/60),p=c%60;return p===0?a+String(g):a+String(g)+d+ut(p,2)}function co(u,d){return u%60===0?(u>0?"-":"+")+ut(Math.abs(u)/60,2):$e(u,d)}function $e(u,d=""){const a=u>0?"-":"+",c=Math.abs(u),g=ut(Math.floor(c/60),2),p=ut(c%60,2);return a+g+d+p}const uo=(u,d)=>{switch(u){case"P":return d.date({width:"short"});case"PP":return d.date({width:"medium"});case"PPP":return d.date({width:"long"});case"PPPP":default:return d.date({width:"full"})}},vo=(u,d)=>{switch(u){case"p":return d.time({width:"short"});case"pp":return d.time({width:"medium"});case"ppp":return d.time({width:"long"});case"pppp":default:return d.time({width:"full"})}},al=(u,d)=>{const a=u.match(/(P+)(p+)?/)||[],c=a[1],g=a[2];if(!g)return uo(u,d);let p;switch(c){case"P":p=d.dateTime({width:"short"});break;case"PP":p=d.dateTime({width:"medium"});break;case"PPP":p=d.dateTime({width:"long"});break;case"PPPP":default:p=d.dateTime({width:"full"});break}return p.replace("{{date}}",uo(c,d)).replace("{{time}}",vo(g,d))},hl={p:vo,P:al},ll=/^D+$/,cl=/^Y+$/,dl=["D","DD","YY","YYYY"];function ul(u){return ll.test(u)}function fl(u){return cl.test(u)}function fo(u,d,a){const c=gl(u,d,a);if(console.warn(c),dl.includes(u))throw new RangeError(c)}function gl(u,d,a){const c=u[0]==="Y"?"years":"days of the month";return`Use \`${u.toLowerCase()}\` instead of \`${u}\` (in \`${d}\`) for formatting ${c} to the input \`${a}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const pl=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,ml=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,_l=/^'([^]*?)'?$/,vl=/''/g,xl=/[a-zA-Z]/;function ye(u,d,a){var P,z,G,O,H,$,et,K;const c=bs(),g=(a==null?void 0:a.locale)??c.locale??el,p=(a==null?void 0:a.firstWeekContainsDate)??((z=(P=a==null?void 0:a.locale)==null?void 0:P.options)==null?void 0:z.firstWeekContainsDate)??c.firstWeekContainsDate??((O=(G=c.locale)==null?void 0:G.options)==null?void 0:O.firstWeekContainsDate)??1,x=(a==null?void 0:a.weekStartsOn)??(($=(H=a==null?void 0:a.locale)==null?void 0:H.options)==null?void 0:$.weekStartsOn)??c.weekStartsOn??((K=(et=c.locale)==null?void 0:et.options)==null?void 0:K.weekStartsOn)??0,C=be(u);if(!Ah(C))throw new RangeError("Invalid time value");const T={firstWeekContainsDate:p,weekStartsOn:x,locale:g,_originalDate:C};return d.match(ml).map(function(st){const ht=st[0];if(ht==="p"||ht==="P"){const mt=hl[ht];return mt(st,g.formatLong)}return st}).join("").match(pl).map(function(st){if(st==="''")return"'";const ht=st[0];if(ht==="'")return wl(st);const mt=ol[ht];if(mt)return!(a!=null&&a.useAdditionalWeekYearTokens)&&fl(st)&&fo(st,d,String(u)),!(a!=null&&a.useAdditionalDayOfYearTokens)&&ul(st)&&fo(st,d,String(u)),mt(C,st,g.localize,T);if(ht.match(xl))throw new RangeError("Format string contains an unescaped latin alphabet character `"+ht+"`");return st}).join("")}function wl(u){const d=u.match(_l);return d?d[1].replace(vl,"'"):u}class Al{constructor(){}loadTrack(d,a){const c=this.getTrackFromLocalStorage(d);if(c)return c.toTrack();const g=fe.designTrack(d,a),p=g.toStockable();return this.saveTrackToLocalStorage(p),g}importDefaultTracks(){N.DEFAULT_TRACKS.forEach(d=>{localStorage.getItem(`track_${d}`)||fetch(`tracks/${d}.json`).then(a=>a.json()).then(a=>{localStorage.setItem(`track_${d}`,JSON.stringify(a))})})}saveRecord(d,a){const c=this.getTrackFromLocalStorage(d);return c&&(c.records.push(a),c.records.sort((g,p)=>g.timing-p.timing),this.saveTrackToLocalStorage(c)),{position:c.records.filter(g=>g.timingc.timing===a)+1}getRecord(d){const a=this.getRecords(d);return a.length?a[0].timing:null}getRecords(d){var a;return((a=this.getTrackFromLocalStorage(d))==null?void 0:a.records)||[]}saveTrackToLocalStorage(d){localStorage.setItem(`track_${d.name}`,JSON.stringify(d))}getTrackStyle(d){var a;return(a=this.getTrackFromLocalStorage(d))==null?void 0:a.style}getTrackFromLocalStorage(d){let a=localStorage.getItem("track_"+d);if(a){const c=Object.assign(new xn,JSON.parse(a));return new xn(c.name,c.style,c.date,c.gates,c.records)}return null}getCurrentRecords(d){const a=this.getTrackFromLocalStorage(d).records;return a==null?void 0:a.map((c,g)=>{const p=c.timing-a[0].timing;return new fh(g+1,c.player,ye(c.date,"d MMM yyyy HH:mm"),ye(c.timing,"mm:ss:SS"),p?ye(p,"ss:SS"):"")})}}class yl{constructor(d,a,c,g,p){I(this,"raceNumber");I(this,"trackName");I(this,"trackStyle");I(this,"skier1Name");I(this,"skier2Name");I(this,"skier1Timing");I(this,"skier2Timing");this.raceNumber=d,this.trackName=a,this.trackStyle=c,this.skier1Name=g,this.skier2Name=p}getWinner(){return this.isCompleted()?this.skier1Timing(a.raceNumber===d.raceNumber&&a.setTiming(d.skierName,d.timing),a))}getNextRace(){return this.racesResults.find(d=>!d.isCompleted())||null}getActualRankings(){let d=0,a=0,c=0,g=0;return this.racesResults.filter(p=>p.isCompleted()).forEach(p=>{p.getWinner()===this.skier1Name?d++:a++,c+=p.skier1Timing,g+=p.skier2Timing}),[new go(this.skier1Name,d,c),new go(this.skier2Name,a,g)].sort((p,x)=>p.time-x.time)}initRacesResults(d){this.racesResults=[];for(let a=1;a<=d;a++)this.racesResults.push(new yl(a,this.trackName,this.trackStyle,this.skier1Name,this.skier2Name))}}class El extends An{constructor(a){super();I(this,"headerLogoUi",document.getElementById("header-logo"));I(this,"raceSetupUi",document.getElementById("event-setup"));I(this,"trackInput",document.getElementById("track-input"));I(this,"trackStyleSelect",document.getElementById("track-style-select"));I(this,"skier1Input",document.getElementById("skier-1-input"));I(this,"skier2Input",document.getElementById("skier-2-input"));I(this,"racesNumberInput",document.getElementById("races-number-input"));I(this,"setupCompletedButton",document.getElementById("setup-completed-button"));this.engine=a,this.listenSetupCompleted()}onActivate(a){this.showHeaderLogoUi(),this.prepareRaceSetup()}onDeactivate(a){this.cleanRaceSetup()}prepareRaceSetup(){this.raceSetupUi.style.display="flex",this.engine.soundPlayer.showButton()}cleanRaceSetup(){this.raceSetupUi.style.display="none"}listenSetupCompleted(){this.setupCompletedButton.addEventListener("click",()=>{this.completeSetup()})}completeSetup(){const a=this.trackInput.value.toLowerCase()||N.DEFAULT_TRACKS[0],c=this.trackStyleSelect.value,g=this.skier1Input.value||"Skier 1",p=this.skier2Input.value||"Skier 2",x=+this.racesNumberInput.value||1,C=new bl(a,this.engine.trackManager.getTrackStyle(a)||c,g,p!==g?p:`${p} 2`,x);this.engine.goToScene("eventManager",{eventConfig:C})}showHeaderLogoUi(){this.headerLogoUi.style.display="inline"}}class Cl{constructor(){I(this,"resultUi",document.getElementById("result"));I(this,"resultsContainerUi",document.getElementById("results-container"));I(this,"trackNameUi",document.getElementById("track-name"));I(this,"speedometerUi",document.getElementById("speedometer"));I(this,"timerUi",document.getElementById("timer"));I(this,"backToManagerButton",document.getElementById("back-to-manager"))}buildUi(d){this.displayTrackName(d)}displayRacingUi(){this.speedometerUi.style.display="flex",this.timerUi.style.display="flex"}updateRacingUi(d,a){this.speedometerUi.innerText=`${Math.floor(d)} km/h`,this.timerUi.innerText=`${ye(a,"mm:ss:SS")}`}displayResultUi(d,a){this.resultUi.style.display="flex",this.updateResultUi(d,a)}hideUi(){this.hideTrackName(),this.hideRacingUi(),this.hideResultUi()}hideRacingUi(){this.speedometerUi.style.display="none",this.timerUi.style.display="none"}hideResultUi(){this.resultUi.style.display="none"}updateResultUi(d,a){location.hash="",this.resultsContainerUi.innerHTML=this.prepareResultsTable(d,a),location.hash="startPosition"}displayTrackName(d){this.trackNameUi.innerText=d,this.trackNameUi.style.display="flex"}hideTrackName(){this.trackNameUi.style.display="none"}prepareResultsTable(d,a){return d.records.map(c=>{const g=c.position===d.position,p=c.position===(d.position-4||1),x=g&&a?`${c.time}
missed ${a} gate${a>1?"s":""}`:`${c.time}`;return`
+
${c.position}
+
${c.player}
+
${c.date}
+
${x}
+
${c.difference?"+ "+c.difference:""}
+
`}).join("")}}class Sl{constructor(d){I(this,"player");I(this,"date");I(this,"timing");this.player=d.skierName,this.date=d.date,this.timing=d.timing}}class Il{constructor(d,a,c,g){I(this,"raceNumber");I(this,"skierName");I(this,"date");I(this,"timing");this.raceNumber=d,this.skierName=a,this.date=c,this.timing=g}}class Tl extends An{constructor(a){super();I(this,"uiManager",new Cl);I(this,"uiTimer",new Va({interval:50,repeats:!0,fcn:()=>this.updateRacingUi()}));I(this,"raceConfig");I(this,"track");I(this,"skier");I(this,"skierGhost");I(this,"gates",[]);I(this,"startTime");I(this,"endTime");this.engine=a}onPreUpdate(a,c){a.input.keyboard.wasPressed(N.KEYBOARD_RESTART_KEY)&&this.returnToEventManager()}onActivate(a){var c,g;(c=a.data)!=null&&c.raceConfig?(this.raceConfig=(g=a.data)==null?void 0:g.raceConfig,this.uiManager.buildUi(this.raceConfig.getFullTrackName()),this.prepareRace(this.raceConfig.trackName,this.raceConfig.trackStyle,this.raceConfig.getNextSkierName())):this.returnToEventManager()}onDeactivate(a){this.cleanRace()}setupCamera(){this.camera.strategy.elasticToActor(this.skierGhost,.12,.2),this.camera.zoom=N.CAMERA_ZOOM}startRace(){this.uiManager.displayRacingUi(),this.startTime=this.engine.clock.now(),this.uiTimer.start(),this.listenStopRaceEvent(),this.skier.startRace(),this.engine.soundPlayer.playSound(lt.StartRaceSound,.2)}stopRace(){var x,C;this.endTime=this.engine.clock.now(),this.skier.finishRace(),this.uiTimer.stop();const a=this.endTime-this.startTime,c=this.gates.filter(T=>!T.passed).length,g=new Il((x=this.raceConfig)==null?void 0:x.raceNumber,(C=this.skier)==null?void 0:C.skierName,new Date,a),p=this.engine.trackManager.saveRecord(this.raceConfig.trackName,new Sl(g));this.uiManager.displayResultUi(p,c),this.uiManager.backToManagerButton.addEventListener("click",()=>this.returnToEventManager(g),{once:!0}),this.engine.soundPlayer.playSound(lt.FinishRaceSound,.3)}addPenalty(){this.camera.shake(3,3,250),this.startTime-=N.MISSED_GATE_PENALTY_TIME,this.engine.soundPlayer.playSound(lt.GateMissedSound,.3)}updateGhost(a){this.skierGhost.pos=Ut(0,a+N.FRONT_GHOST_DISTANCE)}returnToEventManager(a){lt.FinishRaceSound.stop(),this.engine.goToScene("eventManager",a?{raceResult:a}:{}),this.engine.removeScene("race")}prepareRace(a,c,g){this.track=this.buildTrack(a,c),this.skier=new yn(g,this.getSkierConfig(this.track.style)),this.add(this.skier),this.skierGhost=new Wi({width:1,height:1,pos:Ut(this.skier.pos.x,this.skier.pos.y+N.FRONT_GHOST_DISTANCE)}),this.setupCamera(),this.add(this.skierGhost),this.addTimer(this.uiTimer),this.engine.soundPlayer.playSound(lt.WinterSound,.1,!0)}cleanRace(){this.startTime=void 0,this.endTime=void 0,this.uiManager.hideUi(),this.gates=[],this.raceConfig=void 0,this.track=void 0,this.engine.soundPlayer.stopSound(lt.WinterSound),this.clear()}listenStopRaceEvent(){var a;(a=this.gates)==null||a.find(c=>c.isFinalGate).on("stoprace",()=>this.stopRace())}updateRacingUi(){this.uiManager.updateRacingUi(this.skier.speed,this.engine.clock.now()-this.startTime)}buildTrack(a,c){const g=this.engine.trackManager.loadTrack(a,c);return g.gates.forEach(p=>{var x;(x=this.gates)==null||x.push(p),this.add(p)}),g}getSkierConfig(a){return a===ti.SL?N.SL_SKIER_CONFIG:a===ti.GS?N.GS_SKIER_CONFIG:a===ti.SG?N.SG_SKIER_CONFIG:N.DH_SKIER_CONFIG}}class Pl extends An{constructor(a){super();I(this,"eventConfig");I(this,"trackManager");I(this,"eventManagerUi",document.getElementById("event-manager"));I(this,"skier1Label",document.getElementById("skier-1-label"));I(this,"skier2Label",document.getElementById("skier-2-label"));I(this,"lastResultsContainer",document.getElementById("last-results-container"));I(this,"actualRankingContainer",document.getElementById("actual-ranking-container"));I(this,"nextRacesContainer",document.getElementById("next-races-container"));I(this,"startRaceButton",document.getElementById("start-race-button"));this.engine=a,this.startRaceButton.addEventListener("click",()=>{this.eventConfig.getNextRace()?this.startRace():this.backToMenu()})}onActivate(a){var c,g,p;this.trackManager=this.engine.trackManager,(c=a.data)!=null&&c.eventConfig&&(this.eventConfig=(g=a.data)==null?void 0:g.eventConfig),(p=a.data)!=null&&p.raceResult&&this.eventConfig.updateRaceResult(a.data.raceResult),this.prepareManager(this.eventConfig)}onDeactivate(a){this.cleanManager()}prepareManager(a){this.eventConfig=a,this.startRaceButton.innerText=this.eventConfig.getNextRace()?"Race":"Back to menu",this.eventManagerUi.style.display="flex",this.skier1Label.innerText=a.skier1Name,this.skier2Label.innerText=a.skier2Name,this.lastResultsContainer.innerHTML=this.prepareLastResultsTable(a)||'
No result for the moment
',this.actualRankingContainer.innerHTML=this.prepareActualRankingTable(a)||'
No ranking for the moment
',this.nextRacesContainer.innerHTML=this.prepareNextRacesTable(a)||'
No race to come
',this.engine.soundPlayer.showButton()}cleanManager(){this.eventManagerUi.style.display="none",this.startRaceButton.removeEventListener("click",()=>{})}startRace(){this.engine.soundPlayer.hideButton(),this.engine.addScene("race",new Tl(this.engine)),this.engine.goToScene("race",{raceConfig:this.eventConfig.getNextRace()})}prepareLastResultsTable(a){return a.racesResults.filter(c=>c.isStarted()).map(c=>{const g=`${c.skier1Timing?" ("+this.trackManager.getRecordPosition(c.trackName,c.skier1Timing)+")":""}`,p=`${c.skier2Timing?" ("+this.trackManager.getRecordPosition(c.trackName,c.skier2Timing)+")":""}`;return`
Race ${c.raceNumber}
${c.getFullTrackName()}
${c.skier1Timing?ye(c.skier1Timing,N.FORMAT_TIMING):""}${g}
diff --git a/assets/index-R7JRTElo.css b/assets/index-bqjj-bvf.css similarity index 78% rename from assets/index-R7JRTElo.css rename to assets/index-bqjj-bvf.css index 0275d62..52f1544 100644 --- a/assets/index-R7JRTElo.css +++ b/assets/index-bqjj-bvf.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Inter&display=swap";html body{padding:0;margin:0;font-family:Inter,sans-serif;color:#4a8291}.ui-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100vh;width:100vw;background-color:#b0d4dd;overflow:hidden}.ui-container .header{display:flex;width:calc(100% - 4rem);align-items:center;justify-content:center}.ui-container .header #header-logo{width:80px;height:80px;display:none}.ui-container .hud-container{position:relative;border-radius:10px;overflow:hidden;max-width:100%}.ui-container .hud-container .actions-toolbar{position:absolute;right:0;width:200px;padding:2rem;gap:1rem;display:flex;align-items:center;justify-content:flex-end;color:#fff;z-index:10}.ui-container .hud-container .actions-toolbar #sound-button,.ui-container .hud-container .actions-toolbar #sound-mute-button{cursor:pointer;display:none}.ui-container .hud-container .dialog{display:flex;flex-direction:column;padding-bottom:1rem;width:calc(100% - 4rem);height:calc(100% - 4rem);padding:2rem;border:none;color:#fff;background-color:#4a8291}.ui-container .hud-container .dialog .dialog-content{overflow:hidden;flex:1 1 auto;padding:1rem;overflow-y:auto}.ui-container .hud-container .dialog .dialog-actions{padding:1rem}.ui-container .hud-container #event-setup{display:none;position:absolute;width:100%;height:100%;align-items:center;justify-content:center}.ui-container .hud-container #event-setup .dialog{font-size:1.3rem}.ui-container .hud-container #event-setup .dialog .title{margin-bottom:2rem}.ui-container .hud-container #event-setup .dialog .dialog-content{font-size:1.7rem;display:flex;flex-direction:column;gap:2rem}.ui-container .hud-container #event-setup .dialog .dialog-content .form-line{display:flex;flex-shrink:0;gap:1rem;flex-wrap:wrap;justify-content:space-between;align-items:center;overflow:hidden}.ui-container .hud-container #event-setup .dialog .dialog-content .form-line .input{display:flex;overflow:hidden}.ui-container .hud-container #event-setup select,.ui-container .hud-container #event-setup input,.ui-container .hud-container #event-setup input:active,.ui-container .hud-container #event-setup input:focus{font-size:1.3rem;padding:.5rem 1rem!important;color:#fff;background-color:transparent;border:2px solid white;border-radius:4px;outline:none;max-width:calc(100% - 4rem)}.ui-container .hud-container #event-setup select:not([type=number]),.ui-container .hud-container #event-setup input:not([type=number]),.ui-container .hud-container #event-setup input:active:not([type=number]),.ui-container .hud-container #event-setup input:focus:not([type=number]){width:calc(300px - 2rem)}.ui-container .hud-container #event-setup select{width:304px!important;max-width:calc(100% - 2rem)!important;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#4a8291}.ui-container .hud-container #event-manager{display:none;position:absolute;width:100%;height:100%;align-items:center;justify-content:center}.ui-container .hud-container #event-manager .dialog{font-size:1.3rem}.ui-container .hud-container #event-manager .dialog .title{margin-bottom:.5rem}.ui-container .hud-container #event-manager .dialog .dialog-content{display:flex;flex:1 1 auto;flex-direction:column;justify-content:space-between}.ui-container .hud-container #event-manager .dialog .dialog-content .section-title{font-size:.9rem;margin-top:.5rem}.ui-container .hud-container #event-manager .dialog .dialog-content #last-results-container,.ui-container .hud-container #event-manager .dialog .dialog-content #next-races-container,.ui-container .hud-container #event-manager .dialog .dialog-content #actual-ranking-container{display:flex;flex-direction:column;max-height:120px;overflow:auto;border-radius:5px}.ui-container .hud-container #event-manager .dialog .dialog-content .placeholder{display:flex;font-size:.8rem;justify-content:center;padding:.5rem;color:#cecece}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.header-line,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.header-line{display:flex;justify-content:space-between;padding:.3rem 1rem;font-size:.75rem;color:#cecece}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line{display:flex;justify-content:space-between;padding:.3rem 1rem;font-size:.75rem;background-color:#ffffff29}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line.next,.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line.first,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line.next,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line.first{background-color:#6aff9091}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line div,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line div{min-width:100px;max-width:100px;overflow:hidden}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line div.winner,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line div.winner{font-weight:700;color:#6aff9091}.ui-container .hud-container #event-manager .dialog .dialog-content button{margin-top:1rem}.ui-container .hud-container button{cursor:pointer;font-size:1.8rem;font-weight:400;border-radius:10px;width:100%;padding:1rem;color:#fff;border:0;background-color:#3d3378!important}.ui-container .hud-container .game-container{width:800px;max-width:100%;height:800px;max-height:100%}.ui-container .hud-container .game-container .start-button{font-weight:200;border:none;background-color:#3d3378!important;font-size:1.5rem;width:300px}.ui-container .hud-container #result{position:absolute;top:50px;left:0;width:calc(100% - 2rem);max-height:60%;padding:1rem;display:none;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background-color:#4a8291ce}.ui-container .hud-container #result #position{font-size:4rem;color:#fff}.ui-container .hud-container #result #timing{font-size:2rem;font-style:italic;color:#fff}.ui-container .hud-container #result .results-table{display:flex;flex-direction:column;width:100%;align-items:center;justify-content:center;overflow:hidden;overflow-x:auto;font-family:monospace}.ui-container .hud-container #result .results-table #results-container{display:flex;flex-direction:column;height:300px;overflow-y:auto}.ui-container .hud-container #result .results-table .header-line,.ui-container .hud-container #result .results-table .result-line{padding:.5rem;display:flex;font-size:.75rem;color:#ffffffce}.ui-container .hud-container #result .results-table .header-line div:first-child,.ui-container .hud-container #result .results-table .result-line div:first-child{width:75px}.ui-container .hud-container #result .results-table .header-line div,.ui-container .hud-container #result .results-table .result-line div{width:150px}.ui-container .hud-container #result .results-table .header-line div.time,.ui-container .hud-container #result .results-table .result-line div.time{text-align:right}.ui-container .hud-container #result .results-table .result-line{color:#fff;background-color:#ffffff29}.ui-container .hud-container #result .results-table .result-line.current{background-color:#6aff9091}.ui-container .hud-container #result button#back-to-manager{margin-top:1rem;font-size:1.8rem;width:200px}.ui-container .hud-container #track-name,.ui-container .hud-container #speedometer,.ui-container .hud-container #timer{display:none;width:90px;align-items:center;justify-content:end;position:absolute;bottom:0;color:#4c829087;font-size:1.1rem;padding:.25rem .5rem;height:40px;font-family:monospace}.ui-container .hud-container #track-name#track-name,.ui-container .hud-container #speedometer#track-name,.ui-container .hud-container #timer#track-name{right:0;top:0;width:150px}.ui-container .hud-container #track-name#speedometer,.ui-container .hud-container #speedometer#speedometer,.ui-container .hud-container #timer#speedometer{left:0}.ui-container .hud-container #track-name#timer,.ui-container .hud-container #speedometer#timer,.ui-container .hud-container #timer#timer{right:0}.ui-container .footer{display:flex;justify-content:center;align-items:center;padding:2rem}small{font-size:small}::placeholder{color:#cecece}i.fa-solid{font-size:1.2rem}::-webkit-scrollbar{width:0px} +@import"https://fonts.googleapis.com/css2?family=Inter&display=swap";html body{padding:0;margin:0;font-family:Inter,sans-serif;color:#4a8291}.ui-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:100vh;width:100vw;background-color:#b0d4dd;overflow:hidden}.ui-container .header{display:flex;width:calc(100% - 4rem);align-items:center;justify-content:center}.ui-container .header #header-logo{width:80px;height:80px;display:none}.ui-container .hud-container{position:relative;border-radius:10px;overflow:hidden;max-width:100%}.ui-container .hud-container .actions-toolbar{position:absolute;right:0;width:200px;padding:2rem;gap:1rem;display:flex;align-items:center;justify-content:flex-end;color:#fff;z-index:10}.ui-container .hud-container .actions-toolbar #sound-button,.ui-container .hud-container .actions-toolbar #sound-mute-button{cursor:pointer;display:none}.ui-container .hud-container .dialog{display:flex;flex-direction:column;padding-bottom:1rem;width:calc(100% - 4rem);height:calc(100% - 4rem);padding:2rem;border:none;color:#fff;background-color:#4a8291}.ui-container .hud-container .dialog .dialog-content{overflow:hidden;flex:1 1 auto;padding:1rem;overflow-y:auto}.ui-container .hud-container .dialog .dialog-actions{padding:1rem}.ui-container .hud-container #event-setup{display:none;position:absolute;width:100%;height:100%;align-items:center;justify-content:center}.ui-container .hud-container #event-setup .dialog{font-size:1.3rem}.ui-container .hud-container #event-setup .dialog .title{margin-bottom:2rem}.ui-container .hud-container #event-setup .dialog .dialog-content{font-size:1.7rem;display:flex;flex-direction:column;gap:2rem}.ui-container .hud-container #event-setup .dialog .dialog-content .form-line{display:flex;flex-shrink:0;gap:1rem;flex-wrap:wrap;justify-content:space-between;align-items:center;overflow:hidden}.ui-container .hud-container #event-setup .dialog .dialog-content .form-line .input{display:flex;overflow:hidden}.ui-container .hud-container #event-setup select,.ui-container .hud-container #event-setup input,.ui-container .hud-container #event-setup input:active,.ui-container .hud-container #event-setup input:focus{font-size:1.3rem;padding:.5rem 1rem!important;color:#fff;background-color:transparent;border:2px solid white;border-radius:4px;outline:none;max-width:calc(100% - 4rem)}.ui-container .hud-container #event-setup select:not([type=number]),.ui-container .hud-container #event-setup input:not([type=number]),.ui-container .hud-container #event-setup input:active:not([type=number]),.ui-container .hud-container #event-setup input:focus:not([type=number]){width:calc(300px - 2rem)}.ui-container .hud-container #event-setup select{width:304px!important;max-width:calc(100% - 2rem)!important;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#4a8291}.ui-container .hud-container #event-manager{display:none;position:absolute;width:100%;height:100%;align-items:center;justify-content:center}.ui-container .hud-container #event-manager .dialog{font-size:1.3rem}.ui-container .hud-container #event-manager .dialog .title{margin-bottom:.5rem}.ui-container .hud-container #event-manager .dialog .dialog-content{display:flex;flex:1 1 auto;flex-direction:column;justify-content:space-between}.ui-container .hud-container #event-manager .dialog .dialog-content .section-title{font-size:.9rem;margin-top:.5rem}.ui-container .hud-container #event-manager .dialog .dialog-content #last-results-container,.ui-container .hud-container #event-manager .dialog .dialog-content #next-races-container,.ui-container .hud-container #event-manager .dialog .dialog-content #actual-ranking-container{display:flex;flex-direction:column;max-height:120px;overflow:auto;border-radius:5px}.ui-container .hud-container #event-manager .dialog .dialog-content .placeholder{display:flex;font-size:.8rem;justify-content:center;padding:.5rem;color:#cecece}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.header-line,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.header-line{display:flex;justify-content:space-between;padding:.3rem 1rem;font-size:.75rem;color:#cecece}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line{display:flex;justify-content:space-between;padding:.3rem 1rem;font-size:.75rem;background-color:#ffffff29}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line.next,.ui-container .hud-container #event-manager .dialog .dialog-content .header-line.result-line.first,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line.next,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line.result-line.first{background-color:#6aff9091}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line div,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line div{min-width:100px;max-width:100px;overflow:hidden}.ui-container .hud-container #event-manager .dialog .dialog-content .header-line div.winner,.ui-container .hud-container #event-manager .dialog .dialog-content .result-line div.winner{font-weight:700;color:#6aff9091}.ui-container .hud-container #event-manager .dialog .dialog-content button{margin-top:1rem}.ui-container .hud-container button{cursor:pointer;font-size:1.8rem;font-weight:400;border-radius:10px;width:100%;padding:1rem;color:#fff;border:0;background-color:#3d3378!important}.ui-container .hud-container .game-container{width:800px;max-width:100%;height:800px;max-height:100%}.ui-container .hud-container .game-container .start-button{font-weight:200;border:none;background-color:#3d3378!important;font-size:1.5rem;width:300px}.ui-container .hud-container #result{position:absolute;top:50px;left:0;width:calc(100% - 2rem);max-height:60%;padding:1rem;display:none;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background-color:#4a8291ce}.ui-container .hud-container #result #position{font-size:4rem;color:#fff}.ui-container .hud-container #result #timing{font-size:2rem;font-style:italic;color:#fff}.ui-container .hud-container #result .results-table{display:flex;flex-direction:column;width:100%;align-items:center;justify-content:center;overflow:hidden;overflow-x:auto;font-family:monospace}.ui-container .hud-container #result .results-table #results-container{display:flex;flex-direction:column;height:300px;overflow-y:auto}.ui-container .hud-container #result .results-table .header-line,.ui-container .hud-container #result .results-table .result-line{padding:.5rem;display:flex;font-size:.75rem;color:#ffffffce}.ui-container .hud-container #result .results-table .header-line i.fa-solid,.ui-container .hud-container #result .results-table .result-line i.fa-solid{font-size:.75rem}.ui-container .hud-container #result .results-table .header-line div:first-child,.ui-container .hud-container #result .results-table .result-line div:first-child{width:75px}.ui-container .hud-container #result .results-table .header-line div,.ui-container .hud-container #result .results-table .result-line div{width:150px}.ui-container .hud-container #result .results-table .header-line div.time,.ui-container .hud-container #result .results-table .result-line div.time{text-align:right}.ui-container .hud-container #result .results-table .result-line{color:#fff;background-color:#ffffff29}.ui-container .hud-container #result .results-table .result-line.current{background-color:#6aff9091}.ui-container .hud-container #result button#back-to-manager{margin-top:1rem;font-size:1.8rem;width:200px}.ui-container .hud-container #track-name,.ui-container .hud-container #speedometer,.ui-container .hud-container #timer{display:none;width:90px;align-items:center;justify-content:end;position:absolute;bottom:0;color:#4c829087;font-size:1.1rem;padding:.25rem .5rem;height:40px;font-family:monospace}.ui-container .hud-container #track-name#track-name,.ui-container .hud-container #speedometer#track-name,.ui-container .hud-container #timer#track-name{right:0;top:0;width:150px}.ui-container .hud-container #track-name#speedometer,.ui-container .hud-container #speedometer#speedometer,.ui-container .hud-container #timer#speedometer{left:0}.ui-container .hud-container #track-name#timer,.ui-container .hud-container #speedometer#timer,.ui-container .hud-container #timer#timer{right:0}.ui-container .footer{display:flex;justify-content:center;align-items:center;padding:2rem}small{font-size:small}::placeholder{color:#cecece}i.fa-solid{font-size:1.2rem}::-webkit-scrollbar{width:0px} diff --git a/index.html b/index.html index 13d3d3b..b0cd7f1 100644 --- a/index.html +++ b/index.html @@ -7,8 +7,8 @@ Retro Ski - - + +