fmode-ng 0.0.41 → 0.0.43

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 (102) hide show
  1. package/LICENSE.md +8 -0
  2. package/esm2022/fmode-ng.mjs +10 -5
  3. package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
  4. package/esm2022/lib/aigc/agent/index.mjs +10 -2
  5. package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
  6. package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
  7. package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
  8. package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
  9. package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
  10. package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
  11. package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
  12. package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
  13. package/esm2022/lib/aigc/avatar/index.mjs +10 -8
  14. package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
  15. package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
  16. package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
  17. package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
  18. package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
  19. package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
  20. package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
  21. package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
  22. package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
  23. package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
  24. package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
  25. package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
  26. package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
  27. package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
  28. package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
  29. package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
  30. package/esm2022/lib/aigc/chat/index.mjs +10 -8
  31. package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
  32. package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
  33. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
  34. package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
  35. package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
  36. package/esm2022/lib/aigc/index.mjs +10 -13
  37. package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
  38. package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
  39. package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
  40. package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
  41. package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
  42. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
  43. package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
  44. package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
  45. package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
  46. package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
  47. package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
  48. package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
  49. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
  50. package/esm2022/lib/aigc/voice/index.mjs +10 -3
  51. package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
  52. package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
  53. package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
  54. package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
  55. package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
  56. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
  57. package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
  58. package/esm2022/lib/map/index.mjs +10 -4
  59. package/esm2022/lib/map/map.module.mjs +10 -61
  60. package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
  61. package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
  62. package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
  63. package/esm2022/lib/nova-cloud/index.mjs +10 -2
  64. package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
  65. package/esm2022/lib/platform/cross.service.mjs +10 -63
  66. package/esm2022/lib/platform/index.mjs +10 -2
  67. package/esm2022/lib/social/index.mjs +10 -2
  68. package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
  69. package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
  70. package/esm2022/lib/storage/index.mjs +10 -5
  71. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
  72. package/esm2022/lib/storage/service-upload/index.mjs +10 -2
  73. package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
  74. package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
  75. package/esm2022/lib/storage/storage.module.mjs +10 -41
  76. package/esm2022/lib/user/account/account.service.mjs +10 -221
  77. package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
  78. package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
  79. package/esm2022/lib/user/index.mjs +10 -17
  80. package/esm2022/lib/user/login/auth.guard.mjs +10 -28
  81. package/esm2022/lib/user/login/auth.service.mjs +8 -373
  82. package/esm2022/lib/user/login/login.component.mjs +10 -913
  83. package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
  84. package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
  85. package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
  86. package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
  87. package/esm2022/lib/user/profile/profile.module.mjs +10 -57
  88. package/esm2022/lib/user/staff/index.mjs +10 -4
  89. package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
  90. package/esm2022/lib/user/staff/staff.module.mjs +10 -18
  91. package/esm2022/lib/user/staff/staff.service.mjs +10 -85
  92. package/esm2022/lib/user/user-name.pipe.mjs +10 -29
  93. package/esm2022/lib/user/user.module.mjs +10 -106
  94. package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
  95. package/esm2022/lib/video/index.mjs +10 -2
  96. package/esm2022/public-api.mjs +10 -13
  97. package/fesm2022/fmode-ng.mjs +7 -8895
  98. package/fesm2022/fmode-ng.mjs.map +1 -1
  99. package/lib/aigc/voice/fmode-voice.service.d.ts +18 -1
  100. package/lib/aigc/voice/stream.player.d.ts +10 -0
  101. package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
  102. package/package.json +1 -1
@@ -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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LENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUU3Qiw4QkFBOEI7SUFDaEMsQ0FBQzsrR0F2WFUsMkJBQTJCO21HQUEzQiwyQkFBMkIsaU1DckJ4Qyx5REFBcUQsaUlEaUIxQyxZQUFZLDhCQUFDLFdBQVc7OzRGQUl0QiwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBQyxXQUFXLENBQUM7K0VBS1IsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbi8qKlxuICogbnBtIGkgLVMgQGJhYnlsb25qcy9jb3JlXG4gKiBucG0gaSAtUyBAYmFieWxvbmpzL2xvYWRlcnNcbiAqL1xuaW1wb3J0ICogYXMgQkFCWUxPTiBmcm9tICdAYmFieWxvbmpzL2NvcmUnO1xuLy8gaW1wb3J0IHsgQ2xvdWRQb2ludCB9IGZyb20gJ0BiYWJ5bG9uanMvY29yZSc7XG5pbXBvcnQgJ0BiYWJ5bG9uanMvbG9hZGVycyc7XG5pbXBvcnQgeyBBdmF0YXJSb2xlIH0gZnJvbSAnLi9hdmF0YXIucm9sZSc7XG5pbXBvcnQgeyBSb2xlUG9pbnRzQ2xvdWQgfSBmcm9tICcuL3JvbGUtcG9pbnRzLmNsYXNzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm0tYXZhdGFyLXJvbGUtcGFydGljbGUnLFxuICBzdGFuZGFsb25lOnRydWUsXG4gIGltcG9ydHM6W0NvbW1vbk1vZHVsZSxGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbXAtYXZhdGFyLXBhcnRpY2xlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29tcEF2YXRhclBhcnRpY2xlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gQFZpZXdDaGlsZChcInJlbmRlckNhbnZhc1wiKSByZW5kZXJDYW52YXM6RWxlbWVudFJlZlxuICBcbiAgLy8g55S75biDXG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudHx1bmRlZmluZWQ7XG4gIHByaXZhdGUgZW5naW5lOiBCQUJZTE9OLkVuZ2luZXx1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2NlbmU6IEJBQllMT04uU2NlbmV8dW5kZWZpbmVkO1xuICBtYWluQ2FtZXJhOkJBQllMT04uQXJjUm90YXRlQ2FtZXJhfEJBQllMT04uVlJEZXZpY2VPcmllbnRhdGlvbkFyY1JvdGF0ZUNhbWVyYXx1bmRlZmluZWQ7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICB9XG4gbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2FudmFzID0gdGhpcy5yZW5kZXJDYW52YXMubmF0aXZlRWxlbWVudDtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNhbnZhcylcbiAgICBpZih0aGlzLmNhbnZhcyl7XG4gICAgICAgIGxldCBvcHRpb25zOkJBQllMT04uRW5naW5lT3B0aW9ucyA9IHtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZ2luZSA9IG5ldyBCQUJZTE9OLkVuZ2luZSgodGhpcy5jYW52YXMgYXMgYW55KSwgdHJ1ZSxvcHRpb25zKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5lbmdpbmUpXG4gICAgICAgIC8vIOWIm+W7uuWcuuaZr1xuICAgICAgICB0aGlzLmNyZWF0ZVNjZW5lKCk7XG4gICAgICAgIHRoaXMuZW5naW5lLnJ1blJlbmRlckxvb3AoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2NlbmU/LnJlbmRlcigpO1xuICAgICAgICAgIHRoaXMuZW5naW5lPy5yZXNpemUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbmdpbmU/LnJlc2l6ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbiAgY3VycmVudFJvbGU6QXZhdGFyUm9sZVxuICBhc3luYyBjcmVhdGVTY2VuZSgpIHtcbiAgICAvLyDliJvlu7rlnLrmma9cbiAgICB0aGlzLnNjZW5lID0gbmV3IEJBQllMT04uU2NlbmUoKHRoaXMuZW5naW5lIGFzIGFueSkpO1xuICAgIHRoaXMuc2NlbmUuY2xlYXJDb2xvciA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLDAsMCwxKVxuICAgIC8vIOWIm+W7uuiInuWPsOS4reWkruaXi+i9rOebuOaculxuICAgIHRoaXMubWFpbkNhbWVyYSA9IHRoaXMuY3JlYXRlQ2FtZXJhKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5tYWluQ2FtZXJhKVxuICAgIC8vIOWKoOi9vemihOiuvueahOinkuiJslxuICAgIHRoaXMuY3VycmVudFJvbGUgPSBuZXcgUm9sZVBvaW50c0Nsb3VkKHRoaXMuc2NlbmUsdGhpcy5lbmdpbmUsdGhpcy5tYWluQ2FtZXJhKVxuICAgIGF3YWl0IHRoaXMuY3VycmVudFJvbGUuaW5pdCgpXG4gICAgdGhpcy5jdXJyZW50Um9sZS5wbGF5QW5pbShcImlkbGVcIikgLy8g6buY6K6k5pKt5pS+6Zey572u55S76Z2iXG4gICAgdGhpcy5jdXJyZW50Um9sZS5NZXNoLnZpc2liaWxpdHkgPSAwOyAvLyDlvIDlkK/ngrnkupHvvIzljp9NZXNo6K6+572u6ZqQ6JePXG5cbiAgICAvLyDliJvlu7rpnIDopoHlsZXnpLrnmoTkuLvopoHotYTmupBcbiAgICAvLyBsZXQgcHJlZmFiID0gdGhpcy5wcmVmYWJMaXN0WzBdXG4gICAgLy8gYXdhaXQgdGhpcy5jcmVhdGVQcmVmYWIocHJlZmFiKVxuXG4gICAgLy8g5Yib5bu657KS5a2Q5pWI5p6cXG4gICAgLy8gYXdhaXQgdGhpcy5jcmVhdGVQYXJ0aWNsZSgpXG5cbiAgICAvLyDliJvlu7rngrnkupHnspLlrZBcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZUNsb3VkUG9pbnRzKClcblxuICAgIGxldCBsaWdodCA9IG5ldyBCQUJZTE9OLkhlbWlzcGhlcmljTGlnaHQoJ2xpZ2h0MScsIG5ldyBCQUJZTE9OLlZlY3RvcjMoMCwxLDApLCB0aGlzLnNjZW5lKTtcblxuICAgIC8vIGxldCBncm91bmQgPSBCQUJZTE9OLk1lc2hCdWlsZGVyLkNyZWF0ZUdyb3VuZCgnZ3JvdW5kMScsIHtoZWlnaHQ6MTAsIHdpZHRoOjEwLCBzdWJkaXZpc2lvbnM6IDJ9LCB0aGlzLnNjZW5lKTtcbiAgICAvLyBsZXQgZ3JvdWRNYXRlcmlhbCA9IG5ldyBCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwoXCJncm91ZE1hdGVyaWFsXCIsIHRoaXMuc2NlbmUpO1xuICAgIC8vIGdyb3VkTWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gbmV3IEJBQllMT04uQ29sb3IzKDAuNSwgMC41LCAwLjUpOyAvLyDorr7nva7ngbDoibJcbiAgICAvLyBncm91bmQubWF0ZXJpYWwgPSBncm91ZE1hdGVyaWFsO1xuICAgIC8vIOS/ruato+avlOS+i1xuICAgIHRoaXMuZW5naW5lPy5yZXNpemUoKTtcblxuICB9XG4gIGlzV2ViVlI6Ym9vbGVhbiA9IGZhbHNlXG4gIGNyZWF0ZUNhbWVyYSgpe1xuICAgIC8vIFBhcmFtZXRlcnM6IGFscGhhLCBiZXRhLCByYWRpdXMsIHRhcmdldCBwb3NpdGlvbiwgc2NlbmVcbiAgICBsZXQgQ2FtZXJhVHlwZSA9IHRoaXMuaXNXZWJWUj9CQUJZTE9OLlZSRGV2aWNlT3JpZW50YXRpb25BcmNSb3RhdGVDYW1lcmE6QkFCWUxPTi5BcmNSb3RhdGVDYW1lcmFcbiAgICBsZXQgY2FtZXJhID0gbmV3IENhbWVyYVR5cGUoXCJDYW1lcmFcIiwgMCwgMCwgMzAsIG5ldyBCQUJZTE9OLlZlY3RvcjMoMCwgMC41LCAwKSwgdGhpcy5zY2VuZSk7XG4gICAgLy8gUG9zaXRpb25zIHRoZSBjYW1lcmEgb3ZlcndyaXRpbmcgYWxwaGEsIGJldGEsIHJhZGl1c1xuICAgIGNhbWVyYS5zZXRQb3NpdGlvbihuZXcgQkFCWUxPTi5WZWN0b3IzKDAsIDAsIDUpKTtcbiAgICAvLyDorr7nva7nm7jmnLrnmoTkv6/ku7Dop5LluqbkuLo0NcKwXG4gICAgY2FtZXJhLmJldGEgPSBNYXRoLlBJIC8gMztcbiAgICBjYW1lcmEuYWxwaGEgPSBNYXRoLlBJIC8gMS4yO1xuICAgIGNhbWVyYS5yYWRpdXMgPSAxNTtcbiAgICAvLyBUaGlzIGF0dGFjaGVzIHRoZSBjYW1lcmEgdG8gdGhlIGNhbnZhc1xuICAgIC8vIGNhbWVyYS5hdHRhY2hDb250cm9sKHRoaXMuY2FudmFzLCB0cnVlKTsgLy8g5YWz6Zet5o6n5Yi277yM55Sx56iL5bqP6ZSB5a6a6ZWc5aS0XG4gICAgcmV0dXJuIGNhbWVyYVxuICB9XG5cbiAgbWFpbk1lc2g6QkFCWUxPTi5BYnN0cmFjdE1lc2h8dW5kZWZpbmVkXG4gIC8vIHByZWZhYkxpc3QgPSBbXG4gIC8vICAge25hbWU6XCLok53oibLlj6/niLHlsI/mnLrlmajkurpcIixkaXI6Jy9hc3NldHMvYXZhdGFyL3ByZWZhYi9ibHVlcm9ib3QvJyxmaWxlOlwic2NlbmUuZ2x0ZlwiLGNhbWVyYVBvc2l0b246W01hdGguUEkgLyAxLjIsIE1hdGguUEkgLyAzLDVdfSxcbiAgLy8gICB7bmFtZTpcIue0q+iJsuWwj+eyvueBtVwiLGRpcjonL2Fzc2V0cy9hdmF0YXIvcHJlZmFiL2Z1cmJ5X3B1cnBsZS8nLGZpbGU6XCJzY2VuZS5nbHRmXCIsY2FtZXJhUG9zaXRvbjpbMCwgMCwxMF19XG4gIC8vIF1cbiAgLy8gYXN5bmMgY3JlYXRlUHJlZmFiKHByZWZhYjphbnkpe1xuICAvLyAgICAgLy8g5Yqg6L295qih5Z6LXG4gIC8vICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IEJBQllMT04uU2NlbmVMb2FkZXIuSW1wb3J0TWVzaEFzeW5jKG51bGwsIHByZWZhYi5kaXIsIHByZWZhYi5maWxlLCB0aGlzLnNjZW5lKTtcblxuICAvLyAgICAgLy8g6K6+572u5qih5Z6L5Yid5aeL5L2N572uXG4gIC8vICAgICB0aGlzLm1haW5NZXNoID0gbW9kZWwubWVzaGVzWzBdXG4gIC8vICAgICB0aGlzLm1haW5NZXNoLnBvc2l0aW9uID0gbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLjEsIDApO1xuICAvLyAgICAgY29uc29sZS5sb2codGhpcy5tYWluTWVzaClcblxuICAvLyAgICAgLy8g6YeN6K6+55u45py65L2N572uXG4gIC8vICAgICAvLyDmlrnms5XkuIDvvJrliqDovb3kurrlt6XpooTorr7plZzlpLTkvY3nva5cbiAgLy8gICAgIHRoaXMubWFpbkNhbWVyYT8uc2V0UG9zaXRpb24obmV3IEJBQllMT04uVmVjdG9yMyhwcmVmYWIuY2FtZXJhUG9zaXRvblswXSxwcmVmYWIuY2FtZXJhUG9zaXRvblsxXSxwcmVmYWIuY2FtZXJhUG9zaXRvblsyXSkpXG4gIC8vICAgICAvLyDmlrnms5XkuozvvJrnlLHkuo5NZXNo5pys6Lqr55qE56m66Ze05L+h5oGv57y65aSx77yM5a+86Ie05peg5rOV5pm66IO96K+G5YirXG4gIC8vICAgICAvLyB0aGlzLnNldENhbWVyYVRvTWVzaENlbnRlcih0aGlzLm1haW5DYW1lcmEsdGhpcy5tYWluTWVzaClcbiAgLy8gICAgIHJldHVyblxuICAvLyB9XG5cbiAgcG9pbnRzQ2xvdWQ6QkFCWUxPTi5Qb2ludHNDbG91ZFN5c3RlbVxuICBwb2ludHNNZXNoOkJBQllMT04uTWVzaFxuICBhc3luYyBjcmVhdGVDbG91ZFBvaW50cygpe1xuICAgIHRoaXMucG9pbnRzTWVzaCA9IHRoaXMuY3VycmVudFJvbGUuTWVzaFxuICAgIHRoaXMucG9pbnRzQ2xvdWQgPSBuZXcgQkFCWUxPTi5Qb2ludHNDbG91ZFN5c3RlbShcInBjc1wiLCAxLCB0aGlzLnNjZW5lKSBcbiAgICAvLyBwY3MuYWRkUG9pbnRzKDEwMDAwKTtcbiAgICBcbiAgICBsZXQgY29sb3IxID0gbmV3IEJBQllMT04uQ29sb3IzKDAuNywgMC44LCAxLjApO1xuICAgIGxldCBjb2xvcjQgPSBuZXcgQkFCWUxPTi5Db2xvcjQoMC43LCAwLjgsIDEuMCk7XG4gICAgbGV0IGNvbG9yMiA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLjIsIDAuNSwgMS4wKTtcbiAgICBsZXQgY29sb3JEZWFkID0gbmV3IEJBQllMT04uQ29sb3I0KDAsIDAsIDAuMiwgMC4wKTtcbiAgICBsZXQgcFRleHR1cmUgPSBuZXcgQkFCWUxPTi5UZXh0dXJlKFwiL2Fzc2V0cy9hdmF0YXIvcGFydGljbGUvdGV4dHVyZXMvZmxhcmUucG5nXCIsIHRoaXMuc2NlbmUpO1xuICAgIGxldCBwTWF0ZXJpYWwgPSBuZXcgQkFCWUxPTi5QQlJNYXRlcmlhbChcIm1hdGVyaWFsXCIsIHRoaXMuc2NlbmUpO1xuICAgIHBNYXRlcmlhbC5lbWlzc2l2ZVRleHR1cmUgPSBwVGV4dHVyZVxuICAgIHBNYXRlcmlhbC5lbWlzc2l2ZUNvbG9yID0gY29sb3IxXG4gICAgXG4gICAgIHRoaXMucG9pbnRzQ2xvdWQuYWRkVm9sdW1lUG9pbnRzKHRoaXMuY3VycmVudFJvbGUuTWVzaCwgNTAwMCxCQUJZTE9OLlBvaW50Q29sb3IuQ29sb3IsY29sb3I0KTtcblxuICAgICB0aGlzLnBvaW50c0Nsb3VkLmJ1aWxkTWVzaEFzeW5jKCkudGhlbigoKT0+e1xuICAgICAgLy8gIHRoaXMucG9pbnRzQ2xvdWQubWVzaC5tYXRlcmlhbCA9IHBNYXRlcmlhbDtcbiAgICAgICB0aGlzLnBsYXlBbmltYXRpb24oXCJ3YWl0aW5nXCIpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnNjZW5lLnJlZ2lzdGVyQWZ0ZXJSZW5kZXIoKCkgPT4ge1xuICAgICAgIHRoaXMucG9pbnRzQ2xvdWQuc2V0UGFydGljbGVzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5lbmdpbmUucnVuUmVuZGVyTG9vcCgoKSA9PiB7XG4gICAgICB0aGlzLnNjZW5lLnJlbmRlcigpO1xuICAgIH0pO1xuXG4gIH1cblxuICBwbGF5QW5pbWF0aW9uKG5hbWUpe1xuICAgIFxuICAgIC8vIOadkOi0qOminOiJslxuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlIFwid2FpdGluZ1wiOlxuICAgICAgICB0aGlzLmNsb3VkQW5pbSgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImxpc3RlbmluZ1wiOlxuICAgICAgICB0aGlzLmNsb3VkQW5pbSh7XG4gICAgICAgICAgcm90YXRlU3BlZWQ6MC4wMSxcbiAgICAgICAgICBicmVhdGhpbmc6ZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInRoaW5raW5nXCI6XG4gICAgICAgIHRoaXMuY2xvdWRBbmltKHtcbiAgICAgICAgICByb3RhdGVTcGVlZDowLjIsXG4gICAgICAgICAgYnJlYXRoaW5nOmZhbHNlLFxuICAgICAgICB9KVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0YWxraW5nXCI6XG4gICAgICAgIC8vIHRoaXMucG9pbnRzQ2xvdWQucGFydGljbGVzXG4gICAgICAgIHRoaXMuYW5pbU1hcFsnaWRsZSddJiZ0aGlzLnNjZW5lLmJlZ2luRGlyZWN0QW5pbWF0aW9uKHRoaXMucG9pbnRzTWVzaCwgW3RoaXMuYW5pbU1hcFsndGFsa2luZyddXSwgMCwgMjAsIHRydWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNsb3VkQW5pbShvcHRpb25zPXtcbiAgICBicmVhdGhpbmc6dHJ1ZSxcbiAgICByb3RhdGVTcGVlZDowLjAwMlxuICB9KXtcbiAgICB0aGlzLmFuaW1NYXBbJ2lkbGUnXSYmdGhpcy5zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbih0aGlzLnBvaW50c01lc2gsIFt0aGlzLmFuaW1NYXBbJ2lkbGUnXV0sIDAsIDEyMCwgdHJ1ZSk7XG4gICAgbGV0IGNvbG9yV2hpdGUgPSBuZXcgQkFCWUxPTi5Db2xvcjQoMS4wLCAxLjAsIDEuMCwxLjApO1xuICAgIGxldCBwVGV4dHVyZSA9IG5ldyBCQUJZTE9OLlRleHR1cmUoXCIvYXNzZXRzL2F2YXRhci9wYXJ0aWNsZS90ZXh0dXJlcy9mbGFyZS5wbmdcIiwgdGhpcy5zY2VuZSk7XG4gICAgbGV0IGlzbG9nID0gMFxuXG4gICAgdGhpcy5wb2ludHNDbG91ZC51cGRhdGVQYXJ0aWNsZSA9IChwYXJ0aWNsZTpCQUJZTE9OLkNsb3VkUG9pbnQpID0+e1xuICAgICAgLy8g56m66Ze05L2N572uXG4gICAgICBsZXQgc3BoZXJlUmFkaXVzID0gdGhpcy5jdXJyZW50Um9sZS5NZXNoLmdldEJvdW5kaW5nSW5mbygpPy5ib3VuZGluZ1NwaGVyZT8ucmFkaXVzV29ybGRcbiAgICAgIGxldCBjZW50ZXJXb3JsZCA9IHRoaXMuY3VycmVudFJvbGUuTWVzaC5nZXRCb3VuZGluZ0luZm8oKT8uYm91bmRpbmdTcGhlcmU/LmNlbnRlcldvcmxkXG5cbiAgICAgIGxldCBpbmRleCA9IHBhcnRpY2xlLmlkeDtcbiAgICAgIHBhcnRpY2xlLmNvbG9yID0gY29sb3JXaGl0ZTtcbiAgICAgIC8vIOaXi+i9rFxuICAgICAgcGFydGljbGUucm90YXRpb24ueSArPSBvcHRpb25zLnJvdGF0ZVNwZWVkOyBcbiAgICAgIC8vIOS9jee9rlxuICAgICAgaWYocGFydGljbGUmJmlzbG9nPDMpe1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRSb2xlLk1lc2guZ2V0Qm91bmRpbmdJbmZvKCkpXG4gICAgICAgIGNvbnNvbGUubG9nKHBhcnRpY2xlKVxuICAgICAgICBpc2xvZyArK1xuICAgICAgfVxuICAgICAgaWYoIShwYXJ0aWNsZSBhcyBhbnkpLmluaXRwb3MpIChwYXJ0aWNsZSBhcyBhbnkpLmluaXRwb3MgPSBwYXJ0aWNsZS5wb3NpdGlvblxuICAgICAgaWYob3B0aW9ucy5icmVhdGhpbmcpe1xuICAgICAgICBsZXQgaW5pdHBvcyA9IChwYXJ0aWNsZSBhcyBhbnkpLmluaXRwb3NcbiAgICAgICAgbGV0IHJlbGF0aXZlVmVjdG9yID0gaW5pdHBvcy5zdWJ0cmFjdChjZW50ZXJXb3JsZCk7XG4gICAgICAgIHBhcnRpY2xlLnBvc2l0aW9uID0gbmV3IEJBQllMT04uVmVjdG9yMyhyZWxhdGl2ZVZlY3Rvci54KnNwaGVyZVJhZGl1cyxyZWxhdGl2ZVZlY3Rvci55KnNwaGVyZVJhZGl1cyxyZWxhdGl2ZVZlY3Rvci56KnNwaGVyZVJhZGl1cykuYWRkKHRoaXMuY3VycmVudFJvbGUub2Zmc2V0UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnRpY2xlXG4gIH07XG4gIH1cbiAgXG4gIGFuaW1NYXA6e1xuICAgIFtrZXk6c3RyaW5nXTpCQUJZTE9OLkFuaW1hdGlvblxuICB9ID0ge31cbiAgY3JlYXRlU3BoZXJlKCl7XG4gICAgbGV0IHNwaGVyZSA9IEJBQllMT04uTWVzaEJ1aWxkZXIuQ3JlYXRlU3BoZXJlKFwic3BoZXJlXCIsIHsgZGlhbWV0ZXI6IDIgfSwgdGhpcy5zY2VuZSk7XG4gICAgc3BoZXJlLnZpc2liaWxpdHkgPSAxIC8vIOS4jeWPr+inge+8jOS7heeUqOS6jueykuWtkOimhuebluWNoOS9jVxuICAgIC8vIOadkOi0qFxuICAgIHNwaGVyZS5tYXRlcmlhbCA9IG5ldyBCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwoXCJtYXRcIiwgdGhpcy5zY2VuZSk7XG4gICAgc3BoZXJlLm1hdGVyaWFsLndpcmVmcmFtZSA9IHRydWU7XG4gICAgLy8g6K6+572u5Yid5aeL57yp5pS+XG4gICAgc3BoZXJlLnNjYWxpbmcgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDEsIDEsIDEpO1xuICAgIHRoaXMucG9pbnRzTWVzaCA9IHNwaGVyZTtcbiAgICAvKipcbiAgICAgKiDlkbzlkLjliqjnlLtcbiAgICAgKi9cbiAgICAvLyDliJvlu7rliqjnlLtcbiAgICBsZXQgYW5pbWF0aW9uID0gbmV3IEJBQllMT04uQW5pbWF0aW9uKFxuICAgICAgICBcImJyZWF0aGluZ0FuaW1hdGlvblwiLFxuICAgICAgICBcInNjYWxpbmdcIixcbiAgICAgICAgMzAsXG4gICAgICAgIEJBQllMT04uQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVfVkVDVE9SMyxcbiAgICAgICAgQkFCWUxPTi5BbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEVcbiAgICApO1xuXG4gICAgLy8g5a6a5LmJ5Yqo55S75YWz6ZSu5binXG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBrZXlzLnB1c2goe1xuICAgICAgICBmcmFtZTogMCxcbiAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMC4zLDAuMywwLjMpIC8vIOWIneWni+e8qeaUvlxuICAgIH0pO1xuICAgIGtleXMucHVzaCh7XG4gICAgICAgIGZyYW1lOiA2MCxcbiAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMC41LDAuNSwwLjUpIC8vIOacgOWkp+e8qeaUvlxuICAgIH0pO1xuICAgIGtleXMucHVzaCh7XG4gICAgICAgIGZyYW1lOiAxMjAsXG4gICAgICAgIHZhbHVlOiBuZXcgQkFCWUxPTi5WZWN0b3IzKDAuMywwLjMsMC4zKSAvLyDliJ3lp4vnvKnmlL5cbiAgICB9KTtcblxuICAgIC8vIOWwhuWFs+mUruW4p+a3u+WKoOWIsOWKqOeUu1xuICAgIGFuaW1hdGlvbi5zZXRLZXlzKGtleXMpO1xuICAgIHRoaXMuYW5pbU1hcFtcImlkbGVcIl09YW5pbWF0aW9uO1xuXG5cbiAgICAvKipcbiAgICAgKiDorrLor53liqjnlLtcbiAgICAgKi9cblxuICAvLyDlrprkuYnliqjnlLvluKdcbiAgbGV0IGFuaW1hdGlvbkZyYW1lc1RhbGsgPSBbXG4gICAgeyBmcmFtZTogMCwgdmFsdWU6IEJBQllMT04uVmVjdG9yMy5PbmUoKSB9LFxuICAgIHsgZnJhbWU6IDEwLCB2YWx1ZTogbmV3IEJBQllMT04uVmVjdG9yMygxLjIsIDAuOCwgMS4yKSB9LFxuICAgIHsgZnJhbWU6IDIwLCB2YWx1ZTogQkFCWUxPTi5WZWN0b3IzLk9uZSgpIH0sXG4gIF07XG5cbiAgLy8g5Yib5bu65Yqo55S7XG4gIGxldCBhbmltYXRpb25UYWxrID0gbmV3IEJBQllMT04uQW5pbWF0aW9uKFxuICAgIFwidGFsa0FuaW1hdGlvblwiLFxuICAgIFwic2NhbGluZ1wiLFxuICAgIDMwLFxuICAgIEJBQllMT04uQW5pbWF0aW9uLkFOSU1BVElPTlRZUEVfVkVDVE9SMyxcbiAgICBCQUJZTE9OLkFuaW1hdGlvbi5BTklNQVRJT05MT09QTU9ERV9DWUNMRVxuICApO1xuXG4gIC8vIOiuvue9ruWKqOeUu+W4p1xuICBhbmltYXRpb25UYWxrLnNldEtleXMoYW5pbWF0aW9uRnJhbWVzVGFsayk7XG4gIHRoaXMuYW5pbU1hcFtcInRhbGtcIl09YW5pbWF0aW9uVGFsaztcblxuXG4gICAgLy8g5ZCv5Yqo5Yqo55S7XG4gICAgdGhpcy5zY2VuZS5iZWdpbkRpcmVjdEFuaW1hdGlvbihzcGhlcmUsIFt0aGlzLmFuaW1NYXBbJ2lkbGUnXV0sIDAsIDEyMCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gc3BoZXJlXG4gIH1cblxuXG5cbiAgYXN5bmMgY3JlYXRlUGFydGljbGUoKXtcbiAgICAgICAgLy8g5Yib5bu655CD5L2TXG4gICAgICAgICAgbGV0IHNwaGVyZSA9IHRoaXMuY3JlYXRlU3BoZXJlKClcblxuICAgICAgICAgIC8vIOWIm+W7uueykuWtkOezu+e7n1xuICAgICAgICAgIGxldCBwYXJ0aWNsZVN5c3RlbSA9IG5ldyBCQUJZTE9OLlBhcnRpY2xlU3lzdGVtKFwicGFydGljbGVzXCIsIDIwMDAsIHRoaXMuc2NlbmUpO1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnBhcnRpY2xlVGV4dHVyZSA9IG5ldyBCQUJZTE9OLlRleHR1cmUoXCIvYXNzZXRzL2F2YXRhci9wYXJ0aWNsZS90ZXh0dXJlcy9mbGFyZS5wbmdcIiwgdGhpcy5zY2VuZSk7XG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uZW1pdHRlciA9IHNwaGVyZTtcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5FbWl0Qm94ID0gbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLCAwKTsgLy8gU3RhcnRpbmcgYWxsIGZyb21cbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhFbWl0Qm94ID0gbmV3IEJBQllMT04uVmVjdG9yMygwLCAwLCAwKTsgLy8gVG8uLi5cbiAgICAgICAgICAvLyBDb2xvcnMgb2YgYWxsIHBhcnRpY2xlc1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yMSA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLjcsIDAuOCwgMS4wLCAxLjApO1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yMiA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLjIsIDAuNSwgMS4wLCAxLjApO1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmNvbG9yRGVhZCA9IG5ldyBCQUJZTE9OLkNvbG9yNCgwLCAwLCAwLjIsIDAuMCk7XG4gICAgICAgICAgLy8gU2l6ZSBvZiBlYWNoIHBhcnRpY2xlIChyYW5kb20gYmV0d2Vlbi4uLlxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pblNpemUgPSAwLjU7XG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWF4U2l6ZSA9IDAuNTtcbiAgICAgICAgICAvLyBMaWZlIHRpbWUgb2YgZWFjaCBwYXJ0aWNsZSAocmFuZG9tIGJldHdlZW4uLi5cbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5MaWZlVGltZSA9IDAuMTtcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhMaWZlVGltZSA9IDAuMTtcbiAgICAgICAgICAvLyDop5LluqbpgJ/luqZcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5taW5Bbmd1bGFyU3BlZWQgPSAwO1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEFuZ3VsYXJTcGVlZCA9IE1hdGguUEk7XG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0ubWluSW5pdGlhbFJvdGF0aW9uID0gMDtcbiAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5tYXhJbml0aWFsUm90YXRpb24gPSBNYXRoLlBJO1xuICAgICAgICAgIC8vIEVtaXNzaW9uIHJhdGUvLyDorr7nva7nspLlrZDnmoTliJ3lp4vpgJ/luqZcbiAgICAgICAgIC8vIOemgeeUqOmAn+W6puWxnuaAp1xuICAgICAgICAgIC8vIHBhcnRpY2xlU3lzdGVtLm1hbnVhbEVtaXRDb3VudCA9IHBhcnRpY2xlU3lzdGVtLmdldENhcGFjaXR5KCk7IC8vIOemgeeUqOiHquWKqOWPkeWwhFxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1pbkVtaXRQb3dlciA9IDA7IC8vIOacgOWwj+WPkeWwhOmAn+W6plxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLm1heEVtaXRQb3dlciA9IDA7IC8vIOacgOWkp+WPkeWwhOmAn+W6plxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmVtaXRSYXRlID0gMTUwMDtcbiAgICAgICAgICAvLyBTcGVlZFxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZVNwZWVkID0gMC4wMTtcbiAgICAgICAgICAvLyBCbGVuZCBtb2RlIDogQkxFTkRNT0RFX09ORU9ORSwgb3IgQkxFTkRNT0RFX1NUQU5EQVJEXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uYmxlbmRNb2RlID0gQkFCWUxPTi5QYXJ0aWNsZVN5c3RlbS5CTEVORE1PREVfT05FT05FO1xuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmRpcmVjdGlvbjEgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsMCwwKVxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmRpcmVjdGlvbjIgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsMCwwKVxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnN0YXJ0KCk7XG4gICAgICAgICAgLy8g6K6+572u57KS5a2Q5Y+R5bCE5Zmo5Li655CD5b2i5Y+R5bCE5ZmoXG4gICAgICAgICAgbGV0IHNwaGVyZUVtaXR0ZXIgPSBwYXJ0aWNsZVN5c3RlbS5jcmVhdGVTcGhlcmVFbWl0dGVyKCk7XG4gICAgICAgICAgc3BoZXJlRW1pdHRlci5yYWRpdXMgPSAyOyAvLyDnkIPkvZPljYrlvoRcbiAgICAgICAgICAvLyBzcGhlcmVFbWl0dGVyLnN0YXJ0UG9zaXRpb25GdW5jdGlvbiA9ICh3b3JsZE1hdHJpeDogQkFCWUxPTi5NYXRyaXgsIHBvc2l0aW9uVG9VcGRhdGU6IEJBQllMT04uVmVjdG9yMywgcGFydGljbGU6IEJBQllMT04uUGFydGljbGUsIGlzTG9jYWw6IGJvb2xlYW4pPT57XG4gICAgICAgICAgLy8gICBsZXQgc3BoZXJlUmFkaXVzID0gc3BoZXJlLmdldEJvdW5kaW5nSW5mbygpPy5ib3VuZGluZ1NwaGVyZT8ucmFkaXVzV29ybGRcbiAgICAgICAgICAvLyAgIHBhcnRpY2xlLnBvc2l0aW9uID0gcGFydGljbGUucG9zaXRpb24ubm9ybWFsaXplKCkuc2NhbGUoc3BoZXJlUmFkaXVzKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgc3BoZXJlRW1pdHRlci5yYWRpdXNSYW5nZSA9IDA7IC8vIOW8gOWni+WPkeWwhOWNiuW+hOiMg+WbtCAwIOWPquWcqOihqOmdolxuICAgICAgICAgIHNwaGVyZUVtaXR0ZXIuZGlyZWN0aW9uUmFuZG9taXplciA9IDA7IC8vIOW8gOWni+WPkeWwhOaWueWQkemaj+acuuaAp1xuXG4gICAgICAgICAgLy8g6K6+572u57KS5a2Q5pWI5p6cXG4gICAgICAgICAgcGFydGljbGVTeXN0ZW0uZ3Jhdml0eSA9IG5ldyBCQUJZTE9OLlZlY3RvcjMoMCwgMCwgMCk7IC8vIOWFs+mXremHjeWKm1xuICAgICAgICAgIC8vIOiuvue9rueykuWtkOezu+e7n+WBnOatouWQjueri+WNs+mUgOavgeeykuWtkFxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLmRpc3Bvc2VPblN0b3AgPSB0cnVlO1xuICAgICAgICAgIC8vIOS/ruaUueeykuWtkOabtOaWsOWHveaVsO+8jOWwhueykuWtkOmZkOWItuWcqOeQg+S9k+ihqOmdolxuICAgICAgICAgIHBhcnRpY2xlU3lzdGVtLnVwZGF0ZUZ1bmN0aW9uID0gKHBhcnRpY2xlcykgPT57XG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGFydGljbGVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0aWNsZSA9IHBhcnRpY2xlc1tpbmRleF07XG5cbiAgICAgICAgICAvLyAgICAgICAvLyDlsIbnspLlrZDkvY3nva7pmZDliLblnKjnkIPkvZPooajpnaJcbiAgICAgICAgICAgICAgICBsZXQgc3BoZXJlUmFkaXVzID0gc3BoZXJlLmdldEJvdW5kaW5nSW5mbygpPy5ib3VuZGluZ1NwaGVyZT8ucmFkaXVzV29ybGRcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS5wb3NpdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLm5vcm1hbGl6ZSgpLnNjYWxlKHNwaGVyZVJhZGl1cyk7XG4gICAgICAgICAgLy8gICAgICAgcGFydGljbGUuc2NhbGUgPSBuZXcgQkFCWUxPTi5WZWN0b3IyKDAuMiwwLjIpXG5cbiAgICAgICAgICAgICAgcGFydGljbGUuYWdlICs9IHRoaXMuc2NlbmUuZ2V0RW5naW5lKCkuZ2V0RGVsdGFUaW1lKCkvMTAwMDtcbiAgICAgICAgICAgIC8vIOajgOafpeeykuWtkOaYr+WQpui+vuWIsOacgOWkp+eUn+WRveWRqOacn++8jOWmguaenOaYr+WImeS9v+WFtua2iOWksVxuICAgICAgICAgICAgaWYgKHBhcnRpY2xlLmFnZSA+PSBwYXJ0aWNsZS5saWZlVGltZSkge1xuICAgICAgICAgICAgICBwYXJ0aWNsZVN5c3RlbS5yZWN5Y2xlUGFydGljbGUocGFydGljbGUpO1xuICAgICAgICAgICAgICBpbmRleC0tOyAvLyDmm7TmlrDntKLlvJXku6Xpgb/lhY3ot7Pov4fkuIvkuIDkuKrnspLlrZBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAvLyAgICAgICAvLyDlnKjkuIDlrprml7bpl7TlkI7kvb/nspLlrZDmtojlpLFcbiAgICAgICAgICAvLyAgICAgICBpZiAocGFydGljbGUuYWdlID4gMC4xOSkge1xuICAgICAgICAgIC8vICAgICAgICAgcGFydGljbGUubGlmZVRpbWUgPSAwXG4gICAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgLy8g5Yqo55S75b6q546vXG4gICAgICAgIHRoaXMuZW5naW5lLnJ1blJlbmRlckxvb3AoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zY2VuZS5yZW5kZXIoKTtcbiAgICAgICAgICAgIC8vIOabtOaWsOeykuWtkOeahOS9jee9ruWSjOe8qeaUvlxuICAgICAgICAgICAgcGFydGljbGVTeXN0ZW0ud29ybGRPZmZzZXQgPSBzcGhlcmUucG9zaXRpb247XG4gICAgICAgICAgICAvLyBwYXJ0aWNsZS5wb3NpdGlvbiA9IHBhcnRpY2xlLnBvc2l0aW9uLm5vcm1hbGl6ZSgpLnNjYWxlKHNwaGVyZUVtaXR0ZXIucmFkaXVzKTtcbiAgICAgICAgICB9KTtcbiAgfVxuXG4gIHNldENhbWVyYVRvTWVzaENlbnRlcihjYW1lcmE6QkFCWUxPTi5BcmNSb3RhdGVDYW1lcmF8dW5kZWZpbmVkLG1lc2g6QkFCWUxPTi5BYnN0cmFjdE1lc2gpe1xuICAgIC8vIOiOt+WPlue9keagvOS9k+eahOi+ueeVjOS/oeaBr1xuICAgIG1lc2guY29tcHV0ZVdvcmxkTWF0cml4KHRydWUpO1xuICAgIGxldCBib3VuZGluZ0luZm8gPSBtZXNoLmdldEJvdW5kaW5nSW5mbygpO1xuXG4gICAgLy8g6I635Y+W6L6555WM5qGG55qE5pyA5bCP54K55ZKM5pyA5aSn54K5XG4gICAgbGV0IG1pbmltdW0gPSBib3VuZGluZ0luZm8ubWluaW11bTtcbiAgICBsZXQgbWF4aW11bSA9IGJvdW5kaW5nSW5mby5tYXhpbXVtO1xuXG4gICAgLy8g6K6h566X572R5qC85L2T55qE6ZW/5a696auYXG4gICAgbGV0IHdpZHRoID0gbWF4aW11bS54IC0gbWluaW11bS54O1xuICAgIGxldCBoZWlnaHQgPSBtYXhpbXVtLnkgLSBtaW5pbXVtLnk7XG4gICAgbGV0IGRlcHRoID0gbWF4aW11bS56IC0gbWluaW11bS56O1xuICAgIGxldCBjZW50ZXIgPSBib3VuZGluZ0luZm8uYm91bmRpbmdCb3guY2VudGVyO1xuICAgIGNvbnNvbGUubG9nKFwi5a695bqm77yaXCIgKyB3aWR0aCk7XG4gICAgY29uc29sZS5sb2coXCLpq5jluqbvvJpcIiArIGhlaWdodCk7XG4gICAgY29uc29sZS5sb2coXCLmt7HluqbvvJpcIiArIGRlcHRoKTtcbiAgICBjb25zb2xlLmxvZyhcIuS4reW/g+eCue+8mlwiICsgY2VudGVyKTtcblxuICAgIC8vIGNhbWVyYT8uc2V0UG9zaXRpb24oY2VudGVyKVxuICB9XG59XG4iLCI8Y2FudmFzICNyZW5kZXJDYW52YXMgY2xhc3M9XCJyZW5kZXItY2FudmFzXCI+PC9jYW52YXM+Il19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXBhcnRpY2xlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUE7QUFDaEQsY0FBYyxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb21wLWF2YXRhci1wYXJ0aWNsZS5jb21wb25lbnRcIlxuZXhwb3J0ICogZnJvbSBcIi4vYXZhdGFyLnJvbGVcIlxuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1wb2ludHMuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2MvYXZhdGFyL2NvbXAtYXZhdGFyLXBhcnRpY2xlL3JvbGUtcG9pbnRzLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxvQkFBb0IsQ0FBQztBQUc1QixNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUFZLEtBQUssRUFBQyxNQUFNLEVBQUMsTUFBTTtRQUsvQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlDLG1CQUFjLEdBQTBCLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNuRixZQUFPLEdBQUc7WUFDTixJQUFJLEVBQUMsSUFBSTtTQUNaLENBQUE7UUFSRyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDN0IsQ0FBQztJQU9ELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBSTtRQUNULDBCQUEwQjtRQUMxQiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUNELFFBQVE7UUFDSixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUMvQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQSxDQUFDLGdCQUFnQjtRQUN0QyxLQUFLO1FBQ0wsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQyxTQUFTO1FBQ1QsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxPQUFPLE1BQU0sQ0FBQTtJQUNqQixDQUFDO0lBQ0QsWUFBWTtRQUNSLE9BQU87UUFDUCxJQUFJLFFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQ2hDLE1BQU0sRUFDTixTQUFTLEVBQ1QsRUFBRSxFQUNGLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQ3ZDLE9BQU8sQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQzVDLENBQUM7UUFFRixVQUFVO1FBQ1YsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxDQUFDO1lBQ1IsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU87U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLEtBQUssRUFBRSxHQUFHO1lBQ1YsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87U0FDNUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN0QixZQUFZO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3pFLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0ICogYXMgQkFCWUxPTiBmcm9tICdAYmFieWxvbmpzL2NvcmUnO1xuaW1wb3J0ICdAYmFieWxvbmpzL2xvYWRlcnMnO1xuaW1wb3J0IHsgQXZhdGFyUm9sZSB9IGZyb20gJy4vYXZhdGFyLnJvbGUnO1xuXG5leHBvcnQgY2xhc3MgUm9sZVBvaW50c0Nsb3VkIGltcGxlbWVudHMgQXZhdGFyUm9sZXtcbiAgICBzY2VuZTpCQUJZTE9OLlNjZW5lXG4gICAgZW5naW5lOkJBQllMT04uRW5naW5lXG4gICAgY29uc3RydWN0b3Ioc2NlbmUsZW5naW5lLGNhbWVyYSl7XG4gICAgICAgIHRoaXMuc2NlbmUgPSBzY2VuZVxuICAgICAgICB0aGlzLmVuZ2luZSA9IHRoaXMuZW5naW5lXG4gICAgfVxuICAgIE1lc2g6QkFCWUxPTi5NZXNoXG4gICAgb2Zmc2V0UG9zaXRpb24gPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDAsMS4yNSwwKVxuICAgIGFuaW1hdGlvbkdyb3VwOkJBQllMT04uQW5pbWF0aW9uR3JvdXAgPSBuZXcgQkFCWUxPTi5BbmltYXRpb25Hcm91cChcIlJvbGVBbmltR3JvdXBcIilcbiAgICBBbmltTWFwID0ge1xuICAgICAgICBpZGxlOm51bGxcbiAgICB9XG4gICAgYXN5bmMgaW5pdCgpe1xuICAgICAgICB0aGlzLk1lc2ggPSB0aGlzLmxvYWRNZXNoKCk7XG4gICAgICAgIHRoaXMubG9hZElkbGVBbmltKCk7XG4gICAgfVxuXG4gICAgcGxheUFuaW0oYW5pbSl7XG4gICAgICAgIC8vIHRoaXMuTWVzaC5hbmltYXRpb25zWzBdXG4gICAgICAgIC8vIHRoaXMuYW5pbWF0aW9uR3JvdXAuc3RhcnQodHJ1ZSwxLDAsMTIwLG51bGwpXG4gICAgICAgIHRoaXMuc2NlbmUuYmVnaW5EaXJlY3RBbmltYXRpb24odGhpcy5NZXNoLCBbdGhpcy5BbmltTWFwW2FuaW1dXSwgMCwgMTIwLCB0cnVlKTtcbiAgICB9XG4gICAgbG9hZE1lc2goKXtcbiAgICAgICAgbGV0IHNwaGVyZSA9IEJBQllMT04uTWVzaEJ1aWxkZXIuQ3JlYXRlU3BoZXJlKFwic3BoZXJlXCIsIHsgZGlhbWV0ZXI6IDIgfSwgdGhpcy5zY2VuZSk7XG4gICAgICAgIHNwaGVyZS5wb3NpdGlvbi5hZGRJblBsYWNlKHRoaXMub2Zmc2V0UG9zaXRpb24pXG4gICAgICAgIHNwaGVyZS52aXNpYmlsaXR5ID0gMSAvLyDkuI3lj6/op4HvvIzku4XnlKjkuo7nspLlrZDopobnm5bljaDkvY1cbiAgICAgICAgLy8g5p2Q6LSoXG4gICAgICAgIHNwaGVyZS5tYXRlcmlhbCA9IG5ldyBCQUJZTE9OLlN0YW5kYXJkTWF0ZXJpYWwoXCJtYXRcIiwgdGhpcy5zY2VuZSk7XG4gICAgICAgIHNwaGVyZS5tYXRlcmlhbC53aXJlZnJhbWUgPSB0cnVlO1xuICAgICAgICAvLyDorr7nva7liJ3lp4vnvKnmlL5cbiAgICAgICAgc3BoZXJlLnNjYWxpbmcgPSBuZXcgQkFCWUxPTi5WZWN0b3IzKDEsIDEsIDEpO1xuICAgICAgICByZXR1cm4gc3BoZXJlXG4gICAgfVxuICAgIGxvYWRJZGxlQW5pbSgpe1xuICAgICAgICAvLyDliJvlu7rliqjnlLtcbiAgICAgICAgbGV0IGlkbGVBbmltID0gbmV3IEJBQllMT04uQW5pbWF0aW9uKFxuICAgICAgICAgICAgXCJpZGxlXCIsXG4gICAgICAgICAgICBcInNjYWxpbmdcIixcbiAgICAgICAgICAgIDMwLFxuICAgICAgICAgICAgQkFCWUxPTi5BbmltYXRpb24uQU5JTUFUSU9OVFlQRV9WRUNUT1IzLFxuICAgICAgICAgICAgQkFCWUxPTi5BbmltYXRpb24uQU5JTUFUSU9OTE9PUE1PREVfQ1lDTEVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIOWumuS5ieWKqOeUu+WFs+mUruW4p1xuICAgICAgICBsZXQga2V5cyA9IFtdO1xuICAgICAgICBrZXlzLnB1c2goe1xuICAgICAgICAgICAgZnJhbWU6IDAsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEJBQllMT04uVmVjdG9yMygxLDEsMSkgLy8g5Yid5aeL57yp5pS+XG4gICAgICAgIH0pO1xuICAgICAgICBrZXlzLnB1c2goe1xuICAgICAgICAgICAgZnJhbWU6IDYwLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBCQUJZTE9OLlZlY3RvcjMoMS41LDEuNSwxLjUpIC8vIOacgOWkp+e8qeaUvlxuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5wdXNoKHtcbiAgICAgICAgICAgIGZyYW1lOiAxMjAsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IEJBQllMT04uVmVjdG9yMygxLDEsMSkgLy8g5Yid5aeL57yp5pS+XG4gICAgICAgIH0pO1xuICAgICAgICBpZGxlQW5pbS5zZXRLZXlzKGtleXMpXG4gICAgICAgIC8vIOWwhuWFs+mUruW4p+a3u+WKoOWIsOWKqOeUu1xuICAgICAgICB0aGlzLk1lc2guYW5pbWF0aW9ucy5wdXNoKHRoaXMuQW5pbU1hcC5pZGxlKVxuICAgICAgICB0aGlzLkFuaW1NYXAuaWRsZSA9IGlkbGVBbmltXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uR3JvdXAuYWRkVGFyZ2V0ZWRBbmltYXRpb24odGhpcy5BbmltTWFwLmlkbGUsdGhpcy5NZXNoKVxuICAgIH1cbiAgICBcbn0iXX0=
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
+