index.html 31 KB

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