1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[56414],{56414:(e,t,a)=>{a.r(t),a.d(t,{createRuntime:()=>h});var s=a(74461),r=a(48919),l=a(45827),i=a(74089);let o={pickup:{radius:1,height:1.3,offset:.65},checkpoint:{radius:2,height:.3,lift:.06},goal:{radius:1.8,height:.35},fallY:-9,defaultPar:60,islandThickness:.8,islandAsset:8,landmark:{width:1.3,height:2.6}},n=(e,t)=>{let a=e[t];return a&&"object"==typeof a&&!Array.isArray(a)?a:{}};function d(e){var t;return!(0,l.i6)(i.f,e).length&&[e.platforms,e.pickups,null!=(t=e.stamps)?t:[]].every(e=>new Set(e.map(e=>e.id)).size===e.length)}let c={treeSpread:.39,treeDepth:.28,treeScale:.62,treeScaleStep:.09,treeTurn:1.7,landmarkSpread:.34,landmarkDepth:.26,landmarkScale:.8,beaconScale:.6},u=(e,t,a)=>Math.hypot(t[0]-a[0],t[2]-a[2])<e.pickup.radius&&Math.abs(t[1]+e.pickup.offset-a[1])<e.pickup.height,p=(e,t)=>{var a;return null!=(a=t.parTime)?a:e.defaultPar},h=e=>{var t,a;let l=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n(e,"pickup"),a=n(e,"checkpoint"),s=n(e,"goal"),l=n(e,"landmark");return{pickup:{radius:(0,r._W)(t,"radius",o.pickup.radius,.1,10),height:(0,r._W)(t,"height",o.pickup.height,.1,10),offset:(0,r._W)(t,"offset",o.pickup.offset,-5,5)},checkpoint:{radius:(0,r._W)(a,"radius",o.checkpoint.radius,.1,20),height:(0,r._W)(a,"height",o.checkpoint.height,.01,5),lift:(0,r._W)(a,"lift",o.checkpoint.lift,0,2)},goal:{radius:(0,r._W)(s,"radius",o.goal.radius,.1,20),height:(0,r._W)(s,"height",o.goal.height,.01,5)},fallY:(0,r._W)(e,"fallY",o.fallY,-1e3,0),defaultPar:(0,r._W)(e,"defaultPar",o.defaultPar,1,3600),islandThickness:(0,r._W)(e,"islandThickness",o.islandThickness,.05,20),islandAsset:(0,r._W)(e,"islandAsset",o.islandAsset,.1,100),landmark:{width:(0,r._W)(l,"width",o.landmark.width,.1,20),height:(0,r._W)(l,"height",o.landmark.height,.1,50)}}}(e.config),i=null==(t=e.project.data.platform_courses)?void 0:t.filter(d),h=structuredClone((null==i?void 0:i.length)?i:s.N),f=null!=(a=h.find(t=>t.id===e.config.courseId))?a:h[0],m=new Set,k=new Set,g=new Map,w=new Map,v=new Set,_=new Map,y="",S=-1,b=[...f.spawn],z=0,I=()=>e.services.get("character.platformer"),W=()=>{var t,a,s;e.state.set("course.id",f.id),e.state.set("course.index",h.indexOf(f)),e.state.set("course.count",h.length),e.state.set("course.collected",m.size),e.state.set("course.total",f.pickups.length),e.state.set("course.stamps",k.size),e.state.set("course.stampsTotal",null!=(a=null==(t=f.stamps)?void 0:t.length)?a:0),e.state.set("course.checkpoint",y),e.state.set("course.name",f.name),e.state.set("course.par",p(l,f)),e.state.set("course.theme",null!=(s=f.theme)?s:"morning"),e.state.set("course.goal",f.goal)},T=()=>{for(let t of v)e.physics.remove(t),e.entities.destroy(t);v.clear(),g.clear(),w.clear(),_.clear()},M=()=>{for(let t of function(e,t){var a;let s=[],r=function(e,t,a){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:["static"],o={kind:e,at:t,slot:a,scale:r,components:l,tags:i};return s.push(o),o};for(let a of(e.platforms.forEach((a,s)=>{var l;r("platform_island",a.at,"platform_island",a.width/t.islandAsset,{size:[a.width,t.islandThickness,a.width],"platform.id":a.id}).collider={center:[a.at[0],a.at[1]-t.islandThickness/2,a.at[2]],size:[a.width,t.islandThickness,a.width]};let i=null!=(l=a.trees)?l:a.landmark?1:2;for(let e=0;e<i;e++){let t=e%2?-1:1;r("platform_tree",[a.at[0]+t*a.width*c.treeSpread,a.at[1],a.at[2]+a.width*c.treeDepth],"platform_tree",c.treeScale+s%3*c.treeScaleStep,{size:[1.1,2.6,1.1]}).yaw=s*c.treeTurn+t}if(a.landmark){let l=e.platforms[s+1],i=l&&l.at[0]<a.at[0]?1:-1,o=[a.at[0]+i*a.width*c.landmarkSpread,a.at[1],a.at[2]+a.width*c.landmarkDepth];r("platform_".concat(a.landmark),o,"platform_".concat(a.landmark),c.landmarkScale,{size:[1.8,4,1.8]}).collider={center:[o[0],o[1]+t.landmark.height/2,o[2]],size:[t.landmark.width,t.landmark.height,t.landmark.width]}}a.checkpoint&&r("platform_checkpoint",a.at,"platform_beacon",c.beaconScale,{size:[2,.3,2]})}),e.pickups))r("platform_parcel",a.at,"platform_parcel",1,{size:[.65,.65,.65]},[]).parcel=a.id;for(let t of null!=(a=e.stamps)?a:[])r("platform_stamp",t.at,"",1,{size:[.6,.6,.18]},[]).stamp=t.id;return r("platform_goal",e.goal,"platform_beacon",1,{size:[2.8,3.5,2.8]}),s}(f,l)){let a=e.entities.create(t.kind,{owner:e.kitId,tags:t.tags,components:{transform:{x:t.at[0],y:t.at[1],z:t.at[2],yaw:0},model:{slot:t.slot,scale:t.scale},...t.components}});v.add(a),t.collider&&(e.physics.addStaticBox(t.collider.center,t.collider.size,a),_.set(a,[t.collider.center,t.collider.size])),void 0!==t.yaw&&e.entities.setTransform(a,{yaw:t.yaw}),t.parcel&&g.set(t.parcel,a),t.stamp&&w.set(t.stamp,a)}},x={course:()=>structuredClone(f),courses:()=>structuredClone(h),respawnPoint:()=>[...b],collected:()=>[...m],start(e){let t=h.find(t=>
1t.id===e);return!!t&&(T(),f=t,M(),x.reset(),!0)},next(){let t=h[h.indexOf(f)+1];return"finished"===e.state.phase&&!!t&&x.start(t.id)},reset(){var t;for(let t of(m.clear(),k.clear(),y="",S=-1,b=[...f.spawn],z=e.time.elapsed,[...g.values(),...w.values()]))e.entities.untag(t,"hidden");e.state.set("course.result",""),e.state.set("course.summary",null),e.state.set("course.falls",0),e.state.set("course.seconds",0),e.state.setPhase("playing"),null==(t=I())||t.teleport(b,0),W(),e.bus.emit("course.started",{id:f.id},{source:e.kitId})}};return{id:e.kitId,services:{"world.platforms":x},setup(){M(),e.state.set("course.result",""),e.state.set("course.falls",0),e.state.set("course.seconds",0),W()},sceneEnter(t){var a,s,r;if(!t.world||t.world.kit!==e.kitId||t.restored)return;let l=null!=(r=null!=(s=t.world.doc)?s:"string"==typeof(null==(a=t.world.config)?void 0:a.courseId)?t.world.config.courseId:void 0)?r:e.config.courseId,i=h.find(e=>e.id===l);if(!i)return void e.log("warn","world.platforms: scene ".concat(t.id," names the course ").concat(String(l),", which does not exist"));i.id!==f.id&&x.start(i.id)},lateUpdate(){var t,a,s;let r,i,o;if("playing"!==e.state.phase)return;let n=I();if(!n)return;let d=n.position(),c=Math.round((e.time.elapsed-z)*100)/100;for(let t of(e.state.set("course.seconds",c),f.pickups))!m.has(t.id)&&u(l,d,t.at)&&(m.add(t.id),e.entities.tag(g.get(t.id),"hidden"),W(),e.bus.emit("course.pickup",{id:t.id,count:m.size},{source:e.kitId}));for(let a of null!=(t=f.stamps)?t:[])!k.has(a.id)&&u(l,d,a.at)&&(k.add(a.id),e.entities.tag(w.get(a.id),"hidden"),W(),e.bus.emit("course.stamp",{id:a.id,count:k.size},{source:e.kitId}));if(f.platforms.forEach((t,a)=>{t.checkpoint&&!(a<=S)&&n.grounded()&&Math.hypot(d[0]-t.at[0],d[2]-t.at[2])<l.checkpoint.radius&&Math.abs(d[1]-t.at[1])<l.checkpoint.height&&(y=t.id,S=a,b=[t.at[0],t.at[1]+l.checkpoint.lift,t.at[2]],W(),e.bus.emit("course.checkpoint",{id:y},{source:e.kitId}))}),d[1]<l.fallY&&(e.state.set("course.falls",Number(null!=(a=e.state.get("course.falls"))?a:0)+1),n.teleport(b,0),e.bus.emit("course.respawn",{},{source:e.kitId})),r=f,i=m.size,o=n.grounded(),i===r.pickups.length&&o&&Math.hypot(d[0]-r.goal[0],d[2]-r.goal[2])<l.goal.radius&&Math.abs(d[1]-r.goal[1])<l.goal.height){let t=Number(null!=(s=e.state.get("course.falls"))?s:0),a=function(e,t,a,s,r){var l,i,o;let n=!!(null==(l=t.stamps)?void 0:l.length)&&r===t.stamps.length,d=0===s&&a<=p(e,t);return{id:t.id,seconds:a,falls:s,stamps:r,totalStamps:null!=(o=null==(i=t.stamps)?void 0:i.length)?o:0,explorer:n,express:d,stars:1+Number(n)+Number(d)}}(l,f,c,t,k.size);e.state.set("course.summary",a),e.state.set("course.result","delivered"),e.state.setPhase("finished"),e.entities.set(n.player(),"model",{slot:"player_character",anim:"idle"}),e.bus.emit("course.finished",{seconds:c,falls:t},{source:e.kitId})}},teardown:T,save:()=>({course:f.id,picked:[...m],stamps:[...k],checkpoint:y,checkpointIndex:S,respawn:[...b],started:z,owned:[...v],parcels:[...g],stampEntities:[...w],colliders:[..._].map(e=>{let[t,[a,s]]=e;return[t,[...a],[...s]]})}),load(t){var a,s,r,l,i,o,n,d;let c=null!=t?t:{},u=h.find(e=>e.id===c.course);if(!u)return;let p=new Map((null!=(a=c.colliders)?a:[]).map(e=>{let[t,a,s]=e;return[t,[a,s]]}));if(!(p.size===_.size&&[...p].every(e=>{let[t,[a,s]]=e,r=_.get(t);return!!r&&r[0].every((e,t)=>e===a[t])&&r[1].every((e,t)=>e===s[t])}))){for(let t of _.keys())e.physics.remove(t);for(let[t,[a,s]]of p)e.physics.addStaticBox(a,s,t)}for(let[e,t]of(f=u,_.clear(),p))_.set(e,t);for(let e of(v.clear(),null!=(s=c.owned)?s:[]))v.add(e);for(let[e,t]of(g.clear(),null!=(r=c.parcels)?r:[]))g.set(e,t);for(let[e,t]of(w.clear(),null!=(l=c.stampEntities)?l:[]))w.set(e,t);for(let e of(m.clear(),null!=(i=c.picked)?i:[]))m.add(e);for(let e of(k.clear(),null!=(o=c.stamps)?o:[]))k.add(e);y=null!=(n=c.checkpoint)?n:"",S=null!=(d=c.checkpointIndex)?d:-1,b=Array.isArray(c.respawn)?[...c.respawn]:[...f.spawn],z=Number.isFinite(c.started)?c.started:0}}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.