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.
- package/LICENSE.md +8 -0
- package/esm2022/fmode-ng.mjs +10 -5
- package/esm2022/lib/aigc/agent/agent.prompt.mjs +10 -122
- package/esm2022/lib/aigc/agent/index.mjs +10 -2
- package/esm2022/lib/aigc/avatar/avatar.module.mjs +10 -45
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/avatar.role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.mjs +10 -315
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/index.mjs +10 -3
- package/esm2022/lib/aigc/avatar/comp-avatar-particle/role-points.class.mjs +10 -57
- package/esm2022/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.mjs +10 -97
- package/esm2022/lib/aigc/avatar/comp-avatar-role-video/comp-avatar-role-video.component.mjs +10 -104
- package/esm2022/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +10 -111
- package/esm2022/lib/aigc/avatar/index.mjs +10 -8
- package/esm2022/lib/aigc/avatar/interface-avatar-role.mjs +10 -2
- package/esm2022/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +8 -166
- package/esm2022/lib/aigc/chat/chat-header-area/comp-header-area.component.mjs +10 -36
- package/esm2022/lib/aigc/chat/chat-header-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-list/chat-list.component.mjs +8 -141
- package/esm2022/lib/aigc/chat/chat-list/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-area/comp-message-area.component.mjs +10 -40
- package/esm2022/lib/aigc/chat/chat-message-area/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-message-card/comp-message-card.component.mjs +10 -92
- package/esm2022/lib/aigc/chat/chat-message-card/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component.mjs +8 -207
- package/esm2022/lib/aigc/chat/chat-modal-input/modal-input.component.mjs +10 -236
- package/esm2022/lib/aigc/chat/chat-panel/chat-panel.component.mjs +10 -137
- package/esm2022/lib/aigc/chat/comp-role-prompt/comp-role-prompt.component.mjs +10 -69
- package/esm2022/lib/aigc/chat/comp-role-prompt/index.mjs +10 -2
- package/esm2022/lib/aigc/chat/index.mjs +10 -8
- package/esm2022/lib/aigc/comp-markdown-preview/clipboard.service.mjs +10 -82
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-parse.mjs +8 -269
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.component.mjs +10 -51
- package/esm2022/lib/aigc/comp-markdown-preview/markdown-preview.module.mjs +10 -24
- package/esm2022/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.mjs +10 -94
- package/esm2022/lib/aigc/index.mjs +10 -13
- package/esm2022/lib/aigc/service-fmai/fmai.service.mjs +10 -21
- package/esm2022/lib/aigc/service-fmai/service-chat/chat-class.mjs +8 -736
- package/esm2022/lib/aigc/service-fmai/service-chat/chat.service.mjs +8 -181
- package/esm2022/lib/aigc/service-fmai/service-chat/index.mjs +10 -7
- package/esm2022/lib/aigc/service-fmai/service-chat/mask-list.mjs +9 -194
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.mjs +10 -27
- package/esm2022/lib/aigc/service-fmai/service-chat/utilnow.pipe.mjs +10 -68
- package/esm2022/lib/aigc/service-fmai/service-imagine/imagine.service.mjs +8 -229
- package/esm2022/lib/aigc/service-fmai/service-imagine/index.mjs +10 -2
- package/esm2022/lib/aigc/voice/audio.player.mjs +10 -52
- package/esm2022/lib/aigc/voice/class-asr.mjs +8 -79
- package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +8 -501
- package/esm2022/lib/aigc/voice/index.mjs +10 -3
- package/esm2022/lib/aigc/voice/lib/pcm2wav.mjs +10 -38
- package/esm2022/lib/aigc/voice/lib/resample.mjs +10 -34
- package/esm2022/lib/aigc/voice/stream.player.mjs +10 -0
- package/esm2022/lib/aigc/voice/tts/fmode-tts-class.mjs +8 -233
- package/esm2022/lib/aigc/voice/tts/index.mjs +10 -2
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.component.mjs +10 -190
- package/esm2022/lib/map/comp-poi-picker/comp-poi-picker.module.mjs +10 -33
- package/esm2022/lib/map/index.mjs +10 -4
- package/esm2022/lib/map/map.module.mjs +10 -61
- package/esm2022/lib/map/page-loca-scatter/page-loca-scatter.component.mjs +10 -110
- package/esm2022/lib/map/page-map.start/page-map.start.component.mjs +8 -98
- package/esm2022/lib/map/page-plan-route/page-plan-route.component.mjs +8 -100
- package/esm2022/lib/nova-cloud/index.mjs +10 -2
- package/esm2022/lib/nova-cloud/nova-cloud.service.mjs +10 -148
- package/esm2022/lib/platform/cross.service.mjs +10 -63
- package/esm2022/lib/platform/index.mjs +10 -2
- package/esm2022/lib/social/index.mjs +10 -2
- package/esm2022/lib/social/wechat/wechat-jssdk.service.mjs +8 -236
- package/esm2022/lib/storage/comp-hwobs-manager/hwobs-manager.component.mjs +10 -59
- package/esm2022/lib/storage/index.mjs +10 -5
- package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +8 -130
- package/esm2022/lib/storage/service-upload/index.mjs +10 -2
- package/esm2022/lib/storage/service-upload/nova-upload.service.mjs +8 -462
- package/esm2022/lib/storage/service-upload/util-file-md5.mjs +10 -28
- package/esm2022/lib/storage/storage.module.mjs +10 -41
- package/esm2022/lib/user/account/account.service.mjs +10 -221
- package/esm2022/lib/user/captcha/captcha.component.mjs +10 -135
- package/esm2022/lib/user/comp-user-avatar/comp-user-avatar.component.mjs +10 -62
- package/esm2022/lib/user/index.mjs +10 -17
- package/esm2022/lib/user/login/auth.guard.mjs +10 -28
- package/esm2022/lib/user/login/auth.service.mjs +8 -373
- package/esm2022/lib/user/login/login.component.mjs +10 -913
- package/esm2022/lib/user/modal-user-login/modal-user-login.component.mjs +10 -273
- package/esm2022/lib/user/profile/auth-profile.guard.mjs +10 -27
- package/esm2022/lib/user/profile/auth-profile.service.mjs +10 -122
- package/esm2022/lib/user/profile/profile-bind/profile-bind.component.mjs +10 -115
- package/esm2022/lib/user/profile/profile.module.mjs +10 -57
- package/esm2022/lib/user/staff/index.mjs +10 -4
- package/esm2022/lib/user/staff/staff.guard.mjs +10 -26
- package/esm2022/lib/user/staff/staff.module.mjs +10 -18
- package/esm2022/lib/user/staff/staff.service.mjs +10 -85
- package/esm2022/lib/user/user-name.pipe.mjs +10 -29
- package/esm2022/lib/user/user.module.mjs +10 -106
- package/esm2022/lib/video/fm-video/fm-video.component.mjs +10 -67
- package/esm2022/lib/video/index.mjs +10 -2
- package/esm2022/public-api.mjs +10 -13
- package/fesm2022/fmode-ng.mjs +7 -8895
- package/fesm2022/fmode-ng.mjs.map +1 -1
- package/lib/aigc/voice/fmode-voice.service.d.ts +18 -1
- package/lib/aigc/voice/stream.player.d.ts +10 -0
- package/lib/aigc/voice/tts/fmode-tts-class.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,315 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
+
|