Testhostplaycanvasmobile / 260.bundle.js
kwabs22
puzzle scene and label fix attempts
8dcf070
"use strict";(self.webpackChunkplaycanvas_game=self.webpackChunkplaycanvas_game||[]).push([[260],{260:(e,t,i)=>{i.r(t),i.d(t,{default:()=>n});var o=i(96);const n={id:"research_facility",title:"Research Facility",type:"scene",async build(e,t,i){console.log("[ResearchFacility] Building research facility...");const n=new o.n(e,e.systems?.core||{});n.sceneBuilder=t,n.entityFactory=i,this.contaminationTimer=6e5,this.startTime=null,n.createRoom("decontamination",{size:[14,4,10],lighting:"clinical",position:[0,0,0],buildFunction:a,objectives:[{id:"facility_breach",name:"Containment Breach",description:"Respond to biological containment failure",type:"simple",autoStart:!0,rewards:{experience:25}},{id:"get_lab_access",name:"Laboratory Access",description:"Obtain research lab keycard from emergency locker",type:"simple",rewards:{experience:40,items:[{id:"research_keycard",quantity:1}]}}]}),n.createRoom("main_laboratory",{size:[25,5,20],lighting:"research",position:[0,0,0],buildFunction:c,objectives:[{id:"specimen_analysis",name:"Specimen Analysis",description:"Analyze all contaminated specimen containers",type:"counter",target:8,progress:0,rewards:{experience:80},nextObjective:"synthesize_antidote"},{id:"synthesize_antidote",name:"Emergency Antidote",description:"Create antidote using research equipment",type:"simple",prerequisites:["specimen_analysis"],rewards:{experience:100,skillPoints:2,items:[{id:"antidote_sample",quantity:1}]}}]}),n.createRoom("containment_vault",{size:[18,6,15],lighting:"emergency",position:[0,0,0],buildFunction:s,objectives:[{id:"secure_outbreak",name:"Outbreak Containment",description:"Activate emergency containment protocol",type:"sequence",target:["bio_scanner","containment_field","emergency_seal"],progress:0,rewards:{experience:150,skillPoints:3}}]}),n.createRoom("data_archive",{size:[16,4,12],lighting:"archive",position:[0,0,0],buildFunction:r,objectives:[{id:"data_recovery",name:"Critical Data Recovery",description:"Download research data before facility lockdown",type:"simple",rewards:{experience:120,skillPoints:2,items:[{id:"research_data",quantity:1}]}}]}),n.createDoor("decontamination","main_laboratory",{type:"keycard",item:"research_keycard"},{playerSpawnPosition:[-10,0,0]}),n.createDoor("main_laboratory","containment_vault",{type:"objective",id:"specimen_analysis"},{playerSpawnPosition:[0,0,6]}),n.createDoor("main_laboratory","data_archive",{type:"objective",id:"synthesize_antidote"},{playerSpawnPosition:[6,0,0]}),n.createDoor("containment_vault","data_archive",{type:"objective",id:"secure_outbreak"},{playerSpawnPosition:[0,0,-6]});const l=await n.build(e,t,i);return l.multiRoom=n,l},onLoad(e,t){console.log("[ResearchFacility] Containment breach protocols active");const i=e.root.findByTag("scene_root")[0];i&&i.multiRoom&&(i.multiRoom.onLoad(e,t),this.multiRoom=i.multiRoom,this.analyzedSpecimens=new Set,this.startTime=Date.now(),this.setupContaminationTimer(e),this.interactionHandler=i=>{this.handleResearchInteraction(i,e,t)},this.multiRoom.setSceneInteractionHandler(this.interactionHandler)),e.fire("ui:notification",{text:"BIOHAZARD ALERT: Containment failure - Decontamination protocols active",type:"error",duration:5e3})},setupContaminationTimer(e){this.timerInterval=setInterval(()=>{if(!this.startTime)return;const t=Date.now()-this.startTime,i=Math.max(0,this.contaminationTimer-t),o=Math.floor(i/6e4),n=Math.floor(i%6e4/1e3);i>0?e.fire("ui:notification",{text:`Containment Timer: ${o}:${n.toString().padStart(2,"0")} until facility lockdown`,type:"warning",duration:1e3}):this.onContaminationSpread(e)},15e3)},onContaminationSpread(e){clearInterval(this.timerInterval),e.fire("ui:notification",{text:"FACILITY LOCKDOWN: Contamination has spread beyond containment!",type:"error",duration:8e3})},handleResearchInteraction(e,t,i){console.log("[ResearchFacility] Interaction triggered with:",e);const o=i.getSystem("objectivemanager");if("EmergencyAlert"===e)o&&o.isObjectiveActive("facility_breach")&&(o.completeObjective("facility_breach"),o.startObjective("get_lab_access")),t.fire("ui:notification",{text:"BREACH CONFIRMED: Multiple containment failures in Research Wing",type:"error",duration:4e3});else if("KeycardLocker"===e)o&&o.isObjectiveActive("get_lab_access")&&(this.multiRoom.addItem("research_keycard"),o.completeObjective("get_lab_access"),t.fire("ui:notification",{text:"Research keycard obtained - Laboratory access granted",type:"success",duration:3e3}));else if(e.startsWith("Specimen_")){if("main_laboratory"===this.multiRoom.currentRoom&&o&&o.isObjectiveActive("specimen_analysis")){const i=parseInt(e.split("_")[1]);if(!this.analyzedSpecimens.has(e)){this.analyzedSpecimens.add(e);const n=["Class-A pathogen detected","Viral mutation identified","Cellular breakdown observed","Toxic compound isolated","Bacterial resistance confirmed","Enzyme inhibition noted","DNA corruption detected","Critical pathogen strain found"];t.fire("ui:notification",{text:`Analysis ${i+1}: ${n[i]}`,type:"warning",duration:3e3}),o.updateObjective("specimen_analysis",this.analyzedSpecimens.size),console.log(`[ResearchFacility] Analyzed specimen ${e}, total: ${this.analyzedSpecimens.size}/8`)}}}else if("SynthesisEquipment"===e)o&&o.isComplete("specimen_analysis")&&o.isObjectiveActive("synthesize_antidote")?(this.multiRoom.addItem("antidote_sample"),o.completeObjective("synthesize_antidote"),t.fire("ui:notification",{text:"ANTIDOTE SYNTHESIZED: Emergency treatment ready for deployment",type:"success",duration:4e3})):o&&o.isComplete("synthesize_antidote")&&t.fire("ui:notification",{text:"Antidote already synthesized - Focus on containment protocols",type:"info",duration:2e3});else if(["BioScanner","ContainmentField","EmergencySeal"].includes(e)){if("containment_vault"===this.multiRoom.currentRoom&&o&&o.isObjectiveActive("secure_outbreak")){const i={BioScanner:"bio_scanner",ContainmentField:"containment_field",EmergencySeal:"emergency_seal"}[e];t.fire("ui:notification",{text:`${i.replace("_"," ")} activated`,type:"info",duration:2e3}),o.updateObjective("secure_outbreak",i)}}else"DataTerminal"===e&&"data_archive"===this.multiRoom.currentRoom&&o&&o.isObjectiveActive("data_recovery")&&(this.multiRoom.addItem("research_data"),o.completeObjective("data_recovery"),t.fire("ui:notification",{text:"Critical research data downloaded - Facility knowledge preserved",type:"success",duration:4e3}))},onUnload(e,t){console.log("[ResearchFacility] Decontamination sequence initiated..."),this.timerInterval&&clearInterval(this.timerInterval),this.multiRoom&&this.multiRoom.setSceneInteractionHandler(null),this.interactionHandler=null,this.multiRoom&&this.multiRoom.onUnload(e,t)}};async function a(e,t,i,o){console.log("[ResearchFacility] Building decontamination chamber...");const n=i.create("EmergencyAlert",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1,1,.2]},rigidbody:{type:"static"}},position:[0,2,-4],scale:[2,2,.4],tags:["interactive","alert"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.8,.2,.2),e.emissive=new pc.Color(.4,.1,.1),e.emissiveIntensity=.8,e.update(),n.model.meshInstances.forEach(t=>t.material=e)}e.addChild(n);const a=i.create("KeycardLocker",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.4,.8,.3]},rigidbody:{type:"static"}},position:[4,1.5,-3],scale:[.8,1.6,.6],tags:["interactive","locker"]});if(a.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.4,.6),e.emissive=new pc.Color(.1,.2,.3),e.update(),a.model.meshInstances.forEach(t=>t.material=e)}o.addEntityToRoom(a,"decontamination"),[[-3,1.5,0],[0,1.5,0],[3,1.5,0]].forEach((t,o)=>{const n=i.create(`DeconShower_${o}`,{components:{model:{type:"cylinder"},collision:{type:"cylinder",radius:.5,height:3}},position:t,scale:[1,3,1],tags:["decon_equipment"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.8,.8,.9),e.metalness=.7,e.update(),n.model.meshInstances.forEach(t=>t.material=e)}e.addChild(n)});const c=i.createNPC("safety_officer_chen",{position:[-2,0,-2],displayName:"Safety Officer Chen",dialogue:{greeting:"Emergency protocols are in effect! We have a major containment breach in the research wing.",topics:{breach:"Multiple specimens have been compromised - this could be catastrophic.",keycard:"Emergency access codes are in the wall locker - you'll need them for the lab.",timer:"We have limited time before the contamination spreads beyond containment."}}});o.addEntityToRoom(c,"decontamination"),[{pos:[0,3.5,0],color:new pc.Color(.9,.9,1)},{pos:[-3,3.5,0],color:new pc.Color(.9,.9,1)},{pos:[3,3.5,0],color:new pc.Color(.9,.9,1)}].forEach((t,o)=>{const n=i.createLight("point",{color:t.color,intensity:2,range:8,position:t.pos});e.addChild(n)})}async function c(e,t,i,o){console.log("[ResearchFacility] Building main laboratory..."),[[-10,1,-8],[-4,1,-8],[4,1,-8],[10,1,-8],[-10,1,8],[-4,1,8],[4,1,8],[10,1,8]].forEach((e,t)=>{const n=i.create(`Specimen_${t}`,{components:{model:{type:"cylinder"},collision:{type:"cylinder",radius:.6,height:1.5},rigidbody:{type:"static"}},position:e,scale:[1.2,1.5,1.2],tags:["interactive","specimen"]});if(n.model){const e=new pc.StandardMaterial,i=t%2==0;e.diffuse=i?new pc.Color(.6,.8,.2):new pc.Color(.2,.6,.8),e.emissive=i?new pc.Color(.2,.3,.05):new pc.Color(.05,.2,.3),e.emissiveIntensity=.4,e.update(),n.model.meshInstances.forEach(t=>t.material=e)}o.addEntityToRoom(n,"main_laboratory")});const n=i.create("SynthesisEquipment",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[2,1.5,1.5]},rigidbody:{type:"static"}},position:[0,1.5,0],scale:[4,3,3],tags:["interactive","equipment"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.3,.4,.5),e.emissive=new pc.Color(.1,.3,.4),e.metalness=.6,e.update(),n.model.meshInstances.forEach(t=>t.material=e)}o.addEntityToRoom(n,"main_laboratory"),[[-8,.5,-4],[8,.5,-4],[-8,.5,4],[8,.5,4]].forEach((t,o)=>{const n=i.create(`ResearchBench_${o}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[3,.5,1]}},position:t,scale:[6,1,2],tags:["equipment"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.7,.7,.8),e.update(),n.model.meshInstances.forEach(t=>t.material=e)}e.addChild(n)});const a=i.createNPC("dr_martinez",{position:[6,0,0],displayName:"Dr. Martinez",dialogue:{greeting:"Thank goodness you're here! The specimens are showing unprecedented mutation rates.",topics:{analysis:"We need to analyze every contaminated specimen to understand the pathogen.",antidote:"Once we have the full analysis, we can synthesize a broad-spectrum antidote.",containment:"The vault systems are failing - we need that antidote before total containment loss."}}});o.addEntityToRoom(a,"main_laboratory"),[{pos:[0,4.5,0],color:new pc.Color(.9,.95,1)},{pos:[-8,4.5,0],color:new pc.Color(.9,.95,1)},{pos:[8,4.5,0],color:new pc.Color(.9,.95,1)}].forEach((t,o)=>{const n=i.createLight("point",{color:t.color,intensity:2.2,range:12,position:t.pos});e.addChild(n)})}async function s(e,t,i,o){console.log("[ResearchFacility] Building containment vault...");const n=i.create("BioScanner",{components:{model:{type:"cylinder"},collision:{type:"cylinder",radius:.8,height:2},rigidbody:{type:"static"}},position:[-6,1,-4],scale:[1.6,2,1.6],tags:["interactive","scanner"]}),a=i.create("ContainmentField",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1,2,.5]},rigidbody:{type:"static"}},position:[0,2,-4],scale:[2,4,1],tags:["interactive","field_generator"]}),c=i.create("EmergencySeal",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1.5,1,.3]},rigidbody:{type:"static"}},position:[6,1,-4],scale:[3,2,.6],tags:["interactive","seal_control"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.7,.3),e.emissive=new pc.Color(.1,.3,.15),e.update(),n.model.meshInstances.forEach(t=>t.material=e)}if(a.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.3,.3,.8),e.emissive=new pc.Color(.15,.15,.4),e.emissiveIntensity=.6,e.update(),a.model.meshInstances.forEach(t=>t.material=e)}if(c.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.8,.3,.2),e.emissive=new pc.Color(.4,.15,.1),e.update(),c.model.meshInstances.forEach(t=>t.material=e)}o.addEntityToRoom(n,"containment_vault"),o.addEntityToRoom(a,"containment_vault"),o.addEntityToRoom(c,"containment_vault"),[[-6,1.5,4],[-2,1.5,4],[2,1.5,4],[6,1.5,4]].forEach((t,o)=>{const n=i.create(`ContainmentCell_${o}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1.5,1.5,1.5]}},position:t,scale:[3,3,3],tags:["containment"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.4,.4,.4),e.emissive=new pc.Color(.2,.1,.1),e.emissiveIntensity=.3,e.update(),n.model.meshInstances.forEach(t=>t.material=e)}e.addChild(n)}),[{pos:[0,5.5,0],color:new pc.Color(1,.4,.4)},{pos:[-6,4.5,0],color:new pc.Color(1,.4,.4)},{pos:[6,4.5,0],color:new pc.Color(1,.4,.4)}].forEach((t,o)=>{const n=i.createLight("point",{color:t.color,intensity:1.8,range:10,position:t.pos});e.addChild(n)})}async function r(e,t,i,o){console.log("[ResearchFacility] Building data archive...");const n=i.create("DataTerminal",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[2,1.5,1]},rigidbody:{type:"static"}},position:[0,1.5,-4],scale:[4,3,2],tags:["interactive","terminal"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.3,.4),e.emissive=new pc.Color(.1,.2,.3),e.update(),n.model.meshInstances.forEach(t=>t.material=e)}o.addEntityToRoom(n,"data_archive"),[[-6,1.5,0],[6,1.5,0],[-6,1.5,4],[6,1.5,4]].forEach((t,o)=>{const n=i.create(`ServerRack_${o}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1,1.5,.5]}},position:t,scale:[2,3,1],tags:["server"]});if(n.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.15,.15,.15),e.emissive=new pc.Color(.05,.15,.1),e.update(),n.model.meshInstances.forEach(t=>t.material=e)}e.addChild(n)});const a=i.createLight("point",{color:new pc.Color(.6,.8,1),intensity:1.5,range:12,position:[0,3.5,0]});e.addChild(a)}}}]);