fmode-ng 0.0.113 → 0.0.114

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE.md +8 -0
  2. package/README.md +37 -37
  3. package/esm2022/fmode-ng.mjs +10 -5
  4. package/esm2022/lib/aigc/agent/fm-agent-task/fm-agent-task.component.mjs +8 -92
  5. package/esm2022/lib/aigc/agent/index.mjs +10 -3
  6. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  10. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -98
  12. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -107
  13. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -113
  14. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  15. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  16. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -164
  17. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -49
  18. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  19. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -155
  20. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  21. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  22. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  23. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -140
  24. package/esm2022/lib/aigc/chat/chat-message-card/duration-str.pipe.mjs +10 -29
  25. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -3
  26. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -3
  27. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -193
  28. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -331
  29. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +8 -249
  30. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -83
  31. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  32. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  33. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -367
  35. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  36. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  37. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -115
  38. package/esm2022/lib/aigc/index.mjs +10 -14
  39. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  40. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +10 -2
  41. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -174
  42. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  43. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  44. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  45. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  46. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  47. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-func.mjs +9 -162
  48. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine-work.mjs +10 -68
  49. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -313
  50. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -4
  51. package/esm2022/lib/aigc/story/fm-office-viewer/fm-office-viewer.component.mjs +10 -62
  52. package/esm2022/lib/aigc/story/fm-story-card/fm-story-card.component.mjs +10 -87
  53. package/esm2022/lib/aigc/story/fm-story-list/fm-story-list.component.mjs +10 -345
  54. package/esm2022/lib/aigc/story/fm-story-list/story-preview.mjs +10 -81
  55. package/esm2022/lib/aigc/story/fm-story-loader/fm-story-loader.component.mjs +10 -152
  56. package/esm2022/lib/aigc/story/fm-story-splitter/fm-story-splitter.component.mjs +10 -42
  57. package/esm2022/lib/aigc/story/index.mjs +10 -6
  58. package/esm2022/lib/aigc/story/modal-chat-story/comp-chat-story-json/comp-chat-story-json.component.mjs +10 -47
  59. package/esm2022/lib/aigc/story/modal-chat-story/comp-diary-story/comp-diary-story.component.mjs +10 -95
  60. package/esm2022/lib/aigc/story/modal-chat-story/modal-chat-story.component.mjs +10 -253
  61. package/esm2022/lib/aigc/story/story.service.mjs +10 -35
  62. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +10 -636
  63. package/esm2022/lib/aigc/voice/index.mjs +10 -7
  64. package/esm2022/lib/aigc/voice/lib/audio/audio.player.mjs +10 -55
  65. package/esm2022/lib/aigc/voice/lib/audio/audio.streamer.mjs +10 -2
  66. package/esm2022/lib/aigc/voice/lib/audio/streamer.microsoft.mjs +10 -96
  67. package/esm2022/lib/aigc/voice/lib/audio/streamer.pcm.mjs +8 -177
  68. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  69. package/esm2022/lib/aigc/voice/lib/recorder/extension-waveview.mjs +10 -215
  70. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  71. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +10 -189
  72. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -5
  73. package/esm2022/lib/aigc/voice/tts/int-tts-provider.mjs +10 -2
  74. package/esm2022/lib/aigc/voice/tts/provider-doubao.mjs +8 -346
  75. package/esm2022/lib/code/fm-codemirror/fm-codemirror.component.mjs +8 -342
  76. package/esm2022/lib/code/index.mjs +10 -2
  77. package/esm2022/lib/core/agent/chat/completion/fmode-completion.mjs +8 -430
  78. package/esm2022/lib/core/agent/chat/completion/index.mjs +10 -2
  79. package/esm2022/lib/core/agent/chat/completion/int-gpt-chat-options.mjs +10 -2
  80. package/esm2022/lib/core/agent/chat/fmode-chat.mjs +8 -617
  81. package/esm2022/lib/core/agent/chat/index.mjs +10 -4
  82. package/esm2022/lib/core/agent/chat/interface.mjs +10 -2
  83. package/esm2022/lib/core/agent/index.mjs +10 -6
  84. package/esm2022/lib/core/agent/prompt/agent.prompt.mjs +10 -133
  85. package/esm2022/lib/core/agent/prompt/index.mjs +10 -2
  86. package/esm2022/lib/core/agent/prompt/prompt-util.mjs +10 -16
  87. package/esm2022/lib/core/agent/story/agent.story.mjs +10 -64
  88. package/esm2022/lib/core/agent/story/index.mjs +10 -2
  89. package/esm2022/lib/core/agent/task/agent.task.mjs +10 -90
  90. package/esm2022/lib/core/agent/task/index.mjs +10 -2
  91. package/esm2022/lib/core/agent/waiting/index.mjs +10 -3
  92. package/esm2022/lib/core/agent/waiting/loading/loading.ctrl.mjs +10 -279
  93. package/esm2022/lib/core/agent/waiting/tips/tips.ctrl.mjs +8 -190
  94. package/esm2022/lib/core/index.mjs +10 -4
  95. package/esm2022/lib/core/parse/datatype/acl.mjs +10 -57
  96. package/esm2022/lib/core/parse/datatype/file.mjs +10 -69
  97. package/esm2022/lib/core/parse/datatype/geopoint.mjs +10 -57
  98. package/esm2022/lib/core/parse/datatype/relation.mjs +10 -56
  99. package/esm2022/lib/core/parse/fmode.object.mjs +10 -232
  100. package/esm2022/lib/core/parse/fmode.parse.mjs +10 -84
  101. package/esm2022/lib/core/parse/fmode.query.mjs +8 -500
  102. package/esm2022/lib/core/parse/fmode.user.mjs +10 -275
  103. package/esm2022/lib/core/parse/index.mjs +10 -5
  104. package/esm2022/lib/core/parse/types.mjs +10 -2
  105. package/esm2022/lib/core/voice/index.mjs +10 -3
  106. package/esm2022/lib/core/voice/tts/index.mjs +10 -2
  107. package/esm2022/lib/icon/filetype/audio.svg.mjs +10 -3
  108. package/esm2022/lib/icon/filetype/avatar.svg.mjs +10 -14
  109. package/esm2022/lib/icon/filetype/chat.svg.mjs +10 -3
  110. package/esm2022/lib/icon/filetype/docx.svg.mjs +10 -3
  111. package/esm2022/lib/icon/filetype/file.svg.mjs +10 -3
  112. package/esm2022/lib/icon/filetype/filetype.pipe.mjs +10 -57
  113. package/esm2022/lib/icon/filetype/index.mjs +10 -12
  114. package/esm2022/lib/icon/filetype/md.svg.mjs +10 -3
  115. package/esm2022/lib/icon/filetype/pdf.svg.mjs +10 -3
  116. package/esm2022/lib/icon/filetype/pptx.svg.mjs +10 -3
  117. package/esm2022/lib/icon/filetype/svgtoblob.mjs +10 -8
  118. package/esm2022/lib/icon/filetype/video.svg.mjs +10 -3
  119. package/esm2022/lib/icon/filetype/xlsx.svg.mjs +10 -3
  120. package/esm2022/lib/icon/index.mjs +10 -2
  121. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -209
  122. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  123. package/esm2022/lib/map/index.mjs +10 -4
  124. package/esm2022/lib/map/map.module.mjs +10 -61
  125. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -132
  126. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -115
  127. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -118
  128. package/esm2022/lib/nova-cloud/index.mjs +10 -3
  129. package/esm2022/lib/nova-cloud/ncloud-api-func.mjs +10 -91
  130. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -53
  131. package/esm2022/lib/payment/index.mjs +10 -2
  132. package/esm2022/lib/payment/payment/payment.component.mjs +10 -543
  133. package/esm2022/lib/payment/payment.service.mjs +10 -202
  134. package/esm2022/lib/person/comp-person-gender-icon/comp-person-gender-icon.component.mjs +10 -48
  135. package/esm2022/lib/person/comp-person-item/comp-person-item.component.mjs +10 -29
  136. package/esm2022/lib/person/comp-person-story/comp-person-story.component.mjs +10 -211
  137. package/esm2022/lib/person/edit-upload/edit-upload.component.mjs +8 -412
  138. package/esm2022/lib/person/edit-upload/edit-upload.module.mjs +10 -50
  139. package/esm2022/lib/person/index.mjs +10 -5
  140. package/esm2022/lib/person/modal-person-select/modal-person-select.component.mjs +10 -144
  141. package/esm2022/lib/person/modal-user-verify/secret-text.pipe.mjs +10 -41
  142. package/esm2022/lib/person/modal-user-verify/user-verify.component.mjs +10 -595
  143. package/esm2022/lib/person/person-detail/person-detail.component.mjs +10 -172
  144. package/esm2022/lib/person/person.service.mjs +8 -193
  145. package/esm2022/lib/platform/cross.service.mjs +10 -62
  146. package/esm2022/lib/platform/index.mjs +10 -2
  147. package/esm2022/lib/social/index.mjs +10 -2
  148. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -230
  149. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  150. package/esm2022/lib/storage/index.mjs +10 -5
  151. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -131
  152. package/esm2022/lib/storage/service-hwobs/index.mjs +10 -3
  153. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +1 -1
  154. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  155. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -513
  156. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  157. package/esm2022/lib/storage/service-upload/util-file-metadata.mjs +10 -93
  158. package/esm2022/lib/storage/storage.module.mjs +10 -42
  159. package/esm2022/lib/text/fm-article-editor/article-editor-topbar/article-editor-topbar.component.mjs +10 -72
  160. package/esm2022/lib/text/fm-article-editor/article.service.mjs +10 -237
  161. package/esm2022/lib/text/fm-article-editor/comp-upload-book-banners/comp-upload-book-banners.component.mjs +8 -72
  162. package/esm2022/lib/text/fm-article-editor/draft.service.mjs +10 -207
  163. package/esm2022/lib/text/fm-article-editor/fm-article-aitool/fm-article-aitool.component.mjs +8 -227
  164. package/esm2022/lib/text/fm-article-editor/fm-article-draft/fm-article-draft.component.mjs +10 -303
  165. package/esm2022/lib/text/fm-article-editor/fm-article-editor.component.mjs +8 -371
  166. package/esm2022/lib/text/fm-article-editor/fm-article-outline/fm-article-outline.component.mjs +10 -94
  167. package/esm2022/lib/text/fm-article-editor/fm-article-outline-leftitem/fm-article-outline-leftitem.component.mjs +10 -36
  168. package/esm2022/lib/text/fm-article-editor/fm-article-preview/fm-article-preview.component.mjs +10 -281
  169. package/esm2022/lib/text/fm-article-editor/fm-article-write-options/fm-article-write-options.component.mjs +10 -72
  170. package/esm2022/lib/text/fm-article-editor/outline-count.pipe.mjs +10 -22
  171. package/esm2022/lib/text/fm-article-editor/prompt/prompt-insertion-article.mjs +10 -169
  172. package/esm2022/lib/text/fm-article-editor/task-article-generation.mjs +10 -69
  173. package/esm2022/lib/text/fm-article-editor/tasks/task-article-draft-create.mjs +10 -65
  174. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline-edit.mjs +10 -55
  175. package/esm2022/lib/text/fm-article-editor/tasks/task-article-outline.mjs +10 -142
  176. package/esm2022/lib/text/fm-article-editor/tasks/task-article-preview.mjs +10 -35
  177. package/esm2022/lib/text/fm-article-editor/tasks/task-article-writing-options.mjs +10 -81
  178. package/esm2022/lib/text/fm-article-editor/tasks/task-document-select.mjs +10 -50
  179. package/esm2022/lib/text/fm-text-quill/fm-text-quill.component.mjs +10 -145
  180. package/esm2022/lib/text/index.mjs +10 -4
  181. package/esm2022/lib/user/account/account.service.mjs +10 -222
  182. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  183. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -66
  184. package/esm2022/lib/user/index.mjs +10 -17
  185. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  186. package/esm2022/lib/user/login/auth.service.mjs +8 -433
  187. package/esm2022/lib/user/login/login.component.mjs +10 -916
  188. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -311
  189. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  190. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  191. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -164
  192. package/esm2022/lib/user/profile/profile-bind/profile-confirm-modal.component.mjs +10 -79
  193. package/esm2022/lib/user/profile/profile.module.mjs +10 -54
  194. package/esm2022/lib/user/staff/index.mjs +10 -4
  195. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  196. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  197. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  198. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  199. package/esm2022/lib/user/user.module.mjs +10 -102
  200. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  201. package/esm2022/lib/video/index.mjs +10 -2
  202. package/esm2022/public-api.mjs +10 -21
  203. package/fesm2022/fmode-ng.mjs +7 -19788
  204. package/fesm2022/fmode-ng.mjs.map +1 -1
  205. package/lib/core/parse/fmode.parse.d.ts +10 -9
  206. package/lib/core/parse/fmode.query.d.ts +37 -2
  207. package/lib/person/edit-upload/edit-upload.component.d.ts +1 -1
  208. package/package.json +12 -16
@@ -1,315 +1,10 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, ElementRef } from '@angular/core';
3
- import { ViewChild } from '@angular/core';
4
- import { FormsModule } from '@angular/forms';
5
- /**
6
- * npm i -S @babylonjs/core
7
- * npm i -S @babylonjs/loaders
8
- */
9
- import * as BABYLON from '@babylonjs/core';
10
- // import { CloudPoint } from '@babylonjs/core';
11
- import '@babylonjs/loaders';
12
- import { RolePointsCloud } from './role-points.class';
13
- import * as i0 from "@angular/core";
14
- export class CompAvatarParticleComponent {
15
- constructor(elementRef) {
16
- this.elementRef = elementRef;
17
- this.isWebVR = false;
18
- this.animMap = {};
19
- }
20
- ngAfterViewInit() {
21
- this.canvas = this.renderCanvas.nativeElement;
22
- console.log(this.canvas);
23
- if (this.canvas) {
24
- let options = {};
25
- this.engine = new BABYLON.Engine(this.canvas, true, options);
26
- console.log(this.engine);
27
- // 创建场景
28
- this.createScene();
29
- this.engine.runRenderLoop(() => {
30
- this.scene?.render();
31
- this.engine?.resize();
32
- });
33
- window.addEventListener('resize', () => {
34
- this.engine?.resize();
35
- });
36
- }
37
- }
38
- async createScene() {
39
- // 创建场景
40
- this.scene = new BABYLON.Scene(this.engine);
41
- this.scene.clearColor = new BABYLON.Color4(0, 0, 0, 1);
42
- // 创建舞台中央旋转相机
43
- this.mainCamera = this.createCamera();
44
- console.log(this.mainCamera);
45
- // 加载预设的角色
46
- this.currentRole = new RolePointsCloud(this.scene, this.engine, this.mainCamera);
47
- await this.currentRole.init();
48
- this.currentRole.playAnim("idle"); // 默认播放闲置画面
49
- this.currentRole.Mesh.visibility = 0; // 开启点云,原Mesh设置隐藏
50
- // 创建需要展示的主要资源
51
- // let prefab = this.prefabList[0]
52
- // await this.createPrefab(prefab)
53
- // 创建粒子效果
54
- // await this.createParticle()
55
- // 创建点云粒子
56
- await this.createCloudPoints();
57
- let light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0, 1, 0), this.scene);
58
- // let ground = BABYLON.MeshBuilder.CreateGround('ground1', {height:10, width:10, subdivisions: 2}, this.scene);
59
- // let groudMaterial = new BABYLON.StandardMaterial("groudMaterial", this.scene);
60
- // groudMaterial.diffuseColor = new BABYLON.Color3(0.5, 0.5, 0.5); // 设置灰色
61
- // ground.material = groudMaterial;
62
- // 修正比例
63
- this.engine?.resize();
64
- }
65
- createCamera() {
66
- // Parameters: alpha, beta, radius, target position, scene
67
- let CameraType = this.isWebVR ? BABYLON.VRDeviceOrientationArcRotateCamera : BABYLON.ArcRotateCamera;
68
- let camera = new CameraType("Camera", 0, 0, 30, new BABYLON.Vector3(0, 0.5, 0), this.scene);
69
- // Positions the camera overwriting alpha, beta, radius
70
- camera.setPosition(new BABYLON.Vector3(0, 0, 5));
71
- // 设置相机的俯仰角度为45°
72
- camera.beta = Math.PI / 3;
73
- camera.alpha = Math.PI / 1.2;
74
- camera.radius = 15;
75
- // This attaches the camera to the canvas
76
- // camera.attachControl(this.canvas, true); // 关闭控制,由程序锁定镜头
77
- return camera;
78
- }
79
- async createCloudPoints() {
80
- this.pointsMesh = this.currentRole.Mesh;
81
- this.pointsCloud = new BABYLON.PointsCloudSystem("pcs", 1, this.scene);
82
- // pcs.addPoints(10000);
83
- let color1 = new BABYLON.Color3(0.7, 0.8, 1.0);
84
- let color4 = new BABYLON.Color4(0.7, 0.8, 1.0);
85
- let color2 = new BABYLON.Color4(0.2, 0.5, 1.0);
86
- let colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);
87
- let pTexture = new BABYLON.Texture("/assets/avatar/particle/textures/flare.png", this.scene);
88
- let pMaterial = new BABYLON.PBRMaterial("material", this.scene);
89
- pMaterial.emissiveTexture = pTexture;
90
- pMaterial.emissiveColor = color1;
91
- this.pointsCloud.addVolumePoints(this.currentRole.Mesh, 5000, BABYLON.PointColor.Color, color4);
92
- this.pointsCloud.buildMeshAsync().then(() => {
93
- // this.pointsCloud.mesh.material = pMaterial;
94
- this.playAnimation("waiting");
95
- });
96
- this.scene.registerAfterRender(() => {
97
- this.pointsCloud.setParticles();
98
- });
99
- this.engine.runRenderLoop(() => {
100
- this.scene.render();
101
- });
102
- }
103
- playAnimation(name) {
104
- // 材质颜色
105
- switch (name) {
106
- case "waiting":
107
- this.cloudAnim();
108
- break;
109
- case "listening":
110
- this.cloudAnim({
111
- rotateSpeed: 0.01,
112
- breathing: false,
113
- });
114
- break;
115
- case "thinking":
116
- this.cloudAnim({
117
- rotateSpeed: 0.2,
118
- breathing: false,
119
- });
120
- break;
121
- case "talking":
122
- // this.pointsCloud.particles
123
- this.animMap['idle'] && this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['talking']], 0, 20, true);
124
- default:
125
- break;
126
- }
127
- }
128
- cloudAnim(options = {
129
- breathing: true,
130
- rotateSpeed: 0.002
131
- }) {
132
- this.animMap['idle'] && this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['idle']], 0, 120, true);
133
- let colorWhite = new BABYLON.Color4(1.0, 1.0, 1.0, 1.0);
134
- let pTexture = new BABYLON.Texture("/assets/avatar/particle/textures/flare.png", this.scene);
135
- let islog = 0;
136
- this.pointsCloud.updateParticle = (particle) => {
137
- // 空间位置
138
- let sphereRadius = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.radiusWorld;
139
- let centerWorld = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.centerWorld;
140
- let index = particle.idx;
141
- particle.color = colorWhite;
142
- // 旋转
143
- particle.rotation.y += options.rotateSpeed;
144
- // 位置
145
- if (particle && islog < 3) {
146
- console.log(this.currentRole.Mesh.getBoundingInfo());
147
- console.log(particle);
148
- islog++;
149
- }
150
- if (!particle.initpos)
151
- particle.initpos = particle.position;
152
- if (options.breathing) {
153
- let initpos = particle.initpos;
154
- let relativeVector = initpos.subtract(centerWorld);
155
- particle.position = new BABYLON.Vector3(relativeVector.x * sphereRadius, relativeVector.y * sphereRadius, relativeVector.z * sphereRadius).add(this.currentRole.offsetPosition);
156
- }
157
- return particle;
158
- };
159
- }
160
- createSphere() {
161
- let sphere = BABYLON.MeshBuilder.CreateSphere("sphere", { diameter: 2 }, this.scene);
162
- sphere.visibility = 1; // 不可见,仅用于粒子覆盖占位
163
- // 材质
164
- sphere.material = new BABYLON.StandardMaterial("mat", this.scene);
165
- sphere.material.wireframe = true;
166
- // 设置初始缩放
167
- sphere.scaling = new BABYLON.Vector3(1, 1, 1);
168
- this.pointsMesh = sphere;
169
- /**
170
- * 呼吸动画
171
- */
172
- // 创建动画
173
- let animation = new BABYLON.Animation("breathingAnimation", "scaling", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
174
- // 定义动画关键帧
175
- let keys = [];
176
- keys.push({
177
- frame: 0,
178
- value: new BABYLON.Vector3(0.3, 0.3, 0.3) // 初始缩放
179
- });
180
- keys.push({
181
- frame: 60,
182
- value: new BABYLON.Vector3(0.5, 0.5, 0.5) // 最大缩放
183
- });
184
- keys.push({
185
- frame: 120,
186
- value: new BABYLON.Vector3(0.3, 0.3, 0.3) // 初始缩放
187
- });
188
- // 将关键帧添加到动画
189
- animation.setKeys(keys);
190
- this.animMap["idle"] = animation;
191
- /**
192
- * 讲话动画
193
- */
194
- // 定义动画帧
195
- let animationFramesTalk = [
196
- { frame: 0, value: BABYLON.Vector3.One() },
197
- { frame: 10, value: new BABYLON.Vector3(1.2, 0.8, 1.2) },
198
- { frame: 20, value: BABYLON.Vector3.One() },
199
- ];
200
- // 创建动画
201
- let animationTalk = new BABYLON.Animation("talkAnimation", "scaling", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
202
- // 设置动画帧
203
- animationTalk.setKeys(animationFramesTalk);
204
- this.animMap["talk"] = animationTalk;
205
- // 启动动画
206
- this.scene.beginDirectAnimation(sphere, [this.animMap['idle']], 0, 120, true);
207
- return sphere;
208
- }
209
- async createParticle() {
210
- // 创建球体
211
- let sphere = this.createSphere();
212
- // 创建粒子系统
213
- let particleSystem = new BABYLON.ParticleSystem("particles", 2000, this.scene);
214
- particleSystem.particleTexture = new BABYLON.Texture("/assets/avatar/particle/textures/flare.png", this.scene);
215
- particleSystem.emitter = sphere;
216
- particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0); // Starting all from
217
- particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0); // To...
218
- // Colors of all particles
219
- particleSystem.color1 = new BABYLON.Color4(0.7, 0.8, 1.0, 1.0);
220
- particleSystem.color2 = new BABYLON.Color4(0.2, 0.5, 1.0, 1.0);
221
- particleSystem.colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);
222
- // Size of each particle (random between...
223
- particleSystem.minSize = 0.5;
224
- particleSystem.maxSize = 0.5;
225
- // Life time of each particle (random between...
226
- particleSystem.minLifeTime = 0.1;
227
- particleSystem.maxLifeTime = 0.1;
228
- // 角度速度
229
- particleSystem.minAngularSpeed = 0;
230
- particleSystem.maxAngularSpeed = Math.PI;
231
- particleSystem.minInitialRotation = 0;
232
- particleSystem.maxInitialRotation = Math.PI;
233
- // Emission rate// 设置粒子的初始速度
234
- // 禁用速度属性
235
- // particleSystem.manualEmitCount = particleSystem.getCapacity(); // 禁用自动发射
236
- particleSystem.minEmitPower = 0; // 最小发射速度
237
- particleSystem.maxEmitPower = 0; // 最大发射速度
238
- particleSystem.emitRate = 1500;
239
- // Speed
240
- particleSystem.updateSpeed = 0.01;
241
- // Blend mode : BLENDMODE_ONEONE, or BLENDMODE_STANDARD
242
- particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;
243
- particleSystem.direction1 = new BABYLON.Vector3(0, 0, 0);
244
- particleSystem.direction2 = new BABYLON.Vector3(0, 0, 0);
245
- particleSystem.start();
246
- // 设置粒子发射器为球形发射器
247
- let sphereEmitter = particleSystem.createSphereEmitter();
248
- sphereEmitter.radius = 2; // 球体半径
249
- // sphereEmitter.startPositionFunction = (worldMatrix: BABYLON.Matrix, positionToUpdate: BABYLON.Vector3, particle: BABYLON.Particle, isLocal: boolean)=>{
250
- // let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld
251
- // particle.position = particle.position.normalize().scale(sphereRadius);
252
- // }
253
- sphereEmitter.radiusRange = 0; // 开始发射半径范围 0 只在表面
254
- sphereEmitter.directionRandomizer = 0; // 开始发射方向随机性
255
- // 设置粒子效果
256
- particleSystem.gravity = new BABYLON.Vector3(0, 0, 0); // 关闭重力
257
- // 设置粒子系统停止后立即销毁粒子
258
- particleSystem.disposeOnStop = true;
259
- // 修改粒子更新函数,将粒子限制在球体表面
260
- particleSystem.updateFunction = (particles) => {
261
- for (let index = 0; index < particles.length; index++) {
262
- let particle = particles[index];
263
- // // 将粒子位置限制在球体表面
264
- let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld;
265
- particle.position = particle.position.normalize().scale(sphereRadius);
266
- // particle.scale = new BABYLON.Vector2(0.2,0.2)
267
- particle.age += this.scene.getEngine().getDeltaTime() / 1000;
268
- // 检查粒子是否达到最大生命周期,如果是则使其消失
269
- if (particle.age >= particle.lifeTime) {
270
- particleSystem.recycleParticle(particle);
271
- index--; // 更新索引以避免跳过下一个粒子
272
- }
273
- // // 在一定时间后使粒子消失
274
- // if (particle.age > 0.19) {
275
- // particle.lifeTime = 0
276
- // }
277
- }
278
- };
279
- // 动画循环
280
- this.engine.runRenderLoop(() => {
281
- this.scene.render();
282
- // 更新粒子的位置和缩放
283
- particleSystem.worldOffset = sphere.position;
284
- // particle.position = particle.position.normalize().scale(sphereEmitter.radius);
285
- });
286
- }
287
- setCameraToMeshCenter(camera, mesh) {
288
- // 获取网格体的边界信息
289
- mesh.computeWorldMatrix(true);
290
- let boundingInfo = mesh.getBoundingInfo();
291
- // 获取边界框的最小点和最大点
292
- let minimum = boundingInfo.minimum;
293
- let maximum = boundingInfo.maximum;
294
- // 计算网格体的长宽高
295
- let width = maximum.x - minimum.x;
296
- let height = maximum.y - minimum.y;
297
- let depth = maximum.z - minimum.z;
298
- let center = boundingInfo.boundingBox.center;
299
- console.log("宽度:" + width);
300
- console.log("高度:" + height);
301
- console.log("深度:" + depth);
302
- console.log("中心点:" + center);
303
- // camera?.setPosition(center)
304
- }
305
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarParticleComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
306
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CompAvatarParticleComponent, isStandalone: true, selector: "fm-avatar-role-particle", viewQueries: [{ propertyName: "renderCanvas", first: true, predicate: ["renderCanvas"], descendants: true }], ngImport: i0, template: "<canvas #renderCanvas class=\"render-canvas\"></canvas>", styles: [".render-canvas{display:block;width:100%;height:100%;touch-action:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }] }); }
307
- }
308
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CompAvatarParticleComponent, decorators: [{
309
- type: Component,
310
- args: [{ selector: 'fm-avatar-role-particle', standalone: true, imports: [CommonModule, FormsModule], template: "<canvas #renderCanvas class=\"render-canvas\"></canvas>", styles: [".render-canvas{display:block;width:100%;height:100%;touch-action:none}\n"] }]
311
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { renderCanvas: [{
312
- type: ViewChild,
313
- args: ["renderCanvas"]
314
- }] } });
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1hdmF0YXItcGFydGljbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1wYXJ0aWNsZS9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXBhcnRpY2xlL2NvbXAtYXZhdGFyLXBhcnRpY2xlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFpQixVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0M7OztHQUdHO0FBQ0gsT0FBTyxLQUFLLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxnREFBZ0Q7QUFDaEQsT0FBTyxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBU3RELE1BQU0sT0FBTywyQkFBMkI7SUFRdEMsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQXVEMUMsWUFBTyxHQUFXLEtBQUssQ0FBQTtRQW1JdkIsWUFBTyxHQUVILEVBQUUsQ0FBQTtJQTNMTixDQUFDO0lBQ0YsZUFBZTtRQUNaLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFD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LENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUU3Qiw4QkFBOEI7SUFDaEMsQ0FBQzsrR0F2WFUsMkJBQTJCO21HQUEzQiwyQkFBMkIsaU1DckJ4Qyx5REFBcUQsaUlEaUIxQyxZQUFZLDhCQUFDLFdBQVc7OzRGQUl0QiwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBQyxXQUFXLENBQUM7K0VBS1IsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuLyoqXHJcbiAqIG5wbSBpIC1TIEBiYWJ5bG9uanMvY29yZVxyXG4gKiBucG0gaSAtUyBAYmFieWxvbmpzL2xvYWRlcnNcclxuICovXHJcbmltcG9ydCAqIGFzIEJBQllMT04gZnJvbSAnQGJhYnlsb25qcy9jb3JlJztcclxuLy8gaW1wb3J0IHsgQ2xvdWRQb2ludCB9IGZyb20gJ0BiYWJ5bG9uanMvY29yZSc7XHJcbmltcG9ydCAnQGJhYnlsb25qcy9sb2FkZXJzJztcclxuaW1wb3J0IHsgQXZhdGFyUm9sZSB9IGZyb20gJy4vYXZhdGFyLnJvbGUnO1xyXG5pbXBvcnQgeyBSb2xlUG9pbnRzQ2xvdWQgfSBmcm9tICcuL3JvbGUtcG9pbnRzLmNsYXNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZm0tYXZhdGFyLXJvbGUtcGFydGljbGUnLFxyXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICBpbXBvcnRzOltDb21tb25Nb2R1bGUsRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29tcC1hdmF0YXItcGFydGljbGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tcEF2YXRhclBhcnRpY2xlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiBAVmlld0NoaWxkKFwicmVuZGVyQ2FudmFzXCIpIHJlbmRlckNhbnZhczpFbGVtZW50UmVmXHJcbiAgXHJcbiAgLy8g55S75biDXHJcbiAgcHJpdmF0ZSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50fHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGVuZ2luZTogQkFCWUxPTi5FbmdpbmV8dW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgc2NlbmU6IEJBQllMT04uU2NlbmV8dW5kZWZpbmVkO1xyXG4gIG1haW5DYW1lcmE6QkFCWUxPTi5BcmNSb3RhdGVDYW1lcmF8QkFCWUxPTi5WUkRldmljZU9yaWVudGF0aW9uQXJjUm90YXRlQ2FtZXJhfHVuZGVmaW5lZDtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICB9XHJcbiBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IHRoaXMucmVuZGVyQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNhbnZhcylcclxuICAgIGlmKHRoaXMuY2FudmFzKXtcclxuICAgICAgICBsZXQgb3B0aW9uczpCQUJZTE9OLkVuZ2luZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5naW5lID0gbmV3IEJBQllMT04uRW5naW5lKCh0aGlzLmNhbnZhcyBhcyBhbnkpLCB0cnVlLG9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZW5naW5lKVxyXG4gICAgICAgIC8vIOWIm+W7uuWcuuaZr1xyXG4gICAgICAgIHRoaXMuY3JlYXRlU2NlbmUoKTtcclxuICAgICAgICB0aGlzLmVuZ2luZS5ydW5SZW5kZXJMb29wKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2NlbmU/LnJlbmRlcigpO1xyXG4gICAgICAgICAgdGhpcy5lbmdpbmU/LnJlc2l6ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVuZ2luZT8ucmVzaXplKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGN1cnJlbnRSb2xlOkF2YXRhclJvbGVcclxuICBhc3luYyBjcmVhdGVTY2VuZSgpIHtcclxuICAgIC8vIOWIm+W7uuWcuuaZr1xyXG4gICAgdGhpcy5zY2VuZSA9IG5ldyBCQUJZTE9OLlNjZW5lKCh0aGlzLmVuZ2luZSBhcyBhbnkpKTtcclxuICAgIHRoaXMuc2NlbmUuY2xlYXJDb2xvciA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLDAsMCwxKVxyXG4gICAgLy8g5Yib5bu66Iie5Y+w5Lit5aSu5peL6L2s55u45py6XHJcbiAgICB0aGlzLm1haW5DYW1lcmEgPSB0aGlzLmNyZWF0ZUNhbWVyYSgpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5tYWluQ2FtZXJhKVxyXG4gICAgLy8g5Yqg6L296aKE6K6+55qE6KeS6ImyXHJcbiAgICB0aGlzLmN1cnJlbnRSb2xlID0gbmV3IFJvbGVQb2ludHNDbG91ZCh0aGlzLnNjZW5lLHRoaXMuZW5naW5lLHRoaXMubWFpbkNhbWVyYSlcclxuICAgIGF3YWl0IHRoaXMuY3VycmVudFJvbGUuaW5pdCgpXHJcbiAgICB0aGlzLmN1cnJlbnRSb2xlLnBsYXlBbmltKFwiaWRsZVwiKSAvLyDpu5jorqTmkq3mlL7pl7Lnva7nlLvpnaJcclxuICAgIHRoaXMuY3VycmVudFJvbGUuTWVzaC52aXNpYmlsaXR5ID0gMDsgLy8g5byA5ZCv54K55LqR77yM5Y6fTWVzaOiuvue9rumakOiXj1xyXG5cclxuICAgIC8vIOWIm+W7uumcgOimgeWxleekuueahOS4u+imgei1hOa6kFxyXG4gICAgLy8gbGV0IHByZWZhYiA9IHRoaXMucHJlZmFiTGlzdFswXVxyXG4gICAgLy8gYXdhaXQgdGhpcy5jcmVhdGVQcmVmYWIocHJlZmFiKVxyXG5cclxuICAgIC8vIOWIm+W7uueykuWtkOaViOaenFxyXG4gICAgLy8gYXdhaXQgdGhpcy5jcmVhdGVQYXJ0aWNsZSgpXHJcblxyXG4gICAgLy8g5Yib5bu654K55LqR57KS5a2QXHJcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUNsb3VkUG9pbnRzKClcclxuXHJcbiAgICBsZXQgbGlnaHQgPSBuZXcgQkFCWUxPTi5IZW1pc3BoZXJpY0xpZ2h0KCdsaWdodDEnLCBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsMSwwKSwgdGhpcy5zY2VuZSk7XHJcblxyXG4gICAgLy8gbGV0IGdyb3VuZCA9IEJBQllMT04uTWVzaEJ1aWxkZXIuQ3JlYXRlR3JvdW5kKCdncm91bmQxJywge2hlaWdodDoxMCwgd2lkdGg6MTAsIHN1YmRpdmlzaW9uczogMn0sIHRoaXMuc2NlbmUpO1xyXG4gICAgLy8gbGV0IGdyb3VkTWF0ZXJpYWwgPSBuZXcgQkFCWUxPTi5TdGFuZGFyZE1hdGVyaWFsKFwiZ3JvdWRNYXRlcmlhbFwiLCB0aGlzLnNjZW5lKTtcclxuICAgIC8vIGdyb3VkTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gbmV3IEJBQllMT04uQ29sb3IzKDAuNSwgMC41LCAwLjUpOyAvLyDorr7nva7ngbDoibJcclxuICAgIC8vIGdyb3VuZC5tYXRlcmlhbCA9IGdyb3VkTWF0ZXJpYWw7XHJcbiAgICAvLyDkv67mraPmr5TkvotcclxuICAgIHRoaXMuZW5naW5lPy5yZXNpemUoKTtcclxuXHJcbiAgfVxyXG4gIGlzV2ViVlI6Ym9vbGVhbiA9IGZhbHNlXHJcbiAgY3JlYXRlQ2FtZXJhKCl7XHJcbiAgICAvLyBQYXJhbWV0ZXJzOiBhbHBoYSwgYmV0YSwgcmFkaXVzLCB0YXJnZXQgcG9zaXRpb24sIHNjZW5lXHJcbiAgICBsZXQgQ2FtZXJhVHlwZSA9IHRoaXMuaXNXZWJWUj9CQUJZTE9OLlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmE6QkFCWUxPTi5BcmNSb3RhdGVDYW1lcmFcclxuICAgIGxldCBjYW1lcmEgPSBuZXcgQ2FtZXJhVHlwZShcIkNhbWVyYVwiLCAwLCAwLCAzMCwgbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLjUsIDApLCB0aGlzLnNjZW5lKTtcclxuICAgIC8vIFBvc2l0aW9ucyB0aGUgY2FtZXJhIG92ZXJ3cml0aW5nIGFscGhhLCBiZXRhLCByYWRpdXNcclxuICAgIGNhbWVyYS5zZXRQb3NpdGlvbihuZXcgQkFCWUxPTi5WZWN0b3IzKDAsIDAsIDUpKTtcclxuICAgIC8vIOiuvue9ruebuOacuueahOS/r+S7sOinkuW6puS4ujQ1wrBcclxuICAgIGNhbWVyYS5iZXRhID0gTWF0aC5QSSAvIDM7XHJcbiAgICBjYW1lcmEuYWxwaGEgPSBNYXRoLlBJIC8gMS4yO1xyXG4gICAgY2FtZXJhLnJhZGl1cyA9IDE1O1xyXG4gICAgLy8gVGhpcyBhdHRhY2hlcyB0aGUgY2FtZXJhIHRvIHRoZSBjYW52YXNcclxuICAgIC8vIGNhbWVyYS5hdHRhY2hDb250cm9sKHRoaXMuY2FudmFzLCB0cnVlKTsgLy8g5YWz6Zet5o6n5Yi277yM55Sx56iL5bqP6ZSB5a6a6ZWc5aS0XHJcbiAgICByZXR1cm4gY2FtZXJhXHJcbiAgfVxyXG5cclxuICBtYWluTWVzaDpCQUJZTE9OLkFic3RyYWN0TWVzaHx1bmRlZmluZWRcclxuICAvLyBwcmVmYWJMaXN0ID0gW1xyXG4gIC8vICAge25hbWU6XCLok53oibLlj6/niLHlsI/mnLrlmajkurpcIixkaXI6Jy9hc3NldHMvYXZhdGFyL3ByZWZhYi9ibHVlcm9ib3QvJyxmaWxlOlwic2NlbmUuZ2x0ZlwiLGNhbWVyYVBvc2l0b246W01hdGguUEkgLyAxLjIsIE1hdGguUEkgLyAzLDVdfSxcclxuICAvLyAgIHtuYW1lOlwi57Sr6Imy5bCP57K+54G1XCIsZGlyOicvYXNzZXRzL2F2YXRhci9wcmVmYWIvZnVyYnlfcHVycGxlLycsZmlsZTpcInNjZW5lLmdsdGZcIixjYW1lcmFQb3NpdG9uOlswLCAwLDEwXX1cclxuICAvLyBdXHJcbiAgLy8gYXN5bmMgY3JlYXRlUHJlZmFiKHByZWZhYjphbnkpe1xyXG4gIC8vICAgICAvLyDliqDovb3mqKHlnotcclxuICAvLyAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCBCQUJZTE9OLlNjZW5lTG9hZGVyLkltcG9ydE1lc2hBc3luYyhudWxsLCBwcmVmYWIuZGlyLCBwcmVmYWIuZmlsZSwgdGhpcy5zY2VuZSk7XHJcblxyXG4gIC8vICAgICAvLyDorr7nva7mqKHlnovliJ3lp4vkvY3nva5cclxuICAvLyAgICAgdGhpcy5tYWluTWVzaCA9IG1vZGVsLm1lc2hlc1swXVxyXG4gIC8vICAgICB0aGlzLm1haW5NZXNoLnBvc2l0aW9uID0gbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLjEsIDApO1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyh0aGlzLm1haW5NZXNoKVxyXG5cclxuICAvLyAgICAgLy8g6YeN6K6+55u45py65L2N572uXHJcbiAgLy8gICAgIC8vIOaWueazleS4gO+8muWKoOi9veS6uuW3pemihOiuvumVnOWktOS9jee9rlxyXG4gIC8vICAgICB0aGlzLm1haW5DYW1lcmE/LnNldFBvc2l0aW9uKG5ldyBCQUJZTE9OLlZlY3RvcjMocHJlZmFiLmNhbWVyYVBvc2l0b25bMF0scHJlZmFiLmNhbWVyYVBvc2l0b25bMV0scHJlZmFiLmNhbWVyYVBvc2l0b25bMl0pKVxyXG4gIC8vICAgICAvLyDmlrnms5XkuozvvJrnlLHkuo5NZXNo5pys6Lqr55qE56m66Ze05L+h5oGv57y65aSx77yM5a+86Ie05peg5rOV5pm66IO96K+G5YirXHJcbiAgLy8gICAgIC8vIHRoaXMuc2V0Q2FtZXJhVG9NZXNoQ2VudGVyKHRoaXMubWFpbkNhbWVyYSx0aGlzLm1haW5NZXNoKVxyXG4gIC8vICAgICByZXR1cm5cclxuICAvLyB9XHJcblxyXG4gIHBvaW50c0Nsb3VkOkJBQllMT04uUG9pbnRzQ2xvdWRTeXN0ZW1cclxuICBwb2ludHNNZXNoOkJBQllMT04uTWVzaFxyXG4gIGFzeW5jIGNyZWF0ZUNsb3VkUG9pbnRzKCl7XHJcbiAgICB0aGlzLnBvaW50c01lc2ggPSB0aGlzLmN1cnJlbnRSb2xlLk1lc2hcclxuICAgIHRoaXMucG9pbnRzQ2xvdWQgPSBuZXcgQkFCWUxPTi5Qb2ludHNDbG91ZFN5c3RlbShcInBjc1wiLCAxLCB0aGlzLnNjZW5lKSBcclxuICAgIC8vIHBjcy5hZGRQb2ludHMoMTAwMDApO1xyXG4gICAgXHJcbiAgICBsZXQgY29sb3IxID0gbmV3IEJBQllMT04uQ29sb3IzKDAuNywgMC44LCAxLjApO1xyXG4gICAgbGV0IGNvbG9yNCA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLjcsIDAuOCwgMS4wKTtcclxuICAgIGxldCBjb2xvcjIgPSBuZXcgQkFCWUxPTi5Db2xvcjQoMC4yLCAwLjUsIDEuMCk7XHJcbiAgICBsZXQgY29sb3JEZWFkID0gbmV3IEJBQllMT04uQ29sb3I0KDAsIDAsIDAuMiwgMC4wKTtcclxuICAgIGxldCBwVGV4dHVyZSA9IG5ldyBCQUJZTE9OLlRleHR1cmUoXCIvYXNzZXRzL2F2YXRhci9wYXJ0aWNsZS90ZXh0dXJlcy9mbGFyZS5wbmdcIiwgdGhpcy5zY2VuZSk7XHJcbiAgICBsZXQgcE1hdGVyaWFsID0gbmV3IEJBQllMT04uUEJSTWF0ZXJpYWwoXCJtYXRlcmlhbFwiLCB0aGlzLnNjZW5lKTtcclxuICAgIHBNYXRlcmlhbC5lbWlzc2l2ZVRleHR1cmUgPSBwVGV4dHVyZVxyXG4gICAgcE1hdGVyaWFsLmVtaXNzaXZlQ29sb3IgPSBjb2xvcjFcclxuICAgIFxyXG4gICAgIHRoaXMucG9pbnRzQ2xvdWQuYWRkVm9sdW1lUG9pbnRzKHRoaXMuY3VycmVudFJvbGUuTWVzaCwgNTAwMCxCQUJZTE9OLlBvaW50Q29sb3IuQ29sb3IsY29sb3I0KTtcclxuXHJcbiAgICAgdGhpcy5wb2ludHNDbG91ZC5idWlsZE1lc2hBc3luYygpLnRoZW4oKCk9PntcclxuICAgICAgLy8gIHRoaXMucG9pbnRzQ2xvdWQubWVzaC5tYXRlcmlhbCA9IHBNYXRlcmlhbDtcclxuICAgICAgIHRoaXMucGxheUFuaW1hdGlvbihcIndhaXRpbmdcIik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2NlbmUucmVnaXN0ZXJBZnRlclJlbmRlcigoKSA9PiB7XHJcbiAgICAgICB0aGlzLnBvaW50c0Nsb3VkLnNldFBhcnRpY2xlcygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmVuZ2luZS5ydW5SZW5kZXJMb29wKCgpID0+IHtcclxuICAgICAgdGhpcy5zY2VuZS5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHBsYXlBbmltYXRpb24obmFtZSl7XHJcbiAgICBcclxuICAgIC8vIOadkOi0qOminOiJslxyXG5cclxuICAgIHN3aXRjaCAobmFtZSkge1xyXG4gICAgICBjYXNlIFwid2FpdGluZ1wiOlxyXG4gICAgICAgIHRoaXMuY2xvdWRBbmltKClcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImxpc3RlbmluZ1wiOlxyXG4gICAgICAgIHRoaXMuY2xvdWRBbmltKHtcclxuICAgICAgICAgIHJvdGF0ZVNwZWVkOjAuMDEsXHJcbiAgICAgICAgICBicmVhdGhpbmc6ZmFsc2UsXHJcbiAgICAgICAgfSlcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcInRoaW5raW5nXCI6XHJcbiAgICAgICAgdGhpcy5jbG91ZEFuaW0oe1xyXG4gICAgICAgICAgcm90YXRlU3BlZWQ6MC4yLFxyXG4gICAgICAgICAgYnJlYXRoaW5nOmZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJ0YWxraW5nXCI6XHJcbiAgICAgICAgLy8gdGhpcy5wb2ludHNDbG91ZC5wYXJ0aWNsZXNcclxuICAgICAgICB0aGlzLmFuaW1NYXBbJ2lkbGUnXSYmdGhpcy5zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbih0aGlzLnBvaW50c01lc2gsIFt0aGlzLmFuaW1NYXBbJ3RhbGtpbmcnXV0sIDAsIDIwLCB0cnVlKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgY2xvdWRBbmltKG9wdGlvbnM9e1xyXG4gICAgYnJlYXRoaW5nOnRydWUsXHJcbiAgICByb3RhdGVTcGVlZDowLjAwMlxyXG4gIH0pe1xyXG4gICAgdGhpcy5hbmltTWFwWydpZGxlJ10mJnRoaXMuc2NlbmUuYmVnaW5EaXJlY3RBbmltYXRpb24odGhpcy5wb2ludHNNZXNoLCBbdGhpcy5hbmltTWFwWydpZGxlJ11dLCAwLCAxMjAsIHRydWUpO1xyXG4gICAgbGV0IGNvbG9yV2hpdGUgPSBuZXcgQkFCWUxPTi5Db2xvcjQoMS4wLCAxLjAsIDEuMCwxLjApO1xyXG4gICAgbGV0IHBUZXh0dXJlID0gbmV3IEJBQllMT04uVGV4dHVyZShcIi9hc3NldHMvYXZhdGFyL3BhcnRpY2xlL3RleHR1cmVzL2ZsYXJlLnBuZ1wiLCB0aGlzLnNjZW5lKTtcclxuICAgIGxldCBpc2xvZyA9IDBcclxuXHJcbiAgICB0aGlzLnBvaW50c0Nsb3VkLnVwZGF0ZVBhcnRpY2xlID0gKHBhcnRpY2xlOkJBQllMT04uQ2xvdWRQb2ludCkgPT57XHJcbiAgICAgIC8vIOepuumXtOS9jee9rlxyXG4gICAgICBsZXQgc3BoZXJlUmFkaXVzID0gdGhpcy5jdXJyZW50Um9sZS5NZXNoLmdldEJvdW5kaW5nSW5mbygpPy5ib3VuZGluZ1NwaGVyZT8ucmFkaXVzV29ybGRcclxuICAgICAgbGV0IGNlbnRlcldvcmxkID0gdGhpcy5jdXJyZW50Um9sZS5NZXNoLmdldEJvdW5kaW5nSW5mbygpPy5ib3VuZGluZ1NwaGVyZT8uY2VudGVyV29ybGRcclxuXHJcbiAgICAgIGxldCBpbmRleCA9IHBhcnRpY2xlLmlkeDtcclxuICAgICAgcGFydGljbGUuY29sb3IgPSBjb2xvcldoaXRlO1xyXG4gICAgICAvLyDml4vovaxcclxuICAgICAgcGFydGljbGUucm90YXRpb24ueSArPSBvcHRpb25zLnJvdGF0ZVNwZWVkOyBcclxuICAgICAgLy8g5L2N572uXHJcbiAgICAgIGlmKHBhcnRpY2xlJiZpc2xvZzwzKXtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRSb2xlLk1lc2guZ2V0Qm91bmRpbmdJbmZvKCkpXHJcbiAgICAgICAgY29uc29sZS5sb2cocGFydGljbGUpXHJcbiAgICAgICAgaXNsb2cgKytcclxuICAgICAgfVxyXG4gICAgICBpZighKHBhcnRpY2xlIGFzIGFueSkuaW5pdHBvcykgKHBhcnRpY2xlIGFzIGFueSkuaW5pdHBvcyA9IHBhcnRpY2xlLnBvc2l0aW9uXHJcbiAgICAgIGlmKG9wdGlvbnMuYnJlYXRoaW5nKXtcclxuICAgICAgICBsZXQgaW5pdHBvcyA9IChwYXJ0aWNsZSBhcyBhbnkpLmluaXRwb3NcclxuICAgICAgICBsZXQgcmVsYXRpdmVWZWN0b3IgPSBpbml0cG9zLnN1YnRyYWN0KGNlbnRlcldvcmxkKTtcclxuICAgICAgICBwYXJ0aWNsZS5wb3NpdGlvbiA9IG5ldyBCQUJZTE9OLlZlY3RvcjMocmVsYXRpdmVWZWN0b3IueCpzcGhlcmVSYWRpdXMscmVsYXRpdmVWZWN0b3IueSpzcGhlcmVSYWRpdXMscmVsYXRpdmVWZWN0b3IueipzcGhlcmVSYWRpdXMpLmFkZCh0aGlzLmN1cnJlbnRSb2xlLm9mZnNldFBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcGFydGljbGVcclxuICB9O1xyXG4gIH1cclxuICBcclxuICBhbmltTWFwOntcclxuICAgIFtrZXk6c3RyaW5nXTpCQUJZTE9OLkFuaW1hdGlvblxyXG4gIH0gPSB7fVxyXG4gIGNyZWF0ZVNwaGVyZSgpe1xyXG4gICAgbGV0IHNwaGVyZSA9IEJBQllMT04uTWVzaEJ1aWxkZXIuQ3JlYXRlU3BoZXJlKFwic3BoZXJlXCIsIHsgZGlhbWV0ZXI6IDIgfSwgdGhpcy5zY2VuZSk7XHJcbiAgICBzcGhlcmUudmlzaWJpbGl0eSA9IDEgLy8g5LiN5Y+v6KeB77yM5LuF55So5LqO57KS5a2Q6KaG55uW5Y2g5L2NXHJcbiAgICAvLyDmnZDotKhcclxuICAgIHNwaGVyZS5tYXRlcmlhbCA9IG5ldyBCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwoXCJtYXRcIiwgdGhpcy5zY2VuZSk7XHJcbiAgICBzcGhlcmUubWF0ZXJpYWwud2lyZWZyYW1lID0gdHJ1ZTtcclxuICAgIC8vIOiuvue9ruWIneWni+e8qeaUvlxyXG4gICAgc3BoZXJlLnNjYWxpbmcgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgdGhpcy5wb2ludHNNZXNoID0gc3BoZXJlO1xyXG4gICAgLyoqXHJcbiAgICAgKiDlkbzlkLjliqjnlLtcclxuICAgICAqL1xyXG4gICAgLy8g5Yib5bu65Yqo55S7XHJcbiAgICBsZXQgYW5pbWF0aW9uID0gbmV3IEJBQllMT04uQW5pbWF0aW9uKFxyXG4gICAgICAgIFwiYnJlYXRoaW5nQW5pbWF0aW9uXCIsXHJcbiAgICAgICAgXCJzY2FsaW5nXCIsXHJcbiAgICAgICAgMzAsXHJcbiAgICAgICAgQkFCWUxPTi5BbmltYXRpb24uQU5JTUFUSU9OVFlQRV9WRUNUT1IzLFxyXG4gICAgICAgIEJBQllMT04uQW5pbWF0aW9uLkFOSU1BVElPTkxPT1BNT0RFX0NZQ0xFXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOWumuS5ieWKqOeUu+WFs+mUruW4p1xyXG4gICAgbGV0IGtleXMgPSBbXTtcclxuICAgIGtleXMucHVzaCh7XHJcbiAgICAgICAgZnJhbWU6IDAsXHJcbiAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMC4zLDAuMywwLjMpIC8vIOWIneWni+e8qeaUvlxyXG4gICAgfSk7XHJcbiAgICBrZXlzLnB1c2goe1xyXG4gICAgICAgIGZyYW1lOiA2MCxcclxuICAgICAgICB2YWx1ZTogbmV3IEJBQllMT04uVmVjdG9yMygwLjUsMC41LDAuNSkgLy8g5pyA5aSn57yp5pS+XHJcbiAgICB9KTtcclxuICAgIGtleXMucHVzaCh7XHJcbiAgICAgICAgZnJhbWU6IDEyMCxcclxuICAgICAgICB2YWx1ZTogbmV3IEJBQllMT04uVmVjdG9yMygwLjMsMC4zLDAuMykgLy8g5Yid5aeL57yp5pS+XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlsIblhbPplK7luKfmt7vliqDliLDliqjnlLtcclxuICAgIGFuaW1hdGlvbi5zZXRLZXlzKGtleXMpO1xyXG4gICAgdGhpcy5hbmltTWFwW1wiaWRsZVwiXT1hbmltYXRpb247XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6K6y6K+d5Yqo55S7XHJcbiAgICAgKi9cclxuXHJcbiAgLy8g5a6a5LmJ5Yqo55S75binXHJcbiAgbGV0IGFuaW1hdGlvbkZyYW1lc1RhbGsgPSBbXHJcbiAgICB7IGZyYW1lOiAwLCB2YWx1ZTogQkFCWUxPTi5WZWN0b3IzLk9uZSgpIH0sXHJcbiAgICB7IGZyYW1lOiAxMCwgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMS4yLCAwLjgsIDEuMikgfSxcclxuICAgIHsgZnJhbWU6IDIwLCB2YWx1ZTogQkFCWUxPTi5WZWN0b3IzLk9uZSgpIH0sXHJcbiAgXTtcclxuXHJcbiAgLy8g5Yib5bu65Yqo55S7XHJcbiAgbGV0IGFuaW1hdGlvblRhbGsgPSBuZXcgQkFCWUxPTi5BbmltYXRpb24oXHJcbiAgICBcInRhbGtBbmltYXRpb25cIixcclxuICAgIFwic2NhbGluZ1wiLFxyXG4gICAgMzAsXHJcbiAgICBCQUJZTE9OLkFuaW1hdGlvbi5BTklNQVRJT05UWVBFX1ZFQ1RPUjMsXHJcbiAgICBCQUJZTE9OLkFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9DWUNMRVxyXG4gICk7XHJcblxyXG4gIC8vIOiuvue9ruWKqOeUu+W4p1xyXG4gIGFuaW1hdGlvblRhbGsuc2V0S2V5cyhhbmltYXRpb25GcmFtZXNUYWxrKTtcclxuICB0aGlzLmFuaW1NYXBbXCJ0YWxrXCJdPWFuaW1hdGlvblRhbGs7XHJcblxyXG5cclxuICAgIC8vIOWQr+WKqOWKqOeUu1xyXG4gICAgdGhpcy5zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbihzcGhlcmUsIFt0aGlzLmFuaW1NYXBbJ2lkbGUnXV0sIDAsIDEyMCwgdHJ1ZSk7XHJcblxyXG4gICAgcmV0dXJuIHNwaGVyZVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBhc3luYyBjcmVhdGVQYXJ0aWNsZSgpe1xyXG4gICAgICAgIC8vIOWIm+W7uueQg+S9k1xyXG4gICAgICAgICAgbGV0IHNwaGVyZSA9IHRoaXMuY3JlYXRlU3BoZXJlKClcclxuXHJcbiAgICAgICAgICAvLyDliJvlu7rnspLlrZDns7vnu59cclxuICAgICAgICAgIGxldCBwYXJ0aWNsZVN5c3RlbSA9IG5ldyBCQUJZTE9OLlBhcnRpY2xlU3lzdGVtKFwicGFydGljbGVzXCIsIDIwMDAsIHRoaXMuc2NlbmUpO1xyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ucGFydGljbGVUZXh0dXJlID0gbmV3IEJBQllMT04uVGV4dHVyZShcIi9hc3NldHMvYXZhdGFyL3BhcnRpY2xlL3RleHR1cmVzL2ZsYXJlLnBuZ1wiLCB0aGlzLnNjZW5lKTtcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmVtaXR0ZXIgPSBzcGhlcmU7XHJcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0Qm94ID0gbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLCAwKTsgLy8gU3RhcnRpbmcgYWxsIGZyb21cclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEVtaXRCb3ggPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsIDAsIDApOyAvLyBUby4uLlxyXG4gICAgICAgICAgLy8gQ29sb3JzIG9mIGFsbCBwYXJ0aWNsZXNcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yMSA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLjcsIDAuOCwgMS4wLCAxLjApO1xyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uY29sb3IyID0gbmV3IEJBQllMT04uQ29sb3I0KDAuMiwgMC41LCAxLjAsIDEuMCk7XHJcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5jb2xvckRlYWQgPSBuZXcgQkFCWUxPTi5Db2xvcjQoMCwgMCwgMC4yLCAwLjApO1xyXG4gICAgICAgICAgLy8gU2l6ZSBvZiBlYWNoIHBhcnRpY2xlIChyYW5kb20gYmV0d2Vlbi4uLlxyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWluU2l6ZSA9IDAuNTtcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heFNpemUgPSAwLjU7XHJcbiAgICAgICAgICAvLyBMaWZlIHRpbWUgb2YgZWFjaCBwYXJ0aWNsZSAocmFuZG9tIGJldHdlZW4uLi5cclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pbkxpZmVUaW1lID0gMC4xO1xyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWF4TGlmZVRpbWUgPSAwLjE7XHJcbiAgICAgICAgICAvLyDop5LluqbpgJ/luqZcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pbkFuZ3VsYXJTcGVlZCA9IDA7XHJcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhBbmd1bGFyU3BlZWQgPSBNYXRoLlBJO1xyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWluSW5pdGlhbFJvdGF0aW9uID0gMDtcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEluaXRpYWxSb3RhdGlvbiA9IE1hdGguUEk7XHJcbiAgICAgICAgICAvLyBFbWlzc2lvbiByYXRlLy8g6K6+572u57KS5a2Q55qE5Yid5aeL6YCf5bqmXHJcbiAgICAgICAgIC8vIOemgeeUqOmAn+W6puWxnuaAp1xyXG4gICAgICAgICAgLy8gcGFydGljbGVTeXN0ZW0ubWFudWFsRW1pdENvdW50ID0gcGFydGljbGVTeXN0ZW0uZ2V0Q2FwYWNpdHkoKTsgLy8g56aB55So6Ieq5Yqo5Y+R5bCEXHJcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0UG93ZXIgPSAwOyAvLyDmnIDlsI/lj5HlsITpgJ/luqZcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEVtaXRQb3dlciA9IDA7IC8vIOacgOWkp+WPkeWwhOmAn+W6plxyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdFJhdGUgPSAxNTAwO1xyXG4gICAgICAgICAgLy8gU3BlZWRcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZVNwZWVkID0gMC4wMTtcclxuICAgICAgICAgIC8vIEJsZW5kIG1vZGUgOiBCTEVORE1PREVfT05FT05FLCBvciBCTEVORE1PREVfU1RBTkRBUkRcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmJsZW5kTW9kZSA9IEJBQllMT04uUGFydGljbGVTeXN0ZW0uQkxFTkRNT0RFX09ORU9ORTtcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmRpcmVjdGlvbjEgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsMCwwKVxyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uZGlyZWN0aW9uMiA9IG5ldyBCQUJZTE9OLlZlY3RvcjMoMCwwLDApXHJcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5zdGFydCgpO1xyXG4gICAgICAgICAgLy8g6K6+572u57KS5a2Q5Y+R5bCE5Zmo5Li655CD5b2i5Y+R5bCE5ZmoXHJcbiAgICAgICAgICBsZXQgc3BoZXJlRW1pdHRlciA9IHBhcnRpY2xlU3lzdGVtLmNyZWF0ZVNwaGVyZUVtaXR0ZXIoKTtcclxuICAgICAgICAgIHNwaGVyZUVtaXR0ZXIucmFkaXVzID0gMjsgLy8g55CD5L2T5Y2K5b6EXHJcbiAgICAgICAgICAvLyBzcGhlcmVFbWl0dGVyLnN0YXJ0UG9zaXRpb25GdW5jdGlvbiA9ICh3b3JsZE1hdHJpeDogQkFCWUxPTi5NYXRyaXgsIHBvc2l0aW9uVG9VcGRhdGU6IEJBQllMT04uVmVjdG9yMywgcGFydGljbGU6IEJBQllMT04uUGFydGljbGUsIGlzTG9jYWw6IGJvb2xlYW4pPT57XHJcbiAgICAgICAgICAvLyAgIGxldCBzcGhlcmVSYWRpdXMgPSBzcGhlcmUuZ2V0Qm91bmRpbmdJbmZvKCk/LmJvdW5kaW5nU3BoZXJlPy5yYWRpdXNXb3JsZFxyXG4gICAgICAgICAgLy8gICBwYXJ0aWNsZS5wb3NpdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLm5vcm1hbGl6ZSgpLnNjYWxlKHNwaGVyZVJhZGl1cyk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBzcGhlcmVFbWl0dGVyLnJhZGl1c1JhbmdlID0gMDsgLy8g5byA5aeL5Y+R5bCE5Y2K5b6E6IyD5Zu0IDAg5Y+q5Zyo6KGo6Z2iXHJcbiAgICAgICAgICBzcGhlcmVFbWl0dGVyLmRpcmVjdGlvblJhbmRvbWl6ZXIgPSAwOyAvLyDlvIDlp4vlj5HlsITmlrnlkJHpmo/mnLrmgKdcclxuXHJcbiAgICAgICAgICAvLyDorr7nva7nspLlrZDmlYjmnpxcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmdyYXZpdHkgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsIDAsIDApOyAvLyDlhbPpl63ph43liptcclxuICAgICAgICAgIC8vIOiuvue9rueykuWtkOezu+e7n+WBnOatouWQjueri+WNs+mUgOavgeeykuWtkFxyXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uZGlzcG9zZU9uU3RvcCA9IHRydWU7XHJcbiAgICAgICAgICAvLyDkv67mlLnnspLlrZDmm7TmlrDlh73mlbDvvIzlsIbnspLlrZDpmZDliLblnKjnkIPkvZPooajpnaJcclxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZUZ1bmN0aW9uID0gKHBhcnRpY2xlcykgPT57XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0aWNsZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFydGljbGUgPSBwYXJ0aWNsZXNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgIC8vICAgICAgIC8vIOWwhueykuWtkOS9jee9rumZkOWItuWcqOeQg+S9k+ihqOmdolxyXG4gICAgICAgICAgICAgICAgbGV0IHNwaGVyZVJhZGl1cyA9IHNwaGVyZS5nZXRCb3VuZGluZ0luZm8oKT8uYm91bmRpbmdTcGhlcmU/LnJhZGl1c1dvcmxkXHJcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5wb3NpdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLm5vcm1hbGl6ZSgpLnNjYWxlKHNwaGVyZVJhZGl1cyk7XHJcbiAgICAgICAgICAvLyAgICAgICBwYXJ0aWNsZS5zY2FsZSA9IG5ldyBCQUJZTE9OLlZlY3RvcjIoMC4yLDAuMilcclxuXHJcbiAgICAgICAgICAgICAgcGFydGljbGUuYWdlICs9IHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuZ2V0RGVsdGFUaW1lKCkvMTAwMDtcclxuICAgICAgICAgICAgLy8g5qOA5p+l57KS5a2Q5piv5ZCm6L6+5Yiw5pyA5aSn55Sf5ZG95ZGo5pyf77yM5aaC5p6c5piv5YiZ5L2/5YW25raI5aSxXHJcbiAgICAgICAgICAgIGlmIChwYXJ0aWNsZS5hZ2UgPj0gcGFydGljbGUubGlmZVRpbWUpIHtcclxuICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5yZWN5Y2xlUGFydGljbGUocGFydGljbGUpO1xyXG4gICAgICAgICAgICAgIGluZGV4LS07IC8vIOabtOaWsOe0ouW8leS7pemBv+WFjei3s+i/h+S4i+S4gOS4queykuWtkFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAvLyDlnKjkuIDlrprml7bpl7TlkI7kvb/nspLlrZDmtojlpLFcclxuICAgICAgICAgIC8vICAgICAgIGlmIChwYXJ0aWNsZS5hZ2UgPiAwLjE5KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIHBhcnRpY2xlLmxpZmVUaW1lID0gMFxyXG4gICAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyDliqjnlLvlvqrnjq9cclxuICAgICAgICB0aGlzLmVuZ2luZS5ydW5SZW5kZXJMb29wKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXIoKTtcclxuICAgICAgICAgICAgLy8g5pu05paw57KS5a2Q55qE5L2N572u5ZKM57yp5pS+XHJcbiAgICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLndvcmxkT2Zmc2V0ID0gc3BoZXJlLnBvc2l0aW9uO1xyXG4gICAgICAgICAgICAvLyBwYXJ0aWNsZS5wb3NpdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLm5vcm1hbGl6ZSgpLnNjYWxlKHNwaGVyZUVtaXR0ZXIucmFkaXVzKTtcclxuICAgICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2FtZXJhVG9NZXNoQ2VudGVyKGNhbWVyYTpCQUJZTE9OLkFyY1JvdGF0ZUNhbWVyYXx1bmRlZmluZWQsbWVzaDpCQUJZTE9OLkFic3RyYWN0TWVzaCl7XHJcbiAgICAvLyDojrflj5bnvZHmoLzkvZPnmoTovrnnlYzkv6Hmga9cclxuICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpO1xyXG4gICAgbGV0IGJvdW5kaW5nSW5mbyA9IG1lc2guZ2V0Qm91bmRpbmdJbmZvKCk7XHJcblxyXG4gICAgLy8g6I635Y+W6L6555WM5qGG55qE5pyA5bCP54K55ZKM5pyA5aSn54K5XHJcbiAgICBsZXQgbWluaW11bSA9IGJvdW5kaW5nSW5mby5taW5pbXVtO1xyXG4gICAgbGV0IG1heGltdW0gPSBib3VuZGluZ0luZm8ubWF4aW11bTtcclxuXHJcbiAgICAvLyDorqHnrpfnvZHmoLzkvZPnmoTplb/lrr3pq5hcclxuICAgIGxldCB3aWR0aCA9IG1heGltdW0ueCAtIG1pbmltdW0ueDtcclxuICAgIGxldCBoZWlnaHQgPSBtYXhpbXVtLnkgLSBtaW5pbXVtLnk7XHJcbiAgICBsZXQgZGVwdGggPSBtYXhpbXVtLnogLSBtaW5pbXVtLno7XHJcbiAgICBsZXQgY2VudGVyID0gYm91bmRpbmdJbmZvLmJvdW5kaW5nQm94LmNlbnRlcjtcclxuICAgIGNvbnNvbGUubG9nKFwi5a695bqm77yaXCIgKyB3aWR0aCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIumrmOW6pu+8mlwiICsgaGVpZ2h0KTtcclxuICAgIGNvbnNvbGUubG9nKFwi5rex5bqm77yaXCIgKyBkZXB0aCk7XHJcbiAgICBjb25zb2xlLmxvZyhcIuS4reW/g+eCue+8mlwiICsgY2VudGVyKTtcclxuXHJcbiAgICAvLyBjYW1lcmE/LnNldFBvc2l0aW9uKGNlbnRlcilcclxuICB9XHJcbn1cclxuIiwiPGNhbnZhcyAjcmVuZGVyQ2FudmFzIGNsYXNzPVwicmVuZGVyLWNhbnZhc1wiPjwvY2FudmFzPiJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs
7
+ */
8
+ import{CommonModule}from"@angular/common";import{Component,ElementRef}from"@angular/core";import{ViewChild}from"@angular/core";import{FormsModule}from"@angular/forms";import*as BABYLON from"@babylonjs/core";import"@babylonjs/loaders";import{RolePointsCloud}from"./role-points.class";import*as i0 from"@angular/core";export class CompAvatarParticleComponent{constructor(e){this.elementRef=e,this.isWebVR=!1,this.animMap={}}ngAfterViewInit(){if(this.canvas=this.renderCanvas.nativeElement,console.log(this.canvas),this.canvas){let e={};this.engine=new BABYLON.Engine(this.canvas,!0,e),console.log(this.engine),this.createScene(),this.engine.runRenderLoop((()=>{this.scene?.render(),this.engine?.resize()})),window.addEventListener("resize",(()=>{this.engine?.resize()}))}}async createScene(){this.scene=new BABYLON.Scene(this.engine),this.scene.clearColor=new BABYLON.Color4(0,0,0,1),this.mainCamera=this.createCamera(),console.log(this.mainCamera),this.currentRole=new RolePointsCloud(this.scene,this.engine,this.mainCamera),await this.currentRole.init(),this.currentRole.playAnim("idle"),this.currentRole.Mesh.visibility=0,await this.createCloudPoints();new BABYLON.HemisphericLight("light1",new BABYLON.Vector3(0,1,0),this.scene);this.engine?.resize()}createCamera(){let e=new(this.isWebVR?BABYLON.VRDeviceOrientationArcRotateCamera:BABYLON.ArcRotateCamera)("Camera",0,0,30,new BABYLON.Vector3(0,.5,0),this.scene);return e.setPosition(new BABYLON.Vector3(0,0,5)),e.beta=Math.PI/3,e.alpha=Math.PI/1.2,e.radius=15,e}async createCloudPoints(){this.pointsMesh=this.currentRole.Mesh,this.pointsCloud=new BABYLON.PointsCloudSystem("pcs",1,this.scene);let e=new BABYLON.Color3(.7,.8,1),t=new BABYLON.Color4(.7,.8,1),n=(new BABYLON.Color4(.2,.5,1),new BABYLON.Color4(0,0,.2,0),new BABYLON.Texture("/assets/avatar/particle/textures/flare.png",this.scene)),i=new BABYLON.PBRMaterial("material",this.scene);i.emissiveTexture=n,i.emissiveColor=e,this.pointsCloud.addVolumePoints(this.currentRole.Mesh,5e3,BABYLON.PointColor.Color,t),this.pointsCloud.buildMeshAsync().then((()=>{this.playAnimation("waiting")})),this.scene.registerAfterRender((()=>{this.pointsCloud.setParticles()})),this.engine.runRenderLoop((()=>{this.scene.render()}))}playAnimation(e){switch(e){case"waiting":this.cloudAnim();break;case"listening":this.cloudAnim({rotateSpeed:.01,breathing:!1});break;case"thinking":this.cloudAnim({rotateSpeed:.2,breathing:!1});break;case"talking":this.animMap.idle&&this.scene.beginDirectAnimation(this.pointsMesh,[this.animMap.talking],0,20,!0)}}cloudAnim(e={breathing:!0,rotateSpeed:.002}){this.animMap.idle&&this.scene.beginDirectAnimation(this.pointsMesh,[this.animMap.idle],0,120,!0);let t=new BABYLON.Color4(1,1,1,1),n=(new BABYLON.Texture("/assets/avatar/particle/textures/flare.png",this.scene),0);this.pointsCloud.updateParticle=i=>{let a=this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.radiusWorld,o=this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.centerWorld;i.idx;if(i.color=t,i.rotation.y+=e.rotateSpeed,i&&n<3&&(console.log(this.currentRole.Mesh.getBoundingInfo()),console.log(i),n++),i.initpos||(i.initpos=i.position),e.breathing){let e=i.initpos.subtract(o);i.position=new BABYLON.Vector3(e.x*a,e.y*a,e.z*a).add(this.currentRole.offsetPosition)}return i}}createSphere(){let e=BABYLON.MeshBuilder.CreateSphere("sphere",{diameter:2},this.scene);e.visibility=1,e.material=new BABYLON.StandardMaterial("mat",this.scene),e.material.wireframe=!0,e.scaling=new BABYLON.Vector3(1,1,1),this.pointsMesh=e;let t=new BABYLON.Animation("breathingAnimation","scaling",30,BABYLON.Animation.ANIMATIONTYPE_VECTOR3,BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE),n=[];n.push({frame:0,value:new BABYLON.Vector3(.3,.3,.3)}),n.push({frame:60,value:new BABYLON.Vector3(.5,.5,.5)}),n.push({frame:120,value:new BABYLON.Vector3(.3,.3,.3)}),t.setKeys(n),this.animMap.idle=t;let i=[{frame:0,value:BABYLON.Vector3.One()},{frame:10,value:new BABYLON.Vector3(1.2,.8,1.2)},{frame:20,value:BABYLON.Vector3.One()}],a=new BABYLON.Animation("talkAnimation","scaling",30,BABYLON.Animation.ANIMATIONTYPE_VECTOR3,BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);return a.setKeys(i),this.animMap.talk=a,this.scene.beginDirectAnimation(e,[this.animMap.idle],0,120,!0),e}async createParticle(){let e=this.createSphere(),t=new BABYLON.ParticleSystem("particles",2e3,this.scene);t.particleTexture=new BABYLON.Texture("/assets/avatar/particle/textures/flare.png",this.scene),t.emitter=e,t.minEmitBox=new BABYLON.Vector3(0,0,0),t.maxEmitBox=new BABYLON.Vector3(0,0,0),t.color1=new BABYLON.Color4(.7,.8,1,1),t.color2=new BABYLON.Color4(.2,.5,1,1),t.colorDead=new BABYLON.Color4(0,0,.2,0),t.minSize=.5,t.maxSize=.5,t.minLifeTime=.1,t.maxLifeTime=.1,t.minAngularSpeed=0,t.maxAngularSpeed=Math.PI,t.minInitialRotation=0,t.maxInitialRotation=Math.PI,t.minEmitPower=0,t.maxEmitPower=0,t.emitRate=1500,t.updateSpeed=.01,t.blendMode=BABYLON.ParticleSystem.BLENDMODE_ONEONE,t.direction1=new BABYLON.Vector3(0,0,0),t.direction2=new BABYLON.Vector3(0,0,0),t.start();let n=t.createSphereEmitter();n.radius=2,n.radiusRange=0,n.directionRandomizer=0,t.gravity=new BABYLON.Vector3(0,0,0),t.disposeOnStop=!0,t.updateFunction=n=>{for(let i=0;i<n.length;i++){let a=n[i],o=e.getBoundingInfo()?.boundingSphere?.radiusWorld;a.position=a.position.normalize().scale(o),a.age+=this.scene.getEngine().getDeltaTime()/1e3,a.age>=a.lifeTime&&(t.recycleParticle(a),i--)}},this.engine.runRenderLoop((()=>{this.scene.render(),t.worldOffset=e.position}))}setCameraToMeshCenter(e,t){t.computeWorldMatrix(!0);let n=t.getBoundingInfo(),i=n.minimum,a=n.maximum,o=a.x-i.x,r=a.y-i.y,s=a.z-i.z,l=n.boundingBox.center;console.log("宽度:"+o),console.log("高度:"+r),console.log("深度:"+s),console.log("中心点:"+l)}static{this.ɵfac=i0.ɵɵngDeclareFactory({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarParticleComponent,deps:[{token:i0.ElementRef}],target:i0.ɵɵFactoryTarget.Component})}static{this.ɵcmp=i0.ɵɵngDeclareComponent({minVersion:"14.0.0",version:"17.3.12",type:CompAvatarParticleComponent,isStandalone:!0,selector:"fm-avatar-role-particle",viewQueries:[{propertyName:"renderCanvas",first:!0,predicate:["renderCanvas"],descendants:!0}],ngImport:i0,template:'<canvas #renderCanvas class="render-canvas"></canvas>',styles:[".render-canvas{display:block;width:100%;height:100%;touch-action:none}\n"],dependencies:[{kind:"ngmodule",type:CommonModule},{kind:"ngmodule",type:FormsModule}]})}}i0.ɵɵngDeclareClassMetadata({minVersion:"12.0.0",version:"17.3.12",ngImport:i0,type:CompAvatarParticleComponent,decorators:[{type:Component,args:[{selector:"fm-avatar-role-particle",standalone:!0,imports:[CommonModule,FormsModule],template:'<canvas #renderCanvas class="render-canvas"></canvas>',styles:[".render-canvas{display:block;width:100%;height:100%;touch-action:none}\n"]}]}],ctorParameters:()=>[{type:i0.ElementRef}],propDecorators:{renderCanvas:[{type:ViewChild,args:["renderCanvas"]}]}});
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1wYXJ0aWNsZS9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnQubWpz`
10
+
@@ -1,3 +1,10 @@
1
- export * from "./comp-avatar-particle.component";
2
- export * from "./avatar.role";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXBhcnRpY2xlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYyxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9hdmF0YXIucm9sZVwiXHJcbiJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs
7
+ */
8
+ export*from"./comp-avatar-particle.component";export*from"./avatar.role";
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1wYXJ0aWNsZS9pbmRleC5tanM=`
10
+
@@ -1,57 +1,10 @@
1
- import * as BABYLON from '@babylonjs/core';
2
- import '@babylonjs/loaders';
3
- export class RolePointsCloud {
4
- constructor(scene, engine, camera) {
5
- this.offsetPosition = new BABYLON.Vector3(0, 1.25, 0);
6
- this.animationGroup = new BABYLON.AnimationGroup("RoleAnimGroup");
7
- this.AnimMap = {
8
- idle: null
9
- };
10
- this.scene = scene;
11
- this.engine = this.engine;
12
- }
13
- async init() {
14
- this.Mesh = this.loadMesh();
15
- this.loadIdleAnim();
16
- }
17
- playAnim(anim) {
18
- // this.Mesh.animations[0]
19
- // this.animationGroup.start(true,1,0,120,null)
20
- this.scene.beginDirectAnimation(this.Mesh, [this.AnimMap[anim]], 0, 120, true);
21
- }
22
- loadMesh() {
23
- let sphere = BABYLON.MeshBuilder.CreateSphere("sphere", { diameter: 2 }, this.scene);
24
- sphere.position.addInPlace(this.offsetPosition);
25
- sphere.visibility = 1; // 不可见,仅用于粒子覆盖占位
26
- // 材质
27
- sphere.material = new BABYLON.StandardMaterial("mat", this.scene);
28
- sphere.material.wireframe = true;
29
- // 设置初始缩放
30
- sphere.scaling = new BABYLON.Vector3(1, 1, 1);
31
- return sphere;
32
- }
33
- loadIdleAnim() {
34
- // 创建动画
35
- let idleAnim = new BABYLON.Animation("idle", "scaling", 30, BABYLON.Animation.ANIMATIONTYPE_VECTOR3, BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);
36
- // 定义动画关键帧
37
- let keys = [];
38
- keys.push({
39
- frame: 0,
40
- value: new BABYLON.Vector3(1, 1, 1) // 初始缩放
41
- });
42
- keys.push({
43
- frame: 60,
44
- value: new BABYLON.Vector3(1.5, 1.5, 1.5) // 最大缩放
45
- });
46
- keys.push({
47
- frame: 120,
48
- value: new BABYLON.Vector3(1, 1, 1) // 初始缩放
49
- });
50
- idleAnim.setKeys(keys);
51
- // 将关键帧添加到动画
52
- this.Mesh.animations.push(this.AnimMap.idle);
53
- this.AnimMap.idle = idleAnim;
54
- this.animationGroup.addTargetedAnimation(this.AnimMap.idle, this.Mesh);
55
- }
56
- }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1wb2ludHMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXBhcnRpY2xlL3JvbGUtcG9pbnRzLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxvQkFBb0IsQ0FBQztBQUc1QixNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUFZLEtBQUssRUFBQyxNQUFNLEVBQUMsTUFBTTtRQUsvQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlDLG1CQUFjLEdBQTBCLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNuRixZQUFPLEdBQUc7WUFDTixJQUFJLEVBQUMsSUFBSTtTQUNaLENBQUE7UUFSRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDN0IsQ0FBQztJQU9ELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBSTtRQUNULDBCQUEwQjtRQUMxQiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELFFBQVE7UUFDSixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQSxDQUFDLGdCQUFnQjtRQUN0QyxLQUFLO1FBQ0wsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQyxTQUFTO1FBQ1QsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0lBQ0QsWUFBWTtRQUNSLE9BQU87UUFDUCxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQ2hDLE1BQU0sRUFDTixTQUFTLEVBQ1QsRUFBRSxFQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQzVDLENBQUM7UUFFRixVQUFVO1FBQ1YsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxHQUFHO1lBQ1YsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixZQUFZO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pFLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgKiBhcyBCQUJZTE9OIGZyb20gJ0BiYWJ5bG9uanMvY29yZSc7XHJcbmltcG9ydCAnQGJhYnlsb25qcy9sb2FkZXJzJztcclxuaW1wb3J0IHsgQXZhdGFyUm9sZSB9IGZyb20gJy4vYXZhdGFyLnJvbGUnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJvbGVQb2ludHNDbG91ZCBpbXBsZW1lbnRzIEF2YXRhclJvbGV7XHJcbiAgICBzY2VuZTpCQUJZTE9OLlNjZW5lXHJcbiAgICBlbmdpbmU6QkFCWUxPTi5FbmdpbmVcclxuICAgIGNvbnN0cnVjdG9yKHNjZW5lLGVuZ2luZSxjYW1lcmEpe1xyXG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZVxyXG4gICAgICAgIHRoaXMuZW5naW5lID0gdGhpcy5lbmdpbmVcclxuICAgIH1cclxuICAgIE1lc2g6QkFCWUxPTi5NZXNoXHJcbiAgICBvZmZzZXRQb3NpdGlvbiA9IG5ldyBCQUJZTE9OLlZlY3RvcjMoMCwxLjI1LDApXHJcbiAgICBhbmltYXRpb25Hcm91cDpCQUJZTE9OLkFuaW1hdGlvbkdyb3VwID0gbmV3IEJBQllMT04uQW5pbWF0aW9uR3JvdXAoXCJSb2xlQW5pbUdyb3VwXCIpXHJcbiAgICBBbmltTWFwID0ge1xyXG4gICAgICAgIGlkbGU6bnVsbFxyXG4gICAgfVxyXG4gICAgYXN5bmMgaW5pdCgpe1xyXG4gICAgICAgIHRoaXMuTWVzaCA9IHRoaXMubG9hZE1lc2goKTtcclxuICAgICAgICB0aGlzLmxvYWRJZGxlQW5pbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBsYXlBbmltKGFuaW0pe1xyXG4gICAgICAgIC8vIHRoaXMuTWVzaC5hbmltYXRpb25zWzBdXHJcbiAgICAgICAgLy8gdGhpcy5hbmltYXRpb25Hcm91cC5zdGFydCh0cnVlLDEsMCwxMjAsbnVsbClcclxuICAgICAgICB0aGlzLnNjZW5lLmJlZ2luRGlyZWN0QW5pbWF0aW9uKHRoaXMuTWVzaCwgW3RoaXMuQW5pbU1hcFthbmltXV0sIDAsIDEyMCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBsb2FkTWVzaCgpe1xyXG4gICAgICAgIGxldCBzcGhlcmUgPSBCQUJZTE9OLk1lc2hCdWlsZGVyLkNyZWF0ZVNwaGVyZShcInNwaGVyZVwiLCB7IGRpYW1ldGVyOiAyIH0sIHRoaXMuc2NlbmUpO1xyXG4gICAgICAgIHNwaGVyZS5wb3NpdGlvbi5hZGRJblBsYWNlKHRoaXMub2Zmc2V0UG9zaXRpb24pXHJcbiAgICAgICAgc3BoZXJlLnZpc2liaWxpdHkgPSAxIC8vIOS4jeWPr+inge+8jOS7heeUqOS6jueykuWtkOimhuebluWNoOS9jVxyXG4gICAgICAgIC8vIOadkOi0qFxyXG4gICAgICAgIHNwaGVyZS5tYXRlcmlhbCA9IG5ldyBCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwoXCJtYXRcIiwgdGhpcy5zY2VuZSk7XHJcbiAgICAgICAgc3BoZXJlLm1hdGVyaWFsLndpcmVmcmFtZSA9IHRydWU7XHJcbiAgICAgICAgLy8g6K6+572u5Yid5aeL57yp5pS+XHJcbiAgICAgICAgc3BoZXJlLnNjYWxpbmcgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDEsIDEsIDEpO1xyXG4gICAgICAgIHJldHVybiBzcGhlcmVcclxuICAgIH1cclxuICAgIGxvYWRJZGxlQW5pbSgpe1xyXG4gICAgICAgIC8vIOWIm+W7uuWKqOeUu1xyXG4gICAgICAgIGxldCBpZGxlQW5pbSA9IG5ldyBCQUJZTE9OLkFuaW1hdGlvbihcclxuICAgICAgICAgICAgXCJpZGxlXCIsXHJcbiAgICAgICAgICAgIFwic2NhbGluZ1wiLFxyXG4gICAgICAgICAgICAzMCxcclxuICAgICAgICAgICAgQkFCWUxPTi5BbmltYXRpb24uQU5JTUFUSU9OVFlQRV9WRUNUT1IzLFxyXG4gICAgICAgICAgICBCQUJZTE9OLkFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9DWUNMRVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5a6a5LmJ5Yqo55S75YWz6ZSu5binXHJcbiAgICAgICAgbGV0IGtleXMgPSBbXTtcclxuICAgICAgICBrZXlzLnB1c2goe1xyXG4gICAgICAgICAgICBmcmFtZTogMCxcclxuICAgICAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMSwxLDEpIC8vIOWIneWni+e8qeaUvlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGtleXMucHVzaCh7XHJcbiAgICAgICAgICAgIGZyYW1lOiA2MCxcclxuICAgICAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMS41LDEuNSwxLjUpIC8vIOacgOWkp+e8qeaUvlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGtleXMucHVzaCh7XHJcbiAgICAgICAgICAgIGZyYW1lOiAxMjAsXHJcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgQkFCWUxPTi5WZWN0b3IzKDEsMSwxKSAvLyDliJ3lp4vnvKnmlL5cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZGxlQW5pbS5zZXRLZXlzKGtleXMpXHJcbiAgICAgICAgLy8g5bCG5YWz6ZSu5bin5re75Yqg5Yiw5Yqo55S7XHJcbiAgICAgICAgdGhpcy5NZXNoLmFuaW1hdGlvbnMucHVzaCh0aGlzLkFuaW1NYXAuaWRsZSlcclxuICAgICAgICB0aGlzLkFuaW1NYXAuaWRsZSA9IGlkbGVBbmltXHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25Hcm91cC5hZGRUYXJnZXRlZEFuaW1hdGlvbih0aGlzLkFuaW1NYXAuaWRsZSx0aGlzLk1lc2gpXHJcbiAgICB9XHJcbiAgICBcclxufSJdfQ==
1
+
2
+ /**
3
+ * @copyright © 未来飞马 © 未来全栈 www.fmode.cn
4
+ * 版权所有 © 未来飞马 © 江西脑控科技有限公司 Copyright © Fmode Technology Co., Ltd.
5
+ * 保留所有权利 All Rights Reserved.
6
+ * /home/ryan/workspace/nova/nova-admin/dist/fmode-ng/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs
7
+ */
8
+ import*as BABYLON from"@babylonjs/core";import"@babylonjs/loaders";export class RolePointsCloud{constructor(i,e,t){this.offsetPosition=new BABYLON.Vector3(0,1.25,0),this.animationGroup=new BABYLON.AnimationGroup("RoleAnimGroup"),this.AnimMap={idle:null},this.scene=i,this.engine=this.engine}async init(){this.Mesh=this.loadMesh(),this.loadIdleAnim()}playAnim(i){this.scene.beginDirectAnimation(this.Mesh,[this.AnimMap[i]],0,120,!0)}loadMesh(){let i=BABYLON.MeshBuilder.CreateSphere("sphere",{diameter:2},this.scene);return i.position.addInPlace(this.offsetPosition),i.visibility=1,i.material=new BABYLON.StandardMaterial("mat",this.scene),i.material.wireframe=!0,i.scaling=new BABYLON.Vector3(1,1,1),i}loadIdleAnim(){let i=new BABYLON.Animation("idle","scaling",30,BABYLON.Animation.ANIMATIONTYPE_VECTOR3,BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE),e=[];e.push({frame:0,value:new BABYLON.Vector3(1,1,1)}),e.push({frame:60,value:new BABYLON.Vector3(1.5,1.5,1.5)}),e.push({frame:120,value:new BABYLON.Vector3(1,1,1)}),i.setKeys(e),this.Mesh.animations.push(this.AnimMap.idle),this.AnimMap.idle=i,this.animationGroup.addTargetedAnimation(this.AnimMap.idle,this.Mesh)}}
9
+ var MODULE_PATH_NEED = `6K+l5paH5Lu25piv5pys6aG555uu55qE5LiA6YOo5YiGIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDb21wb25lbnRzIGluIEZtb2RlIEluYy4KICAgIOeJiOadg+aJgOaciSDCqSDmnKrmnaXpo57pqawgwqkg5rGf6KW/6ISR5o6n56eR5oqA5pyJ6ZmQ5YWs5Y+4IENvcHlyaWdodCDCqSBGbW9kZSBUZWNobm9sb2d5IENvLiwgTHRkLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgICDkuKXnpoHlnKjmnKrnu4/mjojmnYPnmoTmg4XlhrXkuIvvvIzpgJrov4fku7vkvZXlqpLku4vlpI3liLbmraTmlofku7YgVW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhpcyBmaWxlLCB2aWEgYW55IG1lZGl1bSBpcyBzdHJpY3RseSBwcm9oaWJpdGVkCiAgICDor6Xmlofku7bmmK/kuJPmnInnmoTmnLrlr4bmlofku7YgUHJvcHJpZXRhcnkgYW5kIGNvbmZpZGVudGlhbAogICAKICAgIENvcHlyaWdodCAyMDIxLW5vdyBGbW9kZSBJbmMuIHN1cHBvcnRAZm1vZGUuY24uIDE4NjA3MDA3MDczLgogICAg5L+d55WZ5omA5pyJ5p2D5YipIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUEFUSDovaG9tZS9yeWFuL3dvcmtzcGFjZS9ub3ZhL25vdmEtYWRtaW4vZGlzdC9mbW9kZS1uZy9lc20yMDIyL2xpYi9haWdjL2F2YXRhci9jb21wLWF2YXRhci1wYXJ0aWNsZS9yb2xlLXBvaW50cy5jbGFzcy5tanM=`
10
+