index.html 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968
  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 MatrixMul(d, o) {
  468. const s = new XMatrix(new XPlane(0,0,0,0),new XPlane(0,0,0,0),new XPlane(0,0,0,0),new XPlane(0,0,0,0));
  469. for (let c = 0; c < 4; ++c)
  470. for (let _ = 0; _ < 4; ++_)
  471. for (let b = 0; b < 4; ++b)
  472. s.M[_][b] += d.M[_][c] * o.M[c][b];
  473. return s
  474. }
  475. function uuid$2() {
  476. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, d=>{
  477. const o = Math.random() * 16 | 0;
  478. return (d === "x" ? o : o & 3 | 8).toString(16)
  479. }
  480. )
  481. }
  482. function hashCode(d) {
  483. let o = 0, s, c;
  484. if (d == null || d.length === 0)
  485. return o;
  486. for (s = 0; s < d.length; s++)
  487. c = d.charCodeAt(s),
  488. o = (o << 5) - o + c,
  489. o |= 0;
  490. return o
  491. }
  492. function formatError(d) {
  493. return d instanceof Error ? Object.getOwnPropertyNames(d).reduce((s,c)=>(s[c] = d[c],
  494. s), {
  495. name: d.name,
  496. message: d.message
  497. }) : d
  498. }
  499. const texRootDir = "https://app-asset-1258211750.file.myqcloud.com/1/textures/"
  500. initSideEffects();
  501. const animationMap = new Map;
  502. animationMap.set("Falling", new BABYLON.AnimationRange("Falling1",0,15));
  503. animationMap.set("Click", new BABYLON.AnimationRange("Click",16,39));
  504. animationMap.set("Disappear", new BABYLON.AnimationRange("Disappear",40,47));
  505. const safeDecodeURIComponent = d=>{
  506. let o = "";
  507. try {
  508. o = decodeURIComponent(d)
  509. } catch {
  510. o = d
  511. }
  512. return o
  513. }
  514. , safelyJsonParse = d=>{
  515. let o = {};
  516. try {
  517. o = JSON.parse(d)
  518. } catch {}
  519. return o
  520. }
  521. , getRandomItem = d=>d.length === 0 ? null : d[Math.floor(Math.random() * d.length)]
  522. , ENV = "production";
  523. function getFormattedDate(d) {
  524. const o = d.getMonth() + 1
  525. , s = d.getDate()
  526. , c = d.getHours()
  527. , _ = d.getMinutes()
  528. , b = d.getSeconds()
  529. , k = d.getMilliseconds()
  530. , j = (o < 10 ? "0" : "") + o
  531. , $ = (s < 10 ? "0" : "") + s
  532. , _e = (c < 10 ? "0" : "") + c
  533. , et = (_ < 10 ? "0" : "") + _
  534. , tt = (b < 10 ? "0" : "") + b;
  535. return d.getFullYear() + "-" + j + "-" + $ + " " + _e + ":" + et + ":" + tt + "." + k
  536. }
  537. const SERVER_URLS = {
  538. DEV: "wss://sit-eks.xverse.cn/ws",
  539. PROD: "wss://eks.xverse.cn/ws"
  540. }
  541. , REPORT_URL = {
  542. DEV: "https://xa.xverse.cn:6680/collect",
  543. PROD: "https://xa.xverse.cn/collect"
  544. }
  545. , MAX_RECONNECT_COUNT = 3
  546. , DEFAULT_JOINROOM_TIMEOUT = 15e3
  547. , DEFAULT_AVATAR_SCALE = 1
  548. , REPORT_NUM_PER_REQUEST = 20
  549. , DEFAULT_OPEN_TIMEOUT_MS = 6e3
  550. , WS_CLOSE_NORMAL = 1e3
  551. , WS_CLOSE_RECONNECT = 3008
  552. , PING_INTERVAL_MS = 1e3
  553. , TEXTURE_URL = "https://static.xverse.cn/qqktv/texture.png"
  554. , REPORT_MODULE_TYPE = "xverse-js"
  555. , authenticationErrorCodes = [3001, 3002, 3003, 3005]
  556. , RTT_MAX_VALUE = 200
  557. , HB_MAX_VALUE = 500
  558. , DURATION = 5
  559. function getDistance(d, o) {
  560. const {x: s, y: c, z: _} = d
  561. , {x: b, y: k, z: j} = o;
  562. return Math.sqrt(Math.abs(s - b) ** 2 + Math.abs(c - k) ** 2 + Math.abs(_ - j) ** 2)
  563. }
  564. function uuid$1() {
  565. return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, d=>{
  566. const o = Math.random() * 16 | 0;
  567. return (d === "x" ? o : o & 3 | 8).toString(16)
  568. }
  569. )
  570. }
  571. function getErrorByCode(d) {
  572. if (d === Codes.Success)
  573. return InternalError;
  574. const o = CodeErrorMap[d];
  575. return o || console.warn("unkown code", d),
  576. o || InternalError
  577. }
  578. function add(d, o) {
  579. return o == -1 && (o = 0),
  580. d + o
  581. }
  582. function count_valid(d, o) {
  583. let s = 0;
  584. return o != -1 && (s = 1),
  585. d + s
  586. }
  587. function count_less(d, o) {
  588. function s(c, _) {
  589. let b = 0;
  590. return _ != -1 && _ < o && (b = 1),
  591. c + b
  592. }
  593. return d.reduce(s, 0)
  594. }
  595. function count_sd(d, o) {
  596. function s(c, _) {
  597. let b = 0;
  598. return _ == -1 ? b = 0 : b = (_ - o) * (_ - o),
  599. c + b
  600. }
  601. return Math.sqrt(d.reduce(s, 0) / d.reduce(count_valid, 0)) || 0
  602. }
  603. function max(d, o) {
  604. return Math.max(d, o)
  605. }
  606. var axios$2 = {
  607. exports: {}
  608. }
  609. , bind$2 = function(o, s) {
  610. return function() {
  611. for (var _ = new Array(arguments.length), b = 0; b < _.length; b++)
  612. _[b] = arguments[b];
  613. return o.apply(s, _)
  614. }
  615. }
  616. , bind$1 = bind$2
  617. , toString = Object.prototype.toString;
  618. const ua = navigator.userAgent.toLowerCase();
  619. function isIos() {
  620. return !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/i)
  621. }
  622. function getIosVersion() {
  623. const d = ua.match(/cpu iphone os (.*?) like mac os/);
  624. return d ? d[1] : null
  625. }
  626. var workerSourceCode = `onmessage = function (event) {
  627. const data = event.data
  628. if (!data) return
  629. if (data.type === 'start') {
  630. const startTime = Date.now()
  631. const request = new XMLHttpRequest()
  632. request.open('GET', data.url)
  633. try {
  634. request.send()
  635. } catch (error) {
  636. console.error(error)
  637. }
  638. request.addEventListener('readystatechange', () => {
  639. if (request.readyState == 4) {
  640. if (request.status == 200) {
  641. postMessage(Date.now() - startTime)
  642. }
  643. }
  644. })
  645. }
  646. }
  647. `;
  648. function VisibilityChangeHandler() {
  649. this.subscribers = [],
  650. this.bindFunc = void 0,
  651. this.id = 1,
  652. this.addListener()
  653. }
  654. VisibilityChangeHandler.prototype = {
  655. subscribe(d) {
  656. if (!d)
  657. return;
  658. const o = ++this.id
  659. , s = {
  660. id: o,
  661. handler: d
  662. };
  663. return this.subscribers.push(s),
  664. ()=>{
  665. this.subscribers = this.subscribers.filter(_=>_.id == o)
  666. }
  667. },
  668. destroy() {
  669. !this.bindFunc || (document.hidden !== void 0 ? document.removeEventListener("visibilitychange", this.bindFunc, !1) : document.webkitHidden && document.removeEventListener("webkitvisibilitychange", this.bindFunc, !1))
  670. },
  671. broadcast(d) {
  672. this.subscribers.forEach(o=>o.handler(d))
  673. },
  674. addListener() {
  675. document.hidden !== void 0 ? (this.bindFunc = ()=>this.broadcast(document.hidden),
  676. document.addEventListener("visibilitychange", this.bindFunc, !1)) : document.webkitHidden && (this.bindFunc = ()=>this.broadcast(document.webkitHidden),
  677. document.addEventListener("webkitvisibilitychange", this.bindFunc, !1))
  678. }
  679. };
  680. const panorama_width = 4096
  681. , panorama_height = 2048
  682. , tile_width = 512
  683. , tile_height = 256;
  684. function ToRadius(d) {
  685. return d / 180 * Math.PI
  686. }
  687. function ToAngle(d) {
  688. return d / Math.PI * 180
  689. }
  690. function getAngleInView(d, o) {
  691. const s = {}
  692. , c = o.x - d.width * .5
  693. , _ = d.height * .5 - o.y
  694. , b = -1 * ToRadius(d.angle.pitch)
  695. , k = ToRadius(d.angle.yaw)
  696. , j = d.width / 2 / Math.tan(ToRadius(d.horz_fov / 2))
  697. , $ = Math.sin(b)
  698. , _e = Math.cos(b);
  699. for (s.yaw = Math.atan2(c, j * _e + _ * $),
  700. s.pitch = Math.atan2((_ - j * Math.tan(b)) * Math.cos(s.yaw), j + _ * Math.tan(b)),
  701. s.pitch = ToAngle(s.pitch),
  702. s.yaw = ToAngle(k + s.yaw); s.yaw > 359.9; )
  703. s.yaw -= 360;
  704. for (; s.yaw < 0; )
  705. s.yaw += 360;
  706. return s
  707. }
  708. function getRectangleInView(d) {
  709. const o = {}
  710. , s = Array(9)
  711. , c = d.height
  712. , _ = d.width;
  713. for (let k = 0, j = 0; j <= c; j += c / 2)
  714. for (let$ = 0; $ <= _; $ += _ / 2,
  715. k++) {
  716. const _e = {};
  717. _e.x = $,
  718. _e.y = j;
  719. let et = {};
  720. et = d,
  721. et.angle.pitch >= 90 && (et.angle.pitch = 89.999),
  722. et.angle.pitch <= -90 && (et.angle.pitch = -89.999),
  723. et.angle.yaw = 0,
  724. s[k] = getAngleInView(d, _e),
  725. s[k].pitch < -90 ? s[k].pitch = 90 : s[k].pitch > 90 && (s[k].pitch = -90)
  726. }
  727. let b = s[0].yaw > s[3].yaw ? 3 : 0;
  728. return s[b].yaw > s[6].yaw && (b = 6),
  729. s[b].yaw > s[b + 2].yaw && (s[b + 2].yaw += 360),
  730. s[b + 2].yaw > s[b].yaw + 180 ? (o.x = 0,
  731. o.width = panorama_width) : (o.x = (s[b].yaw / 360 - .5) * panorama_width,
  732. o.width = (s[b + 2].yaw / 360 - .5) * panorama_width - o.x),
  733. o.y = (.5 - s[s[0].pitch > s[1].pitch ? 0 : 1].pitch / 180) * panorama_height,
  734. o.height = (.5 - s[s[6].pitch > s[7].pitch ? 7 : 6].pitch / 180) * panorama_height - o.y,
  735. o
  736. }
  737. function MaskSetToOne(d, o) {
  738. const s = d / 8
  739. , c = d % 8;
  740. o.setUint8(s, o.getUint8(s) | 1 << 7 - c)
  741. }
  742. function IsAll0(d) {
  743. return d.getUint32(0) == 0 && d.getUint32(4) == 0
  744. }
  745. function getMaskFromTiles(d, o) {
  746. const s = new DataView(o);
  747. d.forEach(function(c, _) {
  748. MaskSetToOne(c, s)
  749. })
  750. }
  751. function operateForDataView(d, o, s, c) {
  752. s.setUint32(0, c(d.getUint32(0), o.getUint32(0))),
  753. s.setUint32(4, c(d.getUint32(4), o.getUint32(4)))
  754. }
  755. function getTilesInView(d, o) {
  756. const s = getRectangleInView(d)
  757. , c = Math.floor(s.x / tile_width)
  758. , _ = Math.floor((s.x + s.width - 1) / tile_width)
  759. , b = Math.floor(s.y / tile_height)
  760. , k = Math.floor((s.y + s.height - 1) / tile_height);
  761. console.log({
  762. left: c,
  763. right: _,
  764. top: b,
  765. bottom: k
  766. });
  767. const $ = []
  768. , _e = panorama_height / tile_height;
  769. for (let et = c; et <= _; et++)
  770. for (let tt = b; tt <= k; tt++)
  771. $.push(et * _e + tt);
  772. return console.log($),
  773. getMaskFromTiles($, o),
  774. $
  775. }
  776. const TRACKER_URL = {
  777. DEV: "https://xa.xverse.cn:6680/report",
  778. PROD: "https://xa.xverse.cn/report"
  779. };
  780. let DecodeFunctionTimeList = []
  781. , SDKFunctionTimeList = []
  782. , EngineFunctionTimeList = []
  783. , OtherFunctionTimeList = []
  784. , HeavyFunctionList = [];
  785. function getSum(d) {
  786. let o = 0;
  787. for (let s = 0; s < d.length; s++)
  788. o += d[s];
  789. return o || 0
  790. }
  791. function getMax(d) {
  792. let o = 0;
  793. for (let s = 0; s < d.length; s++)
  794. o < d[s] && (o = d[s]);
  795. return o
  796. }
  797. function getFuncStat() {
  798. const d = {
  799. sum: getSum(DecodeFunctionTimeList),
  800. max: getMax(DecodeFunctionTimeList)
  801. }
  802. , o = {
  803. sum: getSum(SDKFunctionTimeList),
  804. max: getMax(SDKFunctionTimeList)
  805. }
  806. , s = {
  807. sum: getSum(EngineFunctionTimeList),
  808. max: getMax(EngineFunctionTimeList)
  809. }
  810. , c = {
  811. sum: getSum(OtherFunctionTimeList),
  812. max: getMax(OtherFunctionTimeList)
  813. }
  814. , _ = HeavyFunctionList;
  815. {
  816. const b = new Date;
  817. b.getFullYear() + "" + (b.getMonth() + 1) + b.getDate(),
  818. b.getHours() + "" + b.getMinutes() + b.getSeconds()
  819. }
  820. return DecodeFunctionTimeList = [],
  821. SDKFunctionTimeList = [],
  822. EngineFunctionTimeList = [],
  823. OtherFunctionTimeList = [],
  824. HeavyFunctionList = [],
  825. {
  826. function: _,
  827. decode: d,
  828. sdk: o,
  829. engine: s,
  830. other: c
  831. }
  832. }
  833. BABYLON.Scene.DoubleClickDelay = 500;
  834. const zixunqiangImg = "./assets/zixunqiang.7c2c5bc8.png"
  835. , turingImg = "./assets/BreathPoint_turing.47d4d03d.png";
  836. const VITE_APPID = "10011"
  837. , VITE_SKINID = "10149"
  838. , VITE_VERSION = "00007"
  839. , VITE_TOKEN_URL = "https://service-0ldci7m6-1258211750.gz.apigw.tencentcs.com/token/fetch_token"
  840. , isAllSync = !0
  841. , rotationRenderType = 1
  842. , syncByEvent = !0
  843. , areaName = "thirdwalk"
  844. , pathName = "thirdwalk"
  845. , attitude = "walk"
  846. , randomBirthPoints = [{
  847. player: {
  848. position: {
  849. x: -4902,
  850. y: -35,
  851. z: 0
  852. },
  853. angle: {
  854. pitch: 0,
  855. yaw: -90,
  856. roll: 0
  857. }
  858. },
  859. camera: {
  860. position: {
  861. x: -5182,
  862. y: -35,
  863. z: 120
  864. },
  865. angle: {
  866. pitch: 0,
  867. yaw: -90,
  868. roll: 0
  869. }
  870. }
  871. }];
  872. var config = {
  873. VITE_APPID,
  874. VITE_SKINID,
  875. VITE_VERSION,
  876. VITE_TOKEN_URL,
  877. isAllSync,
  878. rotationRenderType,
  879. syncByEvent,
  880. areaName,
  881. pathName,
  882. attitude,
  883. randomBirthPoints
  884. }
  885. , defaultConfig = Object.freeze(Object.defineProperty({
  886. __proto__: null,
  887. VITE_APPID,
  888. VITE_SKINID,
  889. VITE_VERSION,
  890. VITE_TOKEN_URL,
  891. isAllSync,
  892. rotationRenderType,
  893. syncByEvent,
  894. areaName,
  895. pathName,
  896. attitude,
  897. randomBirthPoints,
  898. default: config
  899. }, Symbol.toStringTag, {
  900. value: "Module"
  901. }));
  902. Promise.prototype._timeout = function(d, o) {
  903. let s;
  904. return new Promise((c,_)=>(s = window.setTimeout(()=>{
  905. _(o)
  906. }
  907. , d),
  908. this.then(b=>{
  909. clearTimeout(s),
  910. c(b)
  911. }
  912. , b=>{
  913. clearTimeout(s),
  914. _(b)
  915. }
  916. )))
  917. }
  918. ;
  919. </script>
  920. <script src="js/index.js"></script>
  921. </body>
  922. </html>