Testhostplaycanvasmobile / 364.bundle.js
kwabs22
puzzle scene and label fix attempts
8dcf070
"use strict";(self.webpackChunkplaycanvas_game=self.webpackChunkplaycanvas_game||[]).push([[364],{364:(e,t,o)=>{o.r(t),o.d(t,{default:()=>r});var i=o(96);const r={id:"security_complex",title:"Security Complex",type:"scene",async build(e,t,o){console.log("[SecurityComplex] Building security complex...");const r=new i.n(e,e.systems?.core||{});r.sceneBuilder=t,r.entityFactory=o,this.timeLimit=3e5,this.startTime=null,r.createRoom("security_office",{size:[15,3.5,12],lighting:"dim",position:[0,0,0],buildFunction:c,objectives:[{id:"security_breach",name:"Security Breach Response",description:"Investigate the security breach alert",type:"simple",autoStart:!0,rewards:{experience:30}},{id:"get_desk_keycard",name:"Emergency Access",description:"Find the emergency keycard in the security desk",type:"simple",rewards:{experience:40,items:[{id:"desk_keycard",quantity:1}]}}]}),r.createRoom("main_corridor",{size:[40,4,8],lighting:"corridor",position:[0,0,0],buildFunction:s,objectives:[{id:"patrol_corridor",name:"Security Patrol",description:"Check all access points in the corridor",type:"counter",target:6,progress:0,rewards:{experience:60},nextObjective:"find_emergency_key"},{id:"find_emergency_key",name:"Emergency Key Location",description:"Locate the emergency access key",type:"simple",prerequisites:["patrol_corridor"],rewards:{experience:50,items:[{id:"emergency_key",quantity:1}]}}]}),r.createRoom("camera_control",{size:[12,3,10],lighting:"control_room",position:[0,0,0],buildFunction:a,objectives:[{id:"security_clearance",name:"Security Clearance",description:"Obtain elevated security permissions",type:"simple",autoStart:!0,rewards:{experience:80,items:[{id:"security_clearance",quantity:1}]}}]}),r.createRoom("basement_storage",{size:[16,3,14],lighting:"storage",position:[0,0,0],buildFunction:n,objectives:[{id:"storage_search",name:"Storage Investigation",description:"Search storage crates for evidence",type:"counter",target:8,progress:0,rewards:{experience:90}}]}),r.createRoom("server_room",{size:[10,3,12],lighting:"server_room",position:[0,0,0],buildFunction:l,objectives:[{id:"access_mainframe",name:"Mainframe Access",description:"Access the master security terminal",type:"simple",rewards:{experience:150,skillPoints:3,items:[{id:"security_override",quantity:1}]}},{id:"lockdown_protocol",name:"Emergency Lockdown",description:"Execute facility-wide security lockdown",type:"sequence",target:["control_room_key","storage_access_key","master_override"],progress:0,rewards:{experience:200,skillPoints:5}}]}),r.createDoor("security_office","main_corridor",{type:"objective",id:"get_desk_keycard"},{playerSpawnPosition:[-15,0,0]}),r.createDoor("main_corridor","camera_control",{type:"objective",id:"find_emergency_key"},{playerSpawnPosition:[0,0,4]}),r.createDoor("main_corridor","basement_storage",{type:"objective",id:"find_emergency_key"},{playerSpawnPosition:[0,0,6]}),r.createDoor("camera_control","basement_storage",{type:"objective",id:"security_clearance"},{playerSpawnPosition:[0,0,6]}),r.createDoor("camera_control","server_room",{type:"objective",id:"security_clearance"},{playerSpawnPosition:[0,0,5]}),r.createDoor("server_room","basement_storage",{type:"none"},{playerSpawnPosition:[6,0,0]});const d=await r.build(e,t,o);return d.multiRoom=r,d},onLoad(e,t){console.log("[SecurityComplex] Security protocols activated");const o=e.root.findByTag("scene_root")[0];o&&o.multiRoom&&(o.multiRoom.onLoad(e,t),this.multiRoom=o.multiRoom,this.startTime=Date.now(),this.setupTimer(e),this.interactionHandler=o=>{this.handleSecurityInteraction(o,e,t)},this.multiRoom.setSceneInteractionHandler(this.interactionHandler),this.accessPointsChecked=new Set,this.cratesSearched=new Set,this.roomChangeHandler=e=>{console.log(`[SecurityComplex] Room changed to: ${e.roomId}`);const o=t.getSystem("objectivemanager");o&&"main_corridor"===e.roomId&&(o.isObjectiveActive("patrol_corridor")||o.isComplete("patrol_corridor")||(console.log("[SecurityComplex] Auto-starting patrol_corridor on room entry"),o.startObjective("patrol_corridor")))},e.on("room:changed",this.roomChangeHandler,this)),e.fire("ui:notification",{text:"SECURITY ALERT: Unauthorized access detected - 5 minute response window",type:"error",duration:6e3})},setupTimer(e){this.timerInterval=setInterval(()=>{if(!this.startTime)return;const t=Date.now()-this.startTime,o=Math.max(0,this.timeLimit-t),i=Math.floor(o/6e4),r=Math.floor(o%6e4/1e3);o>0?e.fire("ui:notification",{text:`Security Response Timer: ${i}:${r.toString().padStart(2,"0")}`,type:"warning",duration:1e3}):this.onTimeExpired(e)},1e4)},onTimeExpired(e){clearInterval(this.timerInterval),e.fire("ui:notification",{text:"TIME EXPIRED: Security lockdown failed - Facility compromised!",type:"error",duration:8e3})},handleSecurityInteraction(e,t,o){console.log("[SecurityComplex] Interaction triggered with:",e);const i=o.getSystem("objectivemanager");if("SecurityDesk"===e)i&&i.isObjectiveActive("security_breach")&&(i.completeObjective("security_breach"),i.startObjective("get_desk_keycard")),t.fire("ui:notification",{text:"ALERT: Multiple breach points detected across facility",type:"error",duration:4e3});else if("DeskDrawer"===e)i&&i.isObjectiveActive("get_desk_keycard")&&(this.multiRoom.addItem("desk_keycard"),i.completeObjective("get_desk_keycard"),t.fire("ui:notification",{text:"Emergency keycard obtained - Corridor access granted",type:"success",duration:3e3}));else if(e.startsWith("AccessPoint_")){const o=this.multiRoom.currentRoom;if(console.log(`[SecurityComplex] AccessPoint interaction in room: ${o}`),"main_corridor"===o&&i)if(i.isObjectiveActive("patrol_corridor")||i.isComplete("patrol_corridor")||(console.log("[SecurityComplex] Auto-starting patrol_corridor objective"),i.startObjective("patrol_corridor")),i.isObjectiveActive("patrol_corridor")){const o=parseInt(e.split("_")[1]);if(this.accessPointsChecked.has(o))t.fire("ui:notification",{text:`Access Point ${o+1}: Already checked`,type:"info",duration:1500});else{this.accessPointsChecked.add(o);const e=["COMPROMISED","SECURE","BREACH ATTEMPT","OFFLINE","TAMPERED","CRITICAL"];t.fire("ui:notification",{text:`Access Point ${o+1}: ${e[o]} (${this.accessPointsChecked.size}/6)`,type:o%2==0?"error":"warning",duration:2e3}),i.updateObjective("patrol_corridor",this.accessPointsChecked.size),console.log(`[SecurityComplex] Updated patrol_corridor: ${this.accessPointsChecked.size}/6 access points`)}}else console.warn("[SecurityComplex] patrol_corridor objective not active when accessing point")}else if("EmergencyKeyCabinet"===e)i&&i.isComplete("patrol_corridor")&&i.isObjectiveActive("find_emergency_key")&&(this.multiRoom.addItem("emergency_key"),i.completeObjective("find_emergency_key"),t.fire("ui:notification",{text:"Emergency access key acquired - Basement storage unlocked",type:"success",duration:3e3}));else if("MasterControlTerminal"===e)"camera_control"===this.multiRoom.currentRoom&&i&&i.isObjectiveActive("security_clearance")&&(this.multiRoom.addItem("security_clearance"),i.completeObjective("security_clearance"),t.fire("ui:notification",{text:"Security clearance obtained - Server room access granted",type:"success",duration:3e3}));else if(e.startsWith("StorageCrate_")){if("basement_storage"===this.multiRoom.currentRoom&&i&&i.isObjectiveActive("storage_search")){const o=parseInt(e.split("_")[1]);if(this.cratesSearched.has(o))t.fire("ui:notification",{text:`Crate ${o+1}: Already searched`,type:"info",duration:1500});else{this.cratesSearched.add(o);const e=["Suspicious electronic devices","Unauthorized access cards","Data storage devices","Communication equipment","Security bypass tools","Encrypted documents","Network infiltration gear","Master override codes"];t.fire("ui:notification",{text:`Evidence found: ${e[o]} (${this.cratesSearched.size}/8)`,type:"info",duration:3e3}),i.updateObjective("storage_search",this.cratesSearched.size),console.log(`[SecurityComplex] Updated storage_search: ${this.cratesSearched.size}/8 crates`)}}}else if("MainframeTerminal"===e)"server_room"===this.multiRoom.currentRoom&&i&&i.isObjectiveActive("access_mainframe")&&(this.multiRoom.addItem("security_override"),i.completeObjective("access_mainframe"),i.startObjective("lockdown_protocol"),t.fire("ui:notification",{text:"MAINFRAME ACCESS GRANTED - Initiating emergency protocols",type:"success",duration:4e3}));else if(["ControlRoomKey","StorageAccessKey","MasterOverride"].includes(e)){if("server_room"===this.multiRoom.currentRoom&&i&&i.isObjectiveActive("lockdown_protocol")){const o={ControlRoomKey:"control_room_key",StorageAccessKey:"storage_access_key",MasterOverride:"master_override"}[e];t.fire("ui:notification",{text:`${o.replace("_"," ")} activated`,type:"success",duration:2e3}),i.updateObjective("lockdown_protocol",o)}}else"security_chief_williams"===e&&t.fire("ui:notification",{text:'Security Chief Williams: "Multiple breach points detected! Check the desk for emergency keycard!"',type:"error",duration:4e3})},onUnload(e,t){console.log("[SecurityComplex] Security systems shutting down..."),this.timerInterval&&clearInterval(this.timerInterval),this.roomChangeHandler&&(e.off("room:changed",this.roomChangeHandler,this),this.roomChangeHandler=null),this.multiRoom&&this.multiRoom.setSceneInteractionHandler(null),this.interactionHandler=null,this.multiRoom&&this.multiRoom.onUnload(e,t)}};async function c(e,t,o,i){console.log("[SecurityComplex] Building security office...");const r=o.create("SecurityDesk",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[2,.5,1]},rigidbody:{type:"static"}},position:[0,.5,-4],scale:[4,1,2],tags:["interactive","desk"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.3,.3,.4),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}e.addChild(r);const c=o.create("DeskDrawer",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.3,.2,.2]},rigidbody:{type:"static"}},position:[1.5,1.2,-3.5],scale:[.6,.4,.4],tags:["interactive","drawer"]});if(c.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.4,.4,.4),e.emissive=new pc.Color(.1,.1,.2),e.update(),c.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(c,"security_office"),console.log("[SecurityComplex] Created drawer:",c.name,"Position:",c.getPosition(),"Tags:",Array.from(c.tags._list||[])),[[-3,1.2,-3.5],[0,1.2,-3.5],[3,1.2,-3.5]].forEach((t,i)=>{const r=o.create(`SecurityMonitor_${i}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.8,.5,.1]}},position:t,scale:[1.6,1,.2],tags:["monitor"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.1,.1,.1),e.emissive=new pc.Color(.1,.3,.1),e.emissiveIntensity=.5,e.update(),r.model.meshInstances.forEach(t=>t.material=e)}e.addChild(r)});const s=o.createNPC("security_chief_williams",{position:[-2,0,-2],displayName:"Security Chief Williams",dialogue:{greeting:"Code Red situation! We've got multiple security breaches across the facility.",topics:{breach:"Someone's systematically compromising our access points. We need immediate action.",keycard:"Emergency protocols are active - get the keycard from my desk drawer.",corridor:"Start with the main corridor - check every access point for signs of tampering."}}});e.addChild(s),console.log("[SecurityComplex] Created NPC:",s.name,"Position:",s.getPosition(),"Tags:",Array.from(s.tags._list||[]));const a=o.createLight("point",{color:new pc.Color(.6,.6,.8),intensity:1.5,range:10,position:[0,3,0]});e.addChild(a)}async function s(e,t,o,i){console.log("[SecurityComplex] Building main corridor..."),[[-18,1.5,3],[-10,1.5,3],[-2,1.5,3],[2,1.5,3],[10,1.5,3],[18,1.5,3]].forEach((e,t)=>{const r=o.create(`AccessPoint_${t}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.5,1,.2]},rigidbody:{type:"static"}},position:e,scale:[1,2,.4],tags:["interactive","access_point"]});if(r.model){const e=new pc.StandardMaterial,o=t%2==0;e.diffuse=o?new pc.Color(.6,.2,.2):new pc.Color(.2,.6,.2),e.emissive=o?new pc.Color(.2,.05,.05):new pc.Color(.05,.2,.05),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(r,"main_corridor")});const r=o.create("EmergencyKeyCabinet",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.5,1,.3]},rigidbody:{type:"static"}},position:[0,1,-3],scale:[1,2,.6],tags:["interactive","key_cabinet"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.7,.7,.2),e.emissive=new pc.Color(.2,.2,.05),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(r,"main_corridor"),[[-15,3.5,0],[-5,3.5,0],[5,3.5,0],[15,3.5,0]].forEach((t,i)=>{const r=o.create(`SecurityCamera_${i}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.3,.2,.3]}},position:t,scale:[.6,.4,.6],tags:["camera"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.2,.2),e.emissive=new pc.Color(.1,.05,.05),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}e.addChild(r)}),[{pos:[-15,3.5,0],color:new pc.Color(.8,.8,.9)},{pos:[-5,3.5,0],color:new pc.Color(.8,.8,.9)},{pos:[5,3.5,0],color:new pc.Color(.8,.8,.9)},{pos:[15,3.5,0],color:new pc.Color(.8,.8,.9)}].forEach((t,i)=>{const r=o.createLight("point",{color:t.color,intensity:1.2,range:8,position:t.pos});e.addChild(r)})}async function a(e,t,o,i){console.log("[SecurityComplex] Building camera control room...");const r=o.create("MasterControlTerminal",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[2,1,1]},rigidbody:{type:"static"}},position:[0,1,0],scale:[4,2,2],tags:["interactive","terminal"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.3,.4),e.emissive=new pc.Color(.1,.2,.3),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(r,"camera_control"),[[-4,2,-3],[0,2,-3],[4,2,-3]].forEach((t,i)=>{const r=o.create(`CameraDisplay_${i}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1,.8,.1]}},position:t,scale:[2,1.6,.2],tags:["display"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.1,.1,.1),e.emissive=new pc.Color(.2,.3,.2),e.emissiveIntensity=.3,e.update(),r.model.meshInstances.forEach(t=>t.material=e)}e.addChild(r)});const c=o.createLight("point",{color:new pc.Color(.6,.8,1),intensity:2,range:10,position:[0,2.5,0]});e.addChild(c)}async function n(e,t,o,i){console.log("[SecurityComplex] Building basement storage..."),[[-6,.5,-5],[-2,.5,-5],[2,.5,-5],[6,.5,-5],[-6,.5,5],[-2,.5,5],[2,.5,5],[6,.5,5]].forEach((e,t)=>{const r=o.create(`StorageCrate_${t}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.8,.8,.8]},rigidbody:{type:"static"}},position:e,scale:[1.6,1.6,1.6],tags:["interactive","crate"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.6,.4,.2),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(r,"basement_storage")});const r=o.createLight("point",{color:new pc.Color(.7,.6,.5),intensity:1,range:12,position:[0,2.5,0]});e.addChild(r)}async function l(e,t,o,i){console.log("[SecurityComplex] Building server room..."),[[-3,1,-4],[3,1,-4],[-3,1,0],[3,1,0],[-3,1,4],[3,1,4]].forEach((t,i)=>{const r=o.create(`ServerRack_${i}`,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.8,1.5,.4]}},position:t,scale:[1.6,3,.8],tags:["server"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.2,.2,.2),e.emissive=new pc.Color(.05,.1,.05),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}e.addChild(r)});const r=o.create("MainframeTerminal",{components:{model:{type:"box"},collision:{type:"box",halfExtents:[1.5,1,.5]},rigidbody:{type:"static"}},position:[0,1,5],scale:[3,2,1],tags:["interactive","mainframe"]});if(r.model){const e=new pc.StandardMaterial;e.diffuse=new pc.Color(.1,.3,.5),e.emissive=new pc.Color(.05,.15,.25),e.update(),r.model.meshInstances.forEach(t=>t.material=e)}i.addEntityToRoom(r,"server_room"),[{name:"ControlRoomKey",pos:[-2,1,2],color:new pc.Color(.4,.2,.2)},{name:"StorageAccessKey",pos:[2,1,2],color:new pc.Color(.2,.4,.2)},{name:"MasterOverride",pos:[0,1,-2],color:new pc.Color(.2,.2,.4)}].forEach((e,t)=>{const r=o.create(e.name,{components:{model:{type:"box"},collision:{type:"box",halfExtents:[.5,.8,.3]},rigidbody:{type:"static"}},position:e.pos,scale:[1,1.6,.6],tags:["interactive","lockdown_terminal"]});if(r.model){const t=new pc.StandardMaterial;t.diffuse=e.color,t.emissive=new pc.Color(.3*e.color.r,.3*e.color.g,.3*e.color.b),t.update(),r.model.meshInstances.forEach(e=>e.material=t)}i.addEntityToRoom(r,"server_room")});const c=o.createLight("point",{color:new pc.Color(.6,.7,1),intensity:1.8,range:10,position:[0,2.5,0]});e.addChild(c)}}}]);