index.html 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <!-- <link rel="stylesheet" href="./index.css" /> -->
  9. <link rel="stylesheet" href="./css/toastify.min.css" />
  10. <style>
  11. .loading {
  12. position: absolute;
  13. width: 100%;
  14. height: 100%;
  15. background: #fff url("./assets/loading.gif") center;
  16. background-repeat: no-repeat;
  17. background-size: 600px 600px;
  18. }
  19. .tip {
  20. position: absolute;
  21. top: 2rem;
  22. left: 50%;
  23. transform: translateX(-50%);
  24. padding: 1rem 1.6rem;
  25. background-color: #5bc1d1;
  26. color: white;
  27. z-index: 9999;
  28. border-radius: 0.2rem;
  29. opacity: 1;
  30. transition: opacity .2s;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <!-- Babylon.js -->
  36. <script src="./libs/jquery-1.10.2.min.js"></script>
  37. <script src="./libs/dat.gui.min.js"></script>
  38. <script src="./libs/ammo.js"></script>
  39. <script src="./libs/cannon.js"></script>
  40. <script src="./libs/Oimo.js"></script>
  41. <script src="./libs/earcut.min.js"></script>
  42. <script src="./libs/recast.js"></script>
  43. <script src="./libs/babylon.js"></script>
  44. <script src="./libs/babylonjs.materials.min.js"></script>
  45. <script src="./libs/babylonjs.proceduralTextures.min.js"></script>
  46. <script src="./libs/babylonjs.postProcess.min.js"></script>
  47. <script src="./libs/babylonjs.loaders.js"></script>
  48. <script src="./libs/babylonjs.serializers.min.js"></script>
  49. <script src="./libs/babylon.gui.min.js"></script>
  50. <script src="./libs/babylon.inspector.bundle.js"></script>
  51. <script src="./libs/babylonjs.expand.js"></script>
  52. <script src="./libs/socket.2.3.js"></script>
  53. <script src="./libs/events.js"></script>
  54. <script src="./libs/axios.min.js"></script>
  55. <script src="./libs/VisibilityChangeHandler.js"></script>
  56. <script src="./libs/md5.js"></script>
  57. <script src="./libs/crypto-js.js"></script>
  58. <script src="./libs/decoder.js"></script>
  59. <script src="./libs/nipplejs.min.js"></script>
  60. <script src="./libs/clipboard.min.js"></script>
  61. <script src="./libs/toastify-js.js"></script>
  62. <script src="./shader.js"></script>
  63. <!-- <script src="./webrtc//adapter-7.4.0.min.js"></script>
  64. <script src="./webrtc/srs.sdk.js"></script> -->
  65. <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
  66. <link rel="stylesheet" href="./css/index.3c280baa.css" />
  67. <div id="root">
  68. <!-- <div class="loading" style="z-index: 9999"></div> -->
  69. <div class = "App">
  70. <canvas id = "canvas" class = "stream unselect">
  71. </canvas>
  72. </div>
  73. <!-- <div class="debug_control_btns">
  74. <button class="debugger1">Toggle Stats</button>
  75. <button class="debugger2">取消低模着色</button>
  76. <button class="debugger3">画质:高</button>
  77. <button class="font-size-small debugger4" onclick="room.debug.toggleNearbyBreathPoint">Toggle周边呼吸点</button>
  78. <button class="font-size-small debugger5" onclick="room.debug.toggleTapBreathPoint">Toggle点击呼吸点</button>
  79. <button class="font-size-small debugger7" >开始录制</button>
  80. <button class="font-size-small debugger8" style="display: none; background-color: brown;" >结束录制</button>
  81. </div> -->
  82. </div>
  83. <script>
  84. var vConsole = new window.VConsole();
  85. function _mergeNamespaces(d, o) {
  86. return o.forEach(function(s) {
  87. s && typeof s != "string" && !Array.isArray(s) && Object.keys(s).forEach(function(c) {
  88. if (c !== "default" && !(c in d)) {
  89. var _ = Object.getOwnPropertyDescriptor(s, c);
  90. Object.defineProperty(d, c, _.get ? _ : {
  91. enumerable: !0,
  92. get: function() {
  93. return s[c]
  94. }
  95. })
  96. }
  97. })
  98. }),
  99. Object.freeze(Object.defineProperty(d, Symbol.toStringTag, {
  100. value: "Module"
  101. }))
  102. }
  103. const VERSION = "1.1.47";
  104. const checkOS = ()=>{
  105. const d = navigator.userAgent
  106. , o = /(?:Windows Phone)/.test(d)
  107. , s = /(?:SymbianOS)/.test(d) || o
  108. , c = /(?:Android)/.test(d)
  109. , _ = /(?:Firefox)/.test(d);
  110. /(?:Chrome|CriOS)/.test(d);
  111. const b = /(?:iPad|PlayBook)/.test(d) || c && !/(?:Mobile)/.test(d) || _ && /(?:Tablet)/.test(d)
  112. , k = /(?:iPhone|ipad|ipod)/.test(d) && !b
  113. , j = !k && !c && !s;
  114. return {
  115. isTablet: b,
  116. isPhone: k,
  117. isIOS: /iPhone|iPod|iPad/.test(navigator.userAgent),
  118. isAndroid: c,
  119. isPc: j
  120. }
  121. }
  122. , get2DPointFromWorldPoint = d=>{
  123. if (d == null)
  124. return null;
  125. const o = ue4Position2Xverse(d)
  126. , s = BABYLON.EngineStore.LastCreatedScene;
  127. return o == null || s == null ? null : BABYLON.Vector3.Project(o, BABYLON.Matrix.Identity(), s.getTransformMatrix(), s.activeCamera.viewport.toGlobal(s.getEngine().getRenderWidth() * s.getEngine().getHardwareScalingLevel(), s.getEngine().getRenderHeight() * s.getEngine().getHardwareScalingLevel()))
  128. }
  129. , ue4Rotation2Xverse = d=>isRotationCorrect() ? (d.pitch >= 89.5 ? d.pitch = 89.5 : d.pitch <= -89.5 && (d.pitch = -89.5),
  130. new BABYLON.Vector3(-1 * Math.PI * d.pitch / 180,Math.PI * d.yaw / 180 - Math.PI * 27 / 18,Math.abs(Math.PI * d.roll) / 180 < .001 ? 0 : -1 * Math.PI * d.roll / 180)) : null
  131. , ue4Rotation2Xverse_mesh = d=>isRotationCorrect() ? new BABYLON.Vector3(Math.PI * d.pitch / 180,Math.PI * d.yaw / 180,Math.abs(Math.PI * d.roll) / 180 < .001 ? 0 : -1 * (Math.PI * d.roll) / 180) : null
  132. , scaleFromUE4toXverse = 100
  133. , ue4Scaling2Xverse = d=>isScalingCorrect() ? new BABYLON.Vector3(d.x,d.z,-1 * d.y) : null
  134. , ue4Position2Xverse = d=>isPositionCorrect() ? new BABYLON.Vector3(d.x * .01,d.z * .01,-1 * d.y * .01) : null
  135. , xversePosition2Ue4 = d=>isPositionCorrect() ? {
  136. x: d.x * 100,
  137. y: -1 * d.z * 100,
  138. z: d.y * 100
  139. } : null
  140. , xverseRotation2Ue4 = d=>{
  141. if (isPositionCorrect()) {
  142. let o = 0;
  143. return d.z == 0 ? o = 0 : o = -180 * d.z / Math.PI,
  144. {
  145. pitch: 180 * d.x * -1 / Math.PI,
  146. yaw: (d.y + Math.PI * 27 / 18) * 180 / Math.PI,
  147. roll: o
  148. }
  149. } else
  150. return null
  151. }
  152. , xverseRotation2Ue4_mesh = d=>{
  153. if (isPositionCorrect()) {
  154. let o = 0;
  155. return d.z == 0 ? o = 0 : o = -1 * (180 * d.z) / Math.PI,
  156. {
  157. pitch: 180 * d.x / Math.PI,
  158. yaw: d.y * 180 / Math.PI,
  159. roll: o
  160. }
  161. } else
  162. return null
  163. }
  164. , calcDistance3D = (d,o)=>Math.sqrt((d.x - o.x) * (d.x - o.x) + (d.y - o.y) * (d.y - o.y) + (d.z - o.z) * (d.z - o.z))
  165. , calcDistance3DVector = (d,o)=>Math.sqrt((d.x - o.x) * (d.x - o.x) + (d.y - o.y) * (d.y - o.y) + (d.z - o.z) * (d.z - o.z))
  166. , isPositionCorrect = d=>!0
  167. , isScalingCorrect = d=>!0
  168. , calcDistance3DAngle = (d,o)=>Math.sqrt((d.roll - o.roll) * (d.roll - o.roll) + (d.pitch - o.pitch) * (d.pitch - o.pitch) + (d.yaw - o.yaw) * (d.yaw - o.yaw))
  169. , isRotationCorrect = d=>!0
  170. , getStringBoundaries = (d,o,s=new Map)=>{
  171. let c = 0
  172. , _ = ""
  173. , b = -1
  174. , k = 0;
  175. const j = [0];
  176. for (let$ = 0; $ < d.length; $++) {
  177. const _e = d.codePointAt($);
  178. let et = s.get(_e);
  179. if (et)
  180. c += et,
  181. _ += d[$],
  182. _e > 64 && _e < 91 || _e > 96 && _e < 123 ? (b == -1 && (b = $),
  183. k += et) : (b = -1,
  184. k = 0);
  185. else if (_e < 975 || _e > 1024 && _e < 1920)
  186. et = 1,
  187. c++,
  188. _ += d[$],
  189. _e > 64 && _e < 91 || _e > 96 && _e < 123 ? (b == -1 && (b = $),
  190. k += et) : (b = -1,
  191. k = 0);
  192. else if (_e > 4499 && _e < 4600 || _e > 8207 && _e < 8232 || _e > 8238 && _e < 8287 || _e > 8238 && _e < 8287 || _e > 8304 && _e < 8384 || _e > 8447 && _e < 9211 || _e > 11263 && _e < 11624 || _e > 11646 && _e < 11671 || _e > 11679 && _e < 11845 || _e > 11903 && _e < 12020 || _e > 12031 && _e < 12246 || _e > 12287 && _e < 12544 || _e > 12548 && _e < 12728 || _e > 12735 && _e < 12772 || _e > 12783 && _e < 19894 || _e > 19967 && _e < 40918 || _e > 42191 && _e < 42240 || _e > 44031 && _e < 55204 || _e > 59276 && _e < 59287 || _e > 59412 && _e < 59493 || _e > 63743 && _e < 64207 || _e > 65039 && _e < 65050 || _e > 65071 && _e < 65510)
  193. et = 2,
  194. c += 2,
  195. b = -1,
  196. k = 0,
  197. _ += d[$];
  198. else if (_e > 9311 && _e < 11158) {
  199. et = 2,
  200. c += 2,
  201. b = -1,
  202. k = 0,
  203. _ += d[$];
  204. const tt = d.codePointAt($ + 1);
  205. tt > 65023 && tt < 65040 && (_ += d[$ + 1],
  206. $++)
  207. } else
  208. _e > 126979 && _e < 129783 && (et = 2,
  209. c += 2,
  210. b = -1,
  211. k = 0,
  212. $++,
  213. _ += String.fromCodePoint(_e));
  214. if ($ == j[j.length - 1] + 1 && b > 0 ? (j[j.length - 1] = b,
  215. c = 0 + k) : c > o && (j.push($),
  216. k >= c && (k = 0 + et,
  217. b = 0),
  218. c = 0 + et),
  219. $ >= d.length - 1)
  220. break
  221. }
  222. return j[j.length - 1] != d.length && j.push(d.length),
  223. [_, j]
  224. }
  225. , getAlphaWidthMap = (d,o)=>{
  226. const s = new BABYLON.DynamicTexture("test",3,o)
  227. , c = new Map;
  228. for (let _ = 32; _ < 127; _++) {
  229. const b = String.fromCodePoint(_)
  230. , k = 2 + "px " + d;
  231. s.drawText(b, null, null, k, "#000000", "#ffffff", !0);
  232. const j = s.getContext();
  233. j.font = k;
  234. const $ = j.measureText(b).width;
  235. c.set(_, $)
  236. }
  237. return s.dispose(),
  238. c
  239. }
  240. , _RegisteredClass = {};
  241. function RegisterXObjectClass(d, o) {
  242. _RegisteredClass[d] = o
  243. }
  244. function GetXObjectClass(d) {
  245. return _RegisteredClass[d]
  246. }
  247. const DEFAULT_LOGGER = {
  248. debug: console.log,
  249. info: console.log,
  250. warn: console.warn,
  251. error: console.error
  252. }
  253. const __decoratorInitialStore = {}
  254. , __mergedStore = {}
  255. , deepCopy = function(d, o, s) {
  256. let c;
  257. if (o || (o = ""),
  258. s || (s = !1),
  259. d == null || typeof d != "object")
  260. return d;
  261. if (d instanceof Date)
  262. return c = new Date,
  263. c.setTime(d.getTime()),
  264. c;
  265. if (d instanceof Array) {
  266. c = [];
  267. for (let _ = 0, b = d.length; _ < b; _++)
  268. c[_] = deepCopy(d[_], o, s);
  269. return c
  270. }
  271. if (d instanceof Object) {
  272. if (d instanceof XObject)
  273. return c = _copySource(d, o, s),
  274. c;
  275. if (d instanceof AssetContainer)
  276. return s ? c = d.clone(o, !1, {
  277. doNotInstantiate: !0
  278. }, !1) : c = d.clone(o),
  279. c;
  280. for (const _ in d)
  281. Object.prototype.hasOwnProperty.call(d, _) && (c[_] = deepCopy(d[_]));
  282. return c
  283. }
  284. throw new Error("Unable to copy obj! Its type isn't supported.")
  285. }
  286. , _copySource = function(d, o, s) {
  287. const c = GetXObjectClass(d.getClassName())
  288. , _ = new c
  289. , b = getPropertiesMarkAsSerializable(_);
  290. o || (o = ""),
  291. s || (s = !1);
  292. for (const k in b) {
  293. const j = d[k];
  294. if (j != null) {
  295. const $ = _;
  296. j instanceof XObject ? $[k] = _copySource(j, o, s) : $[k] = deepCopy(j, o, s)
  297. }
  298. }
  299. return _.name = o,
  300. _
  301. };
  302. function getDirectStore(d) {
  303. const o = d.getClassName();
  304. return __decoratorInitialStore[o] || (__decoratorInitialStore[o] = {}),
  305. __decoratorInitialStore[o]
  306. }
  307. function generateSerializableMember(d, o) {
  308. return (s,c)=>{
  309. const _ = getDirectStore(s);
  310. _[c] || (_[c] = {
  311. type: d,
  312. sourceName: o
  313. })
  314. }
  315. }
  316. function xProperty(d) {
  317. return generateSerializableMember(0, d)
  318. }
  319. function getPropertiesMarkAsSerializable(d) {
  320. const o = d.getClassName();
  321. if (__mergedStore[o])
  322. return __mergedStore[o];
  323. __mergedStore[o] = {};
  324. const s = __mergedStore[o];
  325. let c = d
  326. , _ = o;
  327. for (; _; ) {
  328. const b = __decoratorInitialStore[_];
  329. for (const $ in b)
  330. s[$] = b[$];
  331. let k, j = !1;
  332. do {
  333. if (k = Object.getPrototypeOf(c),
  334. !k.getClassName) {
  335. j = !0;
  336. break
  337. }
  338. if (k.getClassName() !== _)
  339. break;
  340. c = k
  341. } while (k);
  342. if (j)
  343. break;
  344. _ = k.getClassName(),
  345. c = k
  346. }
  347. return s
  348. }
  349. var __defProp = Object.defineProperty
  350. , __getOwnPropDesc = Object.getOwnPropertyDescriptor
  351. , __decorateClass = (d,o,s,c)=>{
  352. for (var _ = c > 1 ? void 0 : c ? __getOwnPropDesc(o, s) : o, b = d.length - 1, k; b >= 0; b--)
  353. (k = d[b]) && (_ = (c ? k(o, s, _) : k(_)) || _);
  354. return c && _ && __defProp(o, s, _),
  355. _
  356. }
  357. ;
  358. var Codes = (d=>(d[d.Success = 0] = "Success",d[d.Timeout = 1003] = "Timeout",d))(Codes || {});
  359. const COMPONENT_LIST_PREFIX = "/component_list.json";
  360. const avatarSetting = {
  361. fileType: ".glb",
  362. lodType: "_lod",
  363. lod: [{
  364. level: "lod0",
  365. fileName: ".glb",
  366. quota: 5,
  367. dist: 1e3
  368. }, {
  369. level: "lod1",
  370. fileName: "_lod2.glb",
  371. quota: 5,
  372. dist: 2e3
  373. }, {
  374. level: "lod2",
  375. fileName: "_lod4.glb",
  376. quota: 0,
  377. dist: 7500
  378. }],
  379. isRayCastEnable: !0,
  380. maxAvatarNum: 40,
  381. maxBillBoardDist: 7500,
  382. body: "BODY",
  383. head: "HEAD",
  384. hair: "HAIR",
  385. suit: "SUIT",
  386. pants: "PANTS",
  387. shoes: "SHOES",
  388. clothes: "CLOTHES",
  389. pendant: "PENDANT",
  390. animations: "ANIMATION",
  391. skeleton: "SKELETON",
  392. defaultIdle: "Idle",
  393. cullingDistance: 200,
  394. defaultMove: "Walking"
  395. }
  396. , avatarResources = {
  397. ygb: {
  398. name: "ygb",
  399. mat: "NM_ygb",
  400. mesh: "ygb"
  401. }
  402. }
  403. , action = {
  404. GiftClap: {
  405. animName: "GiftClap",
  406. keyTime: 1760
  407. },
  408. Cheering: {
  409. animName: "Cheering",
  410. attachPair: [{
  411. bone: "mixamorig_MiddleFinger2_R",
  412. obj: "ygb",
  413. offset: {
  414. x: 0,
  415. y: 0,
  416. z: 0
  417. },
  418. rotate: {
  419. x: 0,
  420. y: 3.84,
  421. z: 0
  422. },
  423. scale: {
  424. x: 1,
  425. y: 1,
  426. z: 1
  427. }
  428. }, {
  429. bone: "mixamorig_MiddleFinger2_L",
  430. obj: "ygb",
  431. offset: {
  432. x: 0,
  433. y: 0,
  434. z: 0
  435. },
  436. rotate: {
  437. x: 0,
  438. y: 3.49,
  439. z: 0
  440. },
  441. scale: {
  442. x: 1,
  443. y: 1,
  444. z: 1
  445. }
  446. }]
  447. }
  448. };
  449. function LoadXObject(d, o, s) {
  450. return new Promise((c,_)=>{
  451. const b = JSON.parse(o);
  452. new XArchive().deserialize(b, d, s).then(j=>{
  453. c(j)
  454. }
  455. ).catch(j=>{
  456. _(j)
  457. }
  458. )
  459. }
  460. )
  461. }
  462. const generateOriginalName = d=>"Editable_" + d;
  463. BABYLON.ParticleSystemSet.prototype.systems = new Array;
  464. const DefaultUrlTransformer = async d=>d
  465. const DEFAULT_FRAME_RATE = 1
  466. , ENGINE_FRAME_RATE = 30
  467. , ROOT_MESH_ANIM_PROPERTY = ["scaling", "position", "rotation"]
  468. , MESH_TAG = "XSubSequence";
  469. function uuid$2() {
  470. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, d=>{
  471. const o = Math.random() * 16 | 0;
  472. return (d === "x" ? o : o & 3 | 8).toString(16)
  473. }
  474. )
  475. }
  476. function hashCode(d) {
  477. let o = 0, s, c;
  478. if (d == null || d.length === 0)
  479. return o;
  480. for (s = 0; s < d.length; s++)
  481. c = d.charCodeAt(s),
  482. o = (o << 5) - o + c,
  483. o |= 0;
  484. return o
  485. }
  486. function formatError(d) {
  487. return d instanceof Error ? Object.getOwnPropertyNames(d).reduce((s,c)=>(s[c] = d[c],
  488. s), {
  489. name: d.name,
  490. message: d.message
  491. }) : d
  492. }
  493. const texRootDir = "https://app-asset-1258211750.file.myqcloud.com/1/textures/"
  494. initSideEffects();
  495. const animationMap = new Map;
  496. animationMap.set("Falling", new BABYLON.AnimationRange("Falling1",0,15));
  497. animationMap.set("Click", new BABYLON.AnimationRange("Click",16,39));
  498. animationMap.set("Disappear", new BABYLON.AnimationRange("Disappear",40,47));
  499. const safeDecodeURIComponent = d=>{
  500. let o = "";
  501. try {
  502. o = decodeURIComponent(d)
  503. } catch {
  504. o = d
  505. }
  506. return o
  507. }
  508. , safelyJsonParse = d=>{
  509. let o = {};
  510. try {
  511. o = JSON.parse(d)
  512. } catch {}
  513. return o
  514. }
  515. , getRandomItem = d=>d.length === 0 ? null : d[Math.floor(Math.random() * d.length)]
  516. , ENV = "production";
  517. function getFormattedDate(d) {
  518. const o = d.getMonth() + 1
  519. , s = d.getDate()
  520. , c = d.getHours()
  521. , _ = d.getMinutes()
  522. , b = d.getSeconds()
  523. , k = d.getMilliseconds()
  524. , j = (o < 10 ? "0" : "") + o
  525. , $ = (s < 10 ? "0" : "") + s
  526. , _e = (c < 10 ? "0" : "") + c
  527. , et = (_ < 10 ? "0" : "") + _
  528. , tt = (b < 10 ? "0" : "") + b;
  529. return d.getFullYear() + "-" + j + "-" + $ + " " + _e + ":" + et + ":" + tt + "." + k
  530. }
  531. const SERVER_URLS = {
  532. DEV: "wss://sit-eks.xverse.cn/ws",
  533. PROD: "wss://eks.xverse.cn/ws"
  534. }
  535. , REPORT_URL = {
  536. DEV: "https://xa.xverse.cn:6680/collect",
  537. PROD: "https://xa.xverse.cn/collect"
  538. }
  539. , MAX_RECONNECT_COUNT = 3
  540. , DEFAULT_JOINROOM_TIMEOUT = 15e3
  541. , DEFAULT_AVATAR_SCALE = 1
  542. , REPORT_NUM_PER_REQUEST = 20
  543. , DEFAULT_OPEN_TIMEOUT_MS = 6e3
  544. , WS_CLOSE_NORMAL = 1e3
  545. , WS_CLOSE_RECONNECT = 3008
  546. , PING_INTERVAL_MS = 1e3
  547. , TEXTURE_URL = "https://static.xverse.cn/qqktv/texture.png"
  548. , REPORT_MODULE_TYPE = "xverse-js"
  549. , authenticationErrorCodes = [3001, 3002, 3003, 3005]
  550. , RTT_MAX_VALUE = 200
  551. , HB_MAX_VALUE = 500
  552. , DURATION = 5
  553. function getDistance(d, o) {
  554. const {x: s, y: c, z: _} = d
  555. , {x: b, y: k, z: j} = o;
  556. return Math.sqrt(Math.abs(s - b) ** 2 + Math.abs(c - k) ** 2 + Math.abs(_ - j) ** 2)
  557. }
  558. function uuid$1() {
  559. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, d=>{
  560. const o = Math.random() * 16 | 0;
  561. return (d === "x" ? o : o & 3 | 8).toString(16)
  562. }
  563. )
  564. }
  565. function getErrorByCode(d) {
  566. if (d === Codes.Success)
  567. return InternalError;
  568. const o = CodeErrorMap[d];
  569. return o || console.warn("unkown code", d),
  570. o || InternalError
  571. }
  572. function add(d, o) {
  573. return o == -1 && (o = 0),
  574. d + o
  575. }
  576. function count_valid(d, o) {
  577. let s = 0;
  578. return o != -1 && (s = 1),
  579. d + s
  580. }
  581. function count_less(d, o) {
  582. function s(c, _) {
  583. let b = 0;
  584. return _ != -1 && _ < o && (b = 1),
  585. c + b
  586. }
  587. return d.reduce(s, 0)
  588. }
  589. function count_sd(d, o) {
  590. function s(c, _) {
  591. let b = 0;
  592. return _ == -1 ? b = 0 : b = (_ - o) * (_ - o),
  593. c + b
  594. }
  595. return Math.sqrt(d.reduce(s, 0) / d.reduce(count_valid, 0)) || 0
  596. }
  597. function max(d, o) {
  598. return Math.max(d, o)
  599. }
  600. var axios$2 = {
  601. exports: {}
  602. }
  603. , bind$2 = function(o, s) {
  604. return function() {
  605. for (var _ = new Array(arguments.length), b = 0; b < _.length; b++)
  606. _[b] = arguments[b];
  607. return o.apply(s, _)
  608. }
  609. }
  610. , bind$1 = bind$2
  611. , toString = Object.prototype.toString;
  612. const ua = navigator.userAgent.toLowerCase();
  613. function isIos() {
  614. return !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/i)
  615. }
  616. function getIosVersion() {
  617. const d = ua.match(/cpu iphone os (.*?) like mac os/);
  618. return d ? d[1] : null
  619. }
  620. var workerSourceCode = `onmessage = function (event) {
  621. const data = event.data
  622. if (!data) return
  623. if (data.type === 'start') {
  624. const startTime = Date.now()
  625. const request = new XMLHttpRequest()
  626. request.open('GET', data.url)
  627. try {
  628. request.send()
  629. } catch (error) {
  630. console.error(error)
  631. }
  632. request.addEventListener('readystatechange', () => {
  633. if (request.readyState == 4) {
  634. if (request.status == 200) {
  635. postMessage(Date.now() - startTime)
  636. }
  637. }
  638. })
  639. }
  640. }
  641. `;
  642. function VisibilityChangeHandler() {
  643. this.subscribers = [],
  644. this.bindFunc = void 0,
  645. this.id = 1,
  646. this.addListener()
  647. }
  648. VisibilityChangeHandler.prototype = {
  649. subscribe(d) {
  650. if (!d)
  651. return;
  652. const o = ++this.id
  653. , s = {
  654. id: o,
  655. handler: d
  656. };
  657. return this.subscribers.push(s),
  658. ()=>{
  659. this.subscribers = this.subscribers.filter(_=>_.id == o)
  660. }
  661. },
  662. destroy() {
  663. !this.bindFunc || (document.hidden !== void 0 ? document.removeEventListener("visibilitychange", this.bindFunc, !1) : document.webkitHidden && document.removeEventListener("webkitvisibilitychange", this.bindFunc, !1))
  664. },
  665. broadcast(d) {
  666. this.subscribers.forEach(o=>o.handler(d))
  667. },
  668. addListener() {
  669. document.hidden !== void 0 ? (this.bindFunc = ()=>this.broadcast(document.hidden),
  670. document.addEventListener("visibilitychange", this.bindFunc, !1)) : document.webkitHidden && (this.bindFunc = ()=>this.broadcast(document.webkitHidden),
  671. document.addEventListener("webkitvisibilitychange", this.bindFunc, !1))
  672. }
  673. };
  674. const panorama_width = 4096
  675. , panorama_height = 2048
  676. , tile_width = 512
  677. , tile_height = 256;
  678. function ToRadius(d) {
  679. return d / 180 * Math.PI
  680. }
  681. function ToAngle(d) {
  682. return d / Math.PI * 180
  683. }
  684. function getAngleInView(d, o) {
  685. const s = {}
  686. , c = o.x - d.width * .5
  687. , _ = d.height * .5 - o.y
  688. , b = -1 * ToRadius(d.angle.pitch)
  689. , k = ToRadius(d.angle.yaw)
  690. , j = d.width / 2 / Math.tan(ToRadius(d.horz_fov / 2))
  691. , $ = Math.sin(b)
  692. , _e = Math.cos(b);
  693. for (s.yaw = Math.atan2(c, j * _e + _ * $),
  694. s.pitch = Math.atan2((_ - j * Math.tan(b)) * Math.cos(s.yaw), j + _ * Math.tan(b)),
  695. s.pitch = ToAngle(s.pitch),
  696. s.yaw = ToAngle(k + s.yaw); s.yaw > 359.9; )
  697. s.yaw -= 360;
  698. for (; s.yaw < 0; )
  699. s.yaw += 360;
  700. return s
  701. }
  702. function getRectangleInView(d) {
  703. const o = {}
  704. , s = Array(9)
  705. , c = d.height
  706. , _ = d.width;
  707. for (let k = 0, j = 0; j <= c; j += c / 2)
  708. for (let$ = 0; $ <= _; $ += _ / 2,
  709. k++) {
  710. const _e = {};
  711. _e.x = $,
  712. _e.y = j;
  713. let et = {};
  714. et = d,
  715. et.angle.pitch >= 90 && (et.angle.pitch = 89.999),
  716. et.angle.pitch <= -90 && (et.angle.pitch = -89.999),
  717. et.angle.yaw = 0,
  718. s[k] = getAngleInView(d, _e),
  719. s[k].pitch < -90 ? s[k].pitch = 90 : s[k].pitch > 90 && (s[k].pitch = -90)
  720. }
  721. let b = s[0].yaw > s[3].yaw ? 3 : 0;
  722. return s[b].yaw > s[6].yaw && (b = 6),
  723. s[b].yaw > s[b + 2].yaw && (s[b + 2].yaw += 360),
  724. s[b + 2].yaw > s[b].yaw + 180 ? (o.x = 0,
  725. o.width = panorama_width) : (o.x = (s[b].yaw / 360 - .5) * panorama_width,
  726. o.width = (s[b + 2].yaw / 360 - .5) * panorama_width - o.x),
  727. o.y = (.5 - s[s[0].pitch > s[1].pitch ? 0 : 1].pitch / 180) * panorama_height,
  728. o.height = (.5 - s[s[6].pitch > s[7].pitch ? 7 : 6].pitch / 180) * panorama_height - o.y,
  729. o
  730. }
  731. function MaskSetToOne(d, o) {
  732. const s = d / 8
  733. , c = d % 8;
  734. o.setUint8(s, o.getUint8(s) | 1 << 7 - c)
  735. }
  736. function IsAll0(d) {
  737. return d.getUint32(0) == 0 && d.getUint32(4) == 0
  738. }
  739. function getMaskFromTiles(d, o) {
  740. const s = new DataView(o);
  741. d.forEach(function(c, _) {
  742. MaskSetToOne(c, s)
  743. })
  744. }
  745. function operateForDataView(d, o, s, c) {
  746. s.setUint32(0, c(d.getUint32(0), o.getUint32(0))),
  747. s.setUint32(4, c(d.getUint32(4), o.getUint32(4)))
  748. }
  749. function getTilesInView(d, o) {
  750. const s = getRectangleInView(d)
  751. , c = Math.floor(s.x / tile_width)
  752. , _ = Math.floor((s.x + s.width - 1) / tile_width)
  753. , b = Math.floor(s.y / tile_height)
  754. , k = Math.floor((s.y + s.height - 1) / tile_height);
  755. console.log({
  756. left: c,
  757. right: _,
  758. top: b,
  759. bottom: k
  760. });
  761. const $ = []
  762. , _e = panorama_height / tile_height;
  763. for (let et = c; et <= _; et++)
  764. for (let tt = b; tt <= k; tt++)
  765. $.push(et * _e + tt);
  766. return console.log($),
  767. getMaskFromTiles($, o),
  768. $
  769. }
  770. const TRACKER_URL = {
  771. DEV: "https://xa.xverse.cn:6680/report",
  772. PROD: "https://xa.xverse.cn/report"
  773. };
  774. let DecodeFunctionTimeList = []
  775. , SDKFunctionTimeList = []
  776. , EngineFunctionTimeList = []
  777. , OtherFunctionTimeList = []
  778. , HeavyFunctionList = [];
  779. function getSum(d) {
  780. let o = 0;
  781. for (let s = 0; s < d.length; s++)
  782. o += d[s];
  783. return o || 0
  784. }
  785. function getMax(d) {
  786. let o = 0;
  787. for (let s = 0; s < d.length; s++)
  788. o < d[s] && (o = d[s]);
  789. return o
  790. }
  791. function getFuncStat() {
  792. const d = {
  793. sum: getSum(DecodeFunctionTimeList),
  794. max: getMax(DecodeFunctionTimeList)
  795. }
  796. , o = {
  797. sum: getSum(SDKFunctionTimeList),
  798. max: getMax(SDKFunctionTimeList)
  799. }
  800. , s = {
  801. sum: getSum(EngineFunctionTimeList),
  802. max: getMax(EngineFunctionTimeList)
  803. }
  804. , c = {
  805. sum: getSum(OtherFunctionTimeList),
  806. max: getMax(OtherFunctionTimeList)
  807. }
  808. , _ = HeavyFunctionList;
  809. {
  810. const b = new Date;
  811. b.getFullYear() + "" + (b.getMonth() + 1) + b.getDate(),
  812. b.getHours() + "" + b.getMinutes() + b.getSeconds()
  813. }
  814. return DecodeFunctionTimeList = [],
  815. SDKFunctionTimeList = [],
  816. EngineFunctionTimeList = [],
  817. OtherFunctionTimeList = [],
  818. HeavyFunctionList = [],
  819. {
  820. function: _,
  821. decode: d,
  822. sdk: o,
  823. engine: s,
  824. other: c
  825. }
  826. }
  827. BABYLON.Scene.DoubleClickDelay = 500;
  828. const zixunqiangImg = "./assets/zixunqiang.7c2c5bc8.png"
  829. , turingImg = "./assets/BreathPoint_turing.47d4d03d.png";
  830. const VITE_APPID = "10011"
  831. , VITE_SKINID = "10149"
  832. , VITE_VERSION = "00007"
  833. , VITE_TOKEN_URL = "https://service-0ldci7m6-1258211750.gz.apigw.tencentcs.com/token/fetch_token"
  834. , isAllSync = !0
  835. , rotationRenderType = 1
  836. , syncByEvent = !0
  837. , areaName = "thirdwalk"
  838. , pathName = "thirdwalk"
  839. , attitude = "walk"
  840. , randomBirthPoints = [{
  841. player: {
  842. position: {
  843. x: -4902,
  844. y: -35,
  845. z: 0
  846. },
  847. angle: {
  848. pitch: 0,
  849. yaw: -90,
  850. roll: 0
  851. }
  852. },
  853. camera: {
  854. position: {
  855. x: -5182,
  856. y: -35,
  857. z: 120
  858. },
  859. angle: {
  860. pitch: 0,
  861. yaw: -90,
  862. roll: 0
  863. }
  864. }
  865. }];
  866. var config = {
  867. VITE_APPID,
  868. VITE_SKINID,
  869. VITE_VERSION,
  870. VITE_TOKEN_URL,
  871. isAllSync,
  872. rotationRenderType,
  873. syncByEvent,
  874. areaName,
  875. pathName,
  876. attitude,
  877. randomBirthPoints
  878. }
  879. , defaultConfig = Object.freeze(Object.defineProperty({
  880. __proto__: null,
  881. VITE_APPID,
  882. VITE_SKINID,
  883. VITE_VERSION,
  884. VITE_TOKEN_URL,
  885. isAllSync,
  886. rotationRenderType,
  887. syncByEvent,
  888. areaName,
  889. pathName,
  890. attitude,
  891. randomBirthPoints,
  892. default: config
  893. }, Symbol.toStringTag, {
  894. value: "Module"
  895. }));
  896. Promise.prototype._timeout = function(d, o) {
  897. let s;
  898. return new Promise((c,_)=>(s = window.setTimeout(()=>{
  899. _(o)
  900. }
  901. , d),
  902. this.then(b=>{
  903. clearTimeout(s),
  904. c(b)
  905. }
  906. , b=>{
  907. clearTimeout(s),
  908. _(b)
  909. }
  910. )))
  911. }
  912. ;
  913. </script>
  914. <script src="js/index.js"></script>
  915. </body>
  916. </html>