cve-connector
Version:
UE Web 开发套件
956 lines • 1.27 MB
JavaScript
var Vg = Object.defineProperty;
var VA = Object.getOwnPropertySymbols;
var qg = Object.prototype.hasOwnProperty, Rg = Object.prototype.propertyIsEnumerable;
var qA = (A, g, e) => g in A ? Vg(A, g, { enumerable: !0, configurable: !0, writable: !0, value: e }) : A[g] = e, I = (A, g) => {
for (var e in g || (g = {}))
qg.call(g, e) && qA(A, e, g[e]);
if (VA)
for (var e of VA(g))
Rg.call(g, e) && qA(A, e, g[e]);
return A;
};
var E = (A, g, e) => new Promise((n, C) => {
var w = (l) => {
try {
o(e.next(l));
} catch (M) {
C(M);
}
}, D = (l) => {
try {
o(e.throw(l));
} catch (M) {
C(M);
}
}, o = (l) => l.done ? n(l.value) : Promise.resolve(l.value).then(w, D);
o((e = e.apply(A, g)).next());
});
import { Logger as h, Config as hg, PixelStreaming as og } from "@epicgames-ps/lib-pixelstreamingfrontend-ue5.3";
import { PixelStreamingApplicationStyle as _g, Application as $g } from "@epicgames-ps/lib-pixelstreamingfrontend-ui-ue5.3";
const AB = [
"featureselect",
"featurehover",
"measurefinished",
"sequencepause",
"sequenceplay",
"sequencestop",
"timechange"
], gB = /^(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.(\d+)$/, BB = "$1-$2-$3T$4:$5:$6";
let c = document.getElementById("app");
function jA(A, g) {
const e = eB(A);
if (!e) {
H("message", {
Action: A,
Data: g
});
return;
}
e === "timechange" ? g = g.replace(
gB,
BB
) : e === "yaw" && (g = Number(g));
const n = new CustomEvent(e, { detail: g });
c == null || c.dispatchEvent(n);
}
function H(A, g) {
const e = new CustomEvent(A, { detail: g });
c == null || c.dispatchEvent(e);
}
function NA(A) {
const g = new ErrorEvent("error", { message: A });
c == null || c.dispatchEvent(g);
}
function _(A, g) {
c == null || c.addEventListener(A, g);
}
function eB(A) {
if (AB.includes(A))
return A;
switch (A) {
case "MouseClick":
return "mouseclick";
case "ViewDirectionChanged":
return "yaw";
case "WalkthroughPathPlayTime":
return "roam";
default:
return null;
}
}
function $(A, g) {
c == null || c.removeEventListener(A, g);
}
function nB(A) {
c = A;
}
const fB = `/* Container */\r
cve-player {\r
cursor: pointer;\r
display: block;\r
height: 100%;\r
position: relative;\r
width: 100%;\r
z-index: 0;\r
}\r
\r
/* Medias */\r
.cve-media-wrapper {\r
position: relative;\r
}\r
.cve-media-wrapper video {\r
height: 100%;\r
width: 100%;\r
}\r
`;
let nA = null;
const CB = (A, g = 62.5, e = !1) => (...n) => {
nA && clearTimeout(nA), e && A(...n), nA = setTimeout(() => {
e || A(...n), nA = null;
}, g);
}, lg = CB((...A) => E(null, null, function* () {
if (!(v != null && v.isConnected))
return;
const [g, e] = A, n = (g != null ? g : v.matchMakerURL).replace(/\/$/, ""), C = e != null ? e : v.applicationName;
if (!n || !C)
return;
if (/,/.test(n)) {
const l = n.split(",").map((K) => ZA(K, C, !0)), M = yield Promise.any(l);
M && v.setAttribute("signaling-url", M);
return;
}
const w = `${n}/GetPixelStreamingInstance?ApplicationName=${C}`, D = v.getAttribute("data-source");
if (w === D) {
oA();
return;
}
v.setAttribute("data-source", w);
const o = yield ZA(n, C).catch(NA);
o && v.setAttribute("signaling-url", o);
}));
function ZA(A, g, e = !1) {
return E(this, null, function* () {
if (A = A.replace(/\/$/, ""), !g || !A)
throw new Error("Invalid Match Maker Origin Or Appilication Name");
try {
const n = `${A}/GetPixelStreamingInstance?ApplicationName=${g}`, w = yield (yield fetch(n)).json();
if (w.Code === "1" || w.Code === "2") {
if (e)
throw new Error("No Avaliable Instance!");
return PB(A, g);
}
if (!w.Data)
throw new Error("Get Pixel Streaming Instance Failed!");
if (w.Code === "3")
throw new Error(w.Data);
return w.Data;
} catch (n) {
throw n;
}
});
}
function PB(A, g) {
return new Promise((e) => {
setTimeout(() => {
ZA(A, g).then(e);
}, 1e3);
});
}
const wB = `cve-player {\r
align-items: center;\r
display: flex;\r
justify-content: center;\r
}\r
\r
.cve-media-wrapper {\r
aspect-ratio: 16 / 9;\r
}\r
\r
@media screen and (max-aspect-ratio: 16 / 9) {\r
.cve-media-wrapper {\r
width: 100%;\r
}\r
}\r
@media screen and (min-aspect-ratio: 16 / 9) {\r
.cve-media-wrapper {\r
height: 100%;\r
}\r
}\r
`;
let AA = null;
function zg() {
const A = v == null ? void 0 : v.aspectRatio;
return typeof A == "string" ? A.replace(/\s/g, "").split("/").length > 1 : !1;
}
function vB(A) {
AA = A;
}
function RA() {
if (!AA)
return;
const A = v == null ? void 0 : v.aspectRatio;
if (typeof A == "string") {
const g = A.replace(/\s/g, "").split("/"), e = zg();
if (u == null || u.classList.toggle("fixed-size", e), e) {
const n = Number(g[0]), C = Number(g[1]);
QB(n, C);
return;
}
}
AA.textContent = `
.cve-media-wrapper {
height: 100%;
width: 100%;
}
`;
}
function QB(A = 16, g = 9) {
if (!AA)
return;
const e = /aspect-ratio: (\d+) \/ (\d+)/g, n = `aspect-ratio: ${A} / ${g}`;
AA.textContent = wB.replace(e, n);
}
let DA, v;
class DB extends HTMLElement {
constructor() {
super(), rB(), v = this, nB(this), DA == null || DA(this);
}
get applicationName() {
var g;
return (g = this.getAttribute("application-name")) != null ? g : "";
}
set applicationName(g) {
this.setAttribute("application-name", g);
}
get aspectRatio() {
var g;
return (g = this.getAttribute("aspect-ratio")) != null ? g : "auto";
}
set aspectRatio(g) {
this.setAttribute("aspect-ratio", g);
}
attributeChangedCallback(g, e, n) {
switch (g) {
case "application-name":
case "matchmaker-url": {
lg();
break;
}
case "signaling-url": {
oA();
break;
}
case "aspect-ratio": {
RA();
break;
}
case "oncommand":
case "onfeaturehover":
case "onfeatureselect":
case "onmessage":
case "onmouseclick":
case "onroam":
case "onsequencepause":
case "onsequenceplay":
case "onsequencestop":
case "onstart":
case "onstop":
case "ontimechange":
case "onyaw": {
const C = g.replace(/^on/, "");
typeof n == "function" ? this.addEventListener(C, n) : typeof e == "function" && this.removeEventListener(C, e);
break;
}
case "volume": {
f("SetVolume", n);
break;
}
}
}
connectedCallback() {
const g = document.createElement("style");
g.id = "cve-common-style", g.textContent = fB;
const e = document.createElement("style");
e.id = "cve-specific-style", e.textContent = `
.cve-media-wrapper {
height: 100%;
width: 100%;
}
`, this.append(g, e), vB(e), oA(), RA();
}
disconnectedCallback() {
iA();
}
get height() {
return Number(this.getAttribute("height"));
}
set height(g) {
this.setAttribute("height", g.toFixed(0));
}
get matchMakerURL() {
var g;
return (g = this.getAttribute("matchmaker-url")) != null ? g : "";
}
set matchMakerURL(g) {
this.setAttribute("matchmaker-url", g);
}
static get observedAttributes() {
return [
"application-name",
"aspect-ratio",
"matchmaker-url",
"oncommand",
"onfeaturehover",
"onfeatureselect",
"onmessage",
"onmouseclick",
"onroam",
"onsequencepause",
"onsequenceplay",
"onsequencestop",
"onstart",
"onstop",
"onyaw",
"signaling-url",
"volume"
];
}
set oncommand(g) {
this.addEventListener("command", g);
}
set onfeaturehover(g) {
this.addEventListener("featurehover", g);
}
set onfeatureselect(g) {
this.addEventListener("featureselect", g);
}
set onmessage(g) {
this.addEventListener("message", g);
}
set onmouseclick(g) {
this.addEventListener("mouseclick", g);
}
set onroam(g) {
this.addEventListener("roam", g);
}
set onsequencepause(g) {
this.addEventListener("sequencepause", g);
}
set onsequenceplay(g) {
this.addEventListener("sequenceplay", g);
}
set onsequencestop(g) {
this.addEventListener("sequencestop", g);
}
set onstart(g) {
this.addEventListener("start", g);
}
set onstop(g) {
this.addEventListener("stop", g);
}
set ontimechange(g) {
this.addEventListener("timechange", g);
}
set onyaw(g) {
this.addEventListener("yaw", g);
}
get ready() {
return this.hasAttribute("ready");
}
set ready(g) {
this.toggleAttribute("ready", g);
}
get signalingURL() {
var g;
return (g = this.getAttribute("signaling-url")) != null ? g : "";
}
set signalingURL(g) {
this.setAttribute("signaling-url", g);
}
get volume() {
const g = this.getAttribute("volume");
return Number(typeof g != "string" ? 0.3 : g);
}
set volume(g) {
this.setAttribute("volume", g.toFixed(1));
}
get width() {
return Number(this.getAttribute("width"));
}
set width(g) {
this.setAttribute("width", g.toFixed(0));
}
}
function vf(A) {
const g = "cve-player";
DA = A, customElements.get(g) || customElements.define(g, DB);
}
const tB = ["MouseClick", "timechange", "ViewDirectionChanged", "Walk", "WalkthroughPathPlayTime"];
h.SetLoggerVerbosity(-1);
const V = new hg({
initialSettings: {
AutoPlayVideo: !1,
AutoConnect: !1,
HoveringMouse: !0,
MatchViewportRes: !0,
MouseInput: !0,
StartVideoMuted: !0,
SuppressBrowserKeys: !1,
WaitForStreamer: !0,
PreferredCodec: "H264 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f"
},
useUrlParams: !1
});
let t = null, W = null, cg = sB, u = null;
function rB() {
t == null || t.disconnect(), t = null, W = null, u = null;
}
function oA(A) {
var w;
if (iA(), !(v != null && v.isConnected))
return;
const g = A != null ? A : v.signalingURL, e = g !== "", n = e ? g.replace(/^http/, "ws") : void 0;
if (V.setSettings({
AutoPlayVideo: e,
AutoConnect: e,
ss: n
}), h.Warning("Signaling URL", n || "undefined"), t) {
t.reconnect();
return;
}
const C = cg(V);
u = C.videoElementParent, W = document.createElement("div"), W.className = "cve-media-wrapper", W.appendChild(u), v.appendChild(W), t = C.pixelStreaming, u == null || u.classList.toggle("fixed-size", zg()), (w = C == null ? void 0 : C.callback) == null || w.call(C), lB();
}
function sB(A) {
const g = document.createElement("div");
return {
pixelStreaming: new og(A, {
videoElementParent: g
}),
videoElementParent: g
};
}
function iA() {
v && (t == null || t.disconnect(), v.ready = !1);
}
function YA(A) {
const g = JSON.parse(A), e = /^(\{|\[)|(\]|\})$/;
return typeof g.Data == "string" && e.test(g.Data) && (g.Data = JSON.parse(g.Data)), g;
}
function aB() {
t == null || t.reconnect();
}
function oB(A, g) {
const e = A.UID;
t == null || t.addResponseEventListener(e, (n) => {
const C = YA(n);
(C == null ? void 0 : C.UID) === e && (g(C), t == null || t.removeResponseEventListener(e));
}), h.Warning("CVE Command", JSON.stringify(A)), t == null || t.emitUIInteraction(A);
}
function lB() {
t && (t.addEventListener("playStream", () => {
H("start", Date.now());
}), t.addEventListener("playStreamError", () => {
NA("Play Stream Error");
}), t.addEventListener("playStreamRejected", () => {
H("stop", "Play Stream Rejected");
}), t.addEventListener("streamerListMessage", (A) => {
const g = A.data.messageStreamerList.ids, e = V.getSettingOption("PreferredCodec");
if (g.length > 1 && V.setOptionSettingValue("StreamerId", g[0]), e.options.length > 1) {
const n = e.options.length - 1;
V.setOptionSettingValue("PreferredCodec", e.options[n]);
}
}), t.addEventListener("webRtcConnected", () => {
v && (v.ready = !0);
}), t.addResponseEventListener("message", (A) => {
const g = YA(A);
g.Action ? (jA(g.Action, g.Data), tB.includes(g.Action) ? h.Info(g.Action, JSON.stringify(g.Data), 0) : h.Warning(g.Action, JSON.stringify(g.Data))) : H("message", g);
}));
}
function Qf(A) {
cg = A;
}
const SA = /* @__PURE__ */ new Map();
let L = null;
function zB(A) {
const g = YA(A.data);
if (g.Action) {
jA(g.Action, g.Data);
return;
}
if (H("message", g), !g.UID)
return;
const e = SA.get(g.UID);
e && (e(g), SA.delete(g.UID));
}
function cB(A, g) {
!(A.Command || A.Console) || !A.UID || (SA.set(A.UID, g), L == null || L.send(JSON.stringify(A)));
}
function Df(A) {
window.uews = L = new WebSocket(A), L.onmessage = zB, L.onerror = () => {
NA("Web Socket Error");
}, L.onclose = () => {
H("stop", "Web Socket Closed");
}, L.onopen = () => {
H("start", Date.now());
};
}
const OA = /* @__PURE__ */ new Map();
function IB(A) {
const g = /^(\{|\[)|(\]|\})$/;
if (typeof A.Data == "string" && g.test(A.Data) && (A.Data = JSON.parse(A.Data)), A.Action) {
jA(A.Action, A.Data);
return;
}
if (H("message", A), !A.UID)
return;
const e = OA.get(A.UID);
e && (e(A), OA.delete(A.UID));
}
function MB(A, g) {
window.ue && (!A.UID || !(A.Command || A.Console) || (OA.set(A.UID, g), window.ue.interface.web2ue(JSON.stringify(A))));
}
function tf() {
window.ue && (window.ue.interface.ue2web = IB);
}
function x(A, g) {
return Mg({
Console: g ? A + " " + g : A,
UID: Ig()
});
}
function Ig() {
let g = 16;
const e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""), n = [];
g = g || e.length;
for (let C = 0; C < 8; C++)
n[C] = e[0 | Math.random() * g];
return n.join("");
}
function f(A, g) {
return Mg({
Command: A,
Data: {
Parameters: g
},
UID: Ig()
});
}
function Mg(A) {
return new Promise(
(g, e) => {
H("command", A), window.ue ? MB(A, g) : window.uews ? cB(A, g) : t ? oB(A, g) : e({ Result: "[Error] Failed to get UE host!" });
}
);
}
const xA = {
addDecal: (A, g, e) => f("AddDecal", {
Tag: A,
URL: g,
XMax: e[2],
XMin: e[0],
YMax: e[3],
YMin: e[1]
}),
delete: (A, g = !1) => f("DeleteActorByTag", {
IncludeChildren: g,
Tag: A
}),
hide: (A, g = !1) => f("HideActorByTag", {
IncludeChildren: g,
Tag: A
}),
show: (A, g = !1) => f("ShowActorByTag", {
IncludeChildren: g,
Tag: A
})
}, i = {
addMultiView: (A) => f("AddMultiView", A),
deleteSightline: (A) => f("DeleteIntervisibilityAnalysis", A),
deleteSkyline: () => f("StopSkylineAnalysis"),
deleteViewshed: (A) => f("DeleteViewshedAnalysis", A),
drawSightline: () => f("StartIntervisibilityAnalysis"),
drawSkyline: () => f("StartSkylineAnalysis"),
drawViewshed: () => f("StartViewshedAnalysis"),
refreshMultiView: () => f("RefreshMultiView"),
removeMultiView: (A) => f("RemoveMultiView", A),
startMultiView: (A) => f("StartMultiViewAnalysis", { Tags: A }),
stopMultiView: () => f("StopMultiViewAnalysis")
}, y = {
addArcgisLayer: (A) => f("AddArcGISWmtsLayer", A),
addCustomLayer: ({
EPSG: A = "3857",
Format: g = "image/jpeg",
Id: e,
GroupId: n,
Index: C,
Layer: w = "",
RequestHeaders: D,
Style: o = "default",
Subdomains: l,
TileMatrixSetId: M = "",
TileMatrixSetLabelPrefix: K = "",
Url: mA
}) => f("AddWmtsLayer", {
EPSG: A,
Format: g,
Id: e,
GroupId: n,
Index: C,
Layer: w,
RequestHeaders: D,
Style: o,
Subdomains: l,
TileMatrixSetId: M,
TileMatrixSetLabelPrefix: K,
Url: mA
}),
addMapboxLayer: (A) => f("AddMapboxWmtsLayer", A),
addTiandituLayer: (A) => f("AddTianDiTuWmtsLayer", A),
config: ({
GeographicEPSG: A = "4326",
IsBigScene: g = !1,
IsOriginLocationInProjectedCRS: e,
OriginCenter: n,
ProjectedEPSG: C = "4549"
}) => f("SetGeoReferencingParameters", {
IsBigScene: g,
GeographicEPSG: A,
IsOriginLocationInProjectedCRS: e,
OriginCenter: n,
ProjectedEPSG: C
}),
create3dTiles: (A, g, e = 16) => f("Create3DTiles", {
Id: A,
Url: g,
MaximumScreenSpaceError: e
}),
delete3dTiles: (A) => f("Delete3Dtiles", { Id: A }),
deleteAll: () => f("DeleteAllWmtsLayer"),
deleteLayer: (A) => f("DeleteWmtsLayer", A),
deleteLayerGroup: (A) => f("DeleteWmtsLayerByGroupId", A),
hide3dTiles: (A) => f("Hide3Dtiles", { Id: A }),
hideAll: () => f("HideAllWmtsLayer"),
hideLayer: (A) => f("HideWmtsLayer", A),
hideLayerGroup: (A) => f("HideWmtsLayerByGroupId", A),
hideOsgb: (A) => f("HideOsgb", { Id: A }),
loadOsgb: (A, g, e = 1.5, n = [0, 0, 0]) => f("LoadOsgb", {
Id: A,
OsgbDirectoryName: g,
LodScale: e,
Offset: n
}),
setCesiumTerrainLayer: (A) => f("SetTerrainLayerByCesiumIon", A),
setCustomLayer: (A) => f("ChangeWmtsLayer", A),
setHeaders: (A, g) => f("ChangeRequestHeaders", { Id: A, RequestHeaders: g }),
setLayerIndex: (A, g) => f("ChangeWmtsLayerIndex", { Id: A, Index: g }),
setTerrainLayer: (A) => f("SetTerrainLayerByUrl", A),
show3dTiles: (A) => f("Show3Dtiles", { Id: A }),
showAll: () => f("ShowAllWmtsLayer"),
showLayer: (A) => f("ShowWmtsLayer", A),
showLayerGroup: (A) => f("ShowWmtsLayerByGroupId", A),
showOsgb: (A) => f("ShowOsgb", { Id: A }),
toggleDebug: (A, g) => f("ChangeDebugMessages", { Id: A, ShowDebugMessage: g }),
unloadOsgb: (A) => f("UnloadOsgb", { Id: A })
}, cA = {
loadStreamLevels: (A, g = !0, e = !0, n = !1) => f("LoadStreamLevels", {
LevelNames: A,
UnloadOtherStreamLevels: g,
MakeVisibleAfterLoad: e,
ShouldBlockOnLoad: n
}),
openLevel: (A, g) => f("OpenLevel", {
MainLevelName: A,
StreamLevelNames: g
}),
restartLevel: () => x("RestartLevel", ""),
unloadStreamLevels: (A, g = !1) => f("UnloadStreamLevels", {
LevelNames: A,
ShouldBlockOnLoad: g
})
}, BA = {
focus: (A) => f("FocusById", { Id: A }),
load: (A, g, e) => f("Load", {
GroupId: e,
Id: g,
Path: A
}),
unload: (A) => f("UnloadById", { Id: A }),
unloadAll: () => f("UnloadAll"),
unloadByGroup: (A) => f("UnloadByGroupId", { GroupId: A })
}, IA = {
addTag: (A, g, e) => f("AddPointTag", I({ Key: g, Value: e }, A)),
create: (A) => f("CreatePoint", A),
delete: (A) => f("DeletePoint", A),
hide: (A) => f("HidePoint", A),
removeTag: (A, g) => f("RemovePointTag", I({ Key: g }, A)),
removeAllTags: (A) => f("RemovePointAllTags", A),
select: (A) => f("SelectPoint", A),
show: (A) => f("ShowPoint", A),
unselect: () => f("UnselectPoint"),
update: (A) => f("UpdatePoint", A)
}, MA = {
addTag: (A, g, e) => f("AddPolygonTag", I({ Key: g, Value: e }, A)),
create: (A) => f("CreatePolygon", A),
delete: (A) => f("DeletePolygon", A),
hide: (A) => f("HidePolygon", A),
removeTag: (A, g) => f("RemovePolygonTag", I({ Key: g }, A)),
removeAllTags: (A) => f("RemovePolygonAllTags", A),
select: (A) => f("SelectPolygon", A),
show: (A) => f("ShowPolygon", A),
unselect: () => f("UnselectPolygon"),
update: (A) => f("UpdatePolygon", A)
}, U = {
addTag: (A, g, e) => f("AddPolylineTag", I({ Key: g, Value: e }, A)),
create: (A) => f("CreatePolyline", A),
delete: (A) => f("DeletePolyline", A),
hide: (A) => f("HidePolyline", A),
hideWithAnimateAndDuration: (A, g, e) => f("HidePolyline", I({
Animate: g,
AnimateDuration: e
}, A)),
hideWithAnimateAndSpeed: (A, g, e) => f("HidePolyline", I({
Animate: g,
AnimateSpeed: e
}, A)),
removeTag: (A, g) => f("RemovePolylineTag", I({ Key: g }, A)),
removeAllTags: (A) => f("RemovePolylineAllTags", A),
select: (A) => f("SelectPolyline", A),
show: (A) => f("ShowPolyline", A),
showWithAnimateAndDuration: (A, g, e) => f("ShowPolyline", I({
Animate: g,
AnimateDuration: e
}, A)),
showWithAnimateAndSpeed: (A, g, e) => f("ShowPolyline", I({
Animate: g,
AnimateSpeed: e
}, A)),
unselect: () => f("UnselectPolyline"),
update: (A) => f("UpdatePolyline", A)
}, EA = {
addTag: (A, g, e) => f("AddPolymeshTag", I({ Key: g, Value: e }, A)),
create: (A) => f("CreatePolymesh", A),
delete: (A) => f("DeletePolymesh", A),
hide: (A) => f("HidePolymesh", A),
removeTag: (A, g) => f("RemovePolymeshTag", I({ Key: g }, A)),
removeAllTags: (A) => f("RemovePolymeshAllTags", A),
select: (A) => f("SelectPolymesh", A),
show: (A) => f("ShowPolymesh", A),
unselect: () => f("UnselectPolymesh"),
update: (A) => f("UpdatePolymesh", A)
}, JA = {
jumpTo: (A) => f("JumpToSeconds", A),
pause: (A = !1) => f("PauseSequence", A),
play: (A) => f("PlaySequence", A),
stop: () => f("StopSequence")
}, XA = {
mute: () => f("Mute"),
setVolume: (A) => f("SetVolume", A),
unmute: () => f("Unmute")
}, EB = /^(\d)(\d)(\d)(\d)-(0?)(\d+)-(0?)(\d+)T(0?)(\d+):(0?)(\d+):(0?)(\d+)\.(0?)(\d+)Z$/, JB = {
dd: "$7$8",
d: "$8",
hh: "$9$10",
h: "$10",
MM: "$5$6",
M: "$6",
mm: "$11$12",
m: "$12",
ss: "$13$14",
s: "$14",
S: "$16",
yyyy: "$1$2$3$4",
yyy: "$2$3$4",
yy: "$3$4",
y: "$4"
};
function Eg(A, g) {
return Object.entries(JB).forEach(([e, n]) => {
g = g.replace(new RegExp(e), n);
}), A.toJSON().replace(EB, g);
}
const lA = {
disableRealtime: () => f("DisableRealtime"),
enableRealtime: () => f("EnableRealtime"),
setDateTime: (A) => f("SetDateTime", Eg(A, "yyyy-MM-dd hh:mm:ss"))
};
var O = /* @__PURE__ */ ((A) => (A[A.SpringArm = 0] = "SpringArm", A[A.GIS = 1] = "GIS", A[A.Free = 2] = "Free", A[A.Editor = 3] = "Editor", A))(O || {});
const m = {
addPath: ({ Delays: A, Durations: g, Positions: e }) => f("MakeWalkthroughPath", {
Position: e.map(({ Location: n, Rotation: C }) => ({
Location: `(X=${n[0]},Y=${n[1]},Z=${n[2]})`,
Rotation: `(P=${C[1]},Y=${C[2]},R=${C[0]})`
})),
StayDurations: A,
WalkthroughTimes: g
}),
changeViewMode: (A) => f("ChangeViewMode", A),
deletePath: (A) => f("DeleteWalkthroughPath", A),
flyTo: ({
Location: A,
Distance: g,
UseCurrentDistance: e,
UseCurrentRotation: n,
Rotation: C = []
}, w) => f("FlyTo", {
Distance: g,
Duration: w,
Location: `(X=${A[0]},Y=${A[1]},Z=${A[2]})`,
Rotation: `(P=${C[1]},Y=${C[2]},R=${C[0]})`,
UseCurrentDistance: e,
UseCurrentRotation: n
}),
flyToBookmark: (A, g) => f("FlyToBookmark", {
Bookmark: A,
Duration: g
}),
getView: () => E(null, null, function* () {
const A = yield f("GetView"), g = A.Data, [e, n, C] = g.Location.replace(/(X|Y|Z)=/g, "").split(" "), [w, D, o] = g.Rotation.replace(/(P|Y|R)=/g, "").split(" ");
return {
Type: "Command",
UID: A.UID,
Command: "GetView",
Data: {
Location: [Number(e), Number(n), Number(C)],
Rotation: [Number(o), Number(w), Number(D)],
Distance: g.ArmLength
},
Result: !0
};
}),
playPath: (A) => f("PlayWalkthroughPath", A),
replayPath: (A) => f("ReplayWalkthroughPath", A),
resetView: (A) => f("ResetView", A),
seekPath: (A, g) => f("SeekWalkthroughPath", {
Time: g,
PathId: A
}),
stopPath: (A) => f("StopWalkthroughPath", A)
}, Jg = {
changeByPreset: (A, g = 0) => f("ChangeWeatherByPreset", {
Duration: g,
Preset: A
}),
changeBySettings: (A, g = 0) => f("ChangeWeatherBySettings", I({ Duration: g }, A))
};
function rf(A, g) {
return {
Coordinates: g,
Style: A
};
}
function sf(A, g) {
return {
Coordinates: g,
Style: A
};
}
function af(A, g) {
return {
Coordinates: g,
Style: A
};
}
function of(A, g, e) {
return {
Coordinates: g,
Height: e,
Style: A
};
}
function lf(A) {
return x(
"PixelStreaming.WebRTC.DegradationPreference",
A
);
}
function zf(A) {
return x("r.DynamicRes.OperationMode", A ? "2" : A === void 0 ? "1" : "0");
}
function cf(A, g) {
const e = `${A}x${g}f`;
return x("r.setRes", e);
}
function If(A) {
A < 1 && (A = window.devicePixelRatio * 100);
const g = A.toFixed();
return x("r.ScreenPercentage", g);
}
const kB = {
"&": "amp",
"<": "lt",
">": "gt",
'"': "quot",
"'": "#39",
"/": "#x2F"
}, yB = (A) => String(A).replace(/[&<>"'\/\\]/g, (g) => `&${kB[g]};`), mB = (A) => ({
tabIndex: "tabindex",
className: "class",
readOnly: "readonly"
})[A] || A;
function B(A, g, ...e) {
g = g || {};
const n = [...e];
if (typeof A == "function")
return g.children = n, A(g);
const C = ["svg", "g", "path"].includes(A) ? document.createElementNS("http://www.w3.org/2000/svg", A) : document.createElement(A);
for (let [w, D] of Object.entries(g))
w = yB(mB(w)), w.startsWith("on") && w.toLowerCase() in window ? C.addEventListener(w.toLowerCase().substring(2), D) : w === "ref" ? D(C) : w === "style" ? Object.assign(C.style, D) : D === !0 ? C.setAttribute(w, w) : D !== !1 && D != null ? C.setAttribute(w, D) : D === !1 && C.removeAttribute(w);
for (; n.length; ) {
const w = n.shift();
Array.isArray(w) ? n.push(...w) : C.appendChild(
w.nodeType == null ? document.createTextNode(w.toString()) : w
);
}
return C;
}
const J = (A) => {
const g = document.createElement("slot");
return g.append(...A.children), g;
}, hA = {}, uB = { set: TB };
new Proxy({}, uB);
const dB = {}, HB = {};
function TB(A, g, e, n) {
return dB[g].forEach((C) => LB(C, e)), Reflect.set(A, g, e, n);
}
function LB(A, g) {
const [e, n] = A.split("@"), C = hA[e];
if (!C.dataset.signal) {
delete hA[e];
return;
}
const w = (HB[A] || "${self}").replace(/\$\{self\}/g, g);
if (n === "text") {
C.textContent = w;
return;
}
if (n === "value" && C.tagName === "INPUT") {
C.value = g;
return;
}
C.setAttribute(n, w);
}
function z(A) {
let g = null;
return /* @__PURE__ */ B(
"section",
{
className: "debug-rows" + (A.opened || window.uews || window.ue ? "" : " collapsed"),
ref: (e) => {
g = e;
}
},
/* @__PURE__ */ B(
"div",
{
className: "debug-header",
onclick: () => {
g == null || g.classList.toggle("collapsed");
}
},
A.desc
),
A.slot
);
}
const ZB = [120.01168722430221, 30.249110392135236, 120.0139057862743, 30.251019653237694], SB = "data:image/png;base64,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