const BREATH_POINT_TYPE = "debugBreathPoint" , TAP_BREATH_POINT_TYPE = "debugTapBreathPoint" , DEFAULT_SEARCH_RANGE = 1e3; export default class Debug { constructor(e) { E(this, "isShowNearbyBreathPoints", !1); E(this, "isShowTapBreathPoints", !1); E(this, "isSceneShading", !0); E(this, "searchRange", DEFAULT_SEARCH_RANGE); E(this, "nearbyBreathPointListening", !1); E(this, "tapBreathPointListening", !1); E(this, "dumpStreamTimer", 0); this.room = e } toggleStats() { return this.room.stats.isShow ? this.room.stats.hide() : this.room.stats.show() } toggleNearbyBreathPoint(e=DEFAULT_SEARCH_RANGE) { this.searchRange = e, this.isShowNearbyBreathPoints = !this.isShowNearbyBreathPoints, this.isShowNearbyBreathPoints ? (this.getPointsAndRender(), this.setupNearbyBreathPointListener()) : this.room.breathPointManager.clearBreathPoints(BREATH_POINT_TYPE) } toggleTapBreathPoint() { this.isShowTapBreathPoints = !this.isShowTapBreathPoints, this.isShowTapBreathPoints ? this.setupTapPointListener() : this.room.breathPointManager.clearBreathPoints(TAP_BREATH_POINT_TYPE) } dumpStream(e, t=10 * 1e3) { if (this.dumpStreamTimer) throw new Error("dumpStream running"); this.room.networkController.rtcp.workers.saveframe = !0, this.dumpStreamTimer = window.setTimeout(()=>{ this.room.networkController.rtcp.workers.SaveMediaStream = !0, this.dumpStreamTimer = 0, e && e() } , t) } toggleSceneshading() { this.isSceneShading = !this.isSceneShading, this.isSceneShading ? this.room.sceneManager.changeVideoShaderForLowModel() : this.room.sceneManager.changeDefaultShaderForLowModel() } setupTapPointListener() { this.tapBreathPointListening || (this.tapBreathPointListening = !0, this.room.on("_coreClick", ({point: e})=>{ this.isShowTapBreathPoints && this.renderTapBreathPoint({ id: "tapToint", position: e }) } )) } renderTapBreathPoint({position: e, id: t}) { let r; if (r = this.room.breathPointManager.breathPoints.get(t)) { r.position = e; return } this.room.breathPointManager.addBreathPoint({ id: t, position: e, type: TAP_BREATH_POINT_TYPE, size: .8, forceLeaveGround: !0, billboardMode: !0, rotation: Math.abs(e.z) < 20 ? { pitch: 90, yaw: 0, roll: 0 } : { pitch: 0, yaw: 270, roll: 0 } }) } setupNearbyBreathPointListener() { var e; this.nearbyBreathPointListening || (this.nearbyBreathPointListening = !0, (e = this.room._userAvatar) == null || e.on("stopMoving", ()=>{ this.isShowNearbyBreathPoints && this.getPointsAndRender() } )) } async getPointsAndRender() { var r, n; const e = this.searchRange , t = ((r = this.room._userAvatar) == null ? void 0 : r.position) && await this.getNeighborPoints({ point: (n = this.room._userAvatar) == null ? void 0 : n.position, containSelf: !0, searchRange: e }) || []; this.room.breathPointManager.breathPoints.forEach(o=>{ !!t.find(s=>JSON.stringify(s) === o._id) || this.room.breathPointManager.clearBreathPoints(o._id) } ), t.forEach(o=>{ const a = JSON.stringify(o); this.room.breathPointManager.breathPoints.get(a) || this.room.breathPointManager.addBreathPoint({ id: a, position: o, type: BREATH_POINT_TYPE, rotation: { pitch: 90, yaw: 0, roll: 0 }, forceLeaveGround: !0 }) } ) } getNeighborPoints(e) { const {point: t, containSelf: r=!1, searchRange: n=500} = e; return this.room.actionsHandler.getNeighborPoints({ point: t, containSelf: r, searchRange: n }) } }