@memori.ai/memori-react 7.19.2 → 7.21.1
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/CHANGELOG.md +52 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +3 -2
- package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js +13 -6
- package/dist/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +14 -18
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +19 -77
- package/dist/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +17 -2
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +95 -70
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.d.ts +65 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js +747 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js.map +1 -0
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.d.ts +9 -2
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +60 -2
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +5 -11
- package/dist/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +13 -52
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js +68 -70
- package/dist/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/dist/components/Avatar/AvatarView/index.d.ts +1 -1
- package/dist/components/Avatar/AvatarView/index.js +2 -2
- package/dist/components/Avatar/AvatarView/index.js.map +1 -1
- package/dist/components/ChatBubble/ChatBubble.css +9 -0
- package/dist/components/ChatBubble/ChatBubble.js +7 -1
- package/dist/components/ChatBubble/ChatBubble.js.map +1 -1
- package/dist/components/MemoriWidget/MemoriWidget.js +130 -62
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/UploadButton/UploadButton.js +2 -2
- package/dist/components/UploadButton/UploadButton.js.map +1 -1
- package/dist/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
- package/dist/components/WhyThisAnswer/WhyThisAnswer.js +2 -1
- package/dist/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
- package/dist/context/visemeContext.js +0 -39
- package/dist/context/visemeContext.js.map +1 -1
- package/dist/locales/de.json +1 -0
- package/dist/locales/en.json +1 -0
- package/dist/locales/es.json +1 -0
- package/dist/locales/fr.json +1 -0
- package/dist/locales/it.json +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.d.ts +3 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js +13 -6
- package/esm/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.d.ts +14 -18
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js +20 -78
- package/esm/components/Avatar/AvatarView/AvatarComponent/avatarComponent.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.d.ts +17 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js +99 -74
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.d.ts +65 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js +743 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.js.map +1 -0
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.d.ts +9 -2
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js +61 -3
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.d.ts +3 -4
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js +5 -11
- package/esm/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.d.ts +13 -52
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js +67 -69
- package/esm/components/Avatar/AvatarView/AvatarComponent/constants.js.map +1 -1
- package/esm/components/Avatar/AvatarView/index.d.ts +1 -1
- package/esm/components/Avatar/AvatarView/index.js +2 -2
- package/esm/components/Avatar/AvatarView/index.js.map +1 -1
- package/esm/components/ChatBubble/ChatBubble.css +9 -0
- package/esm/components/ChatBubble/ChatBubble.js +7 -1
- package/esm/components/ChatBubble/ChatBubble.js.map +1 -1
- package/esm/components/MemoriWidget/MemoriWidget.js +130 -62
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/UploadButton/UploadButton.js +2 -2
- package/esm/components/UploadButton/UploadButton.js.map +1 -1
- package/esm/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
- package/esm/components/WhyThisAnswer/WhyThisAnswer.js +2 -1
- package/esm/components/WhyThisAnswer/WhyThisAnswer.js.map +1 -1
- package/esm/context/visemeContext.js +0 -39
- package/esm/context/visemeContext.js.map +1 -1
- package/esm/locales/de.json +1 -0
- package/esm/locales/en.json +1 -0
- package/esm/locales/es.json +1 -0
- package/esm/locales/fr.json +1 -0
- package/esm/locales/it.json +1 -0
- package/package.json +2 -2
- package/src/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.tsx +15 -8
- package/src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx +64 -219
- package/src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx +221 -124
- package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/AvatarAnimator.ts +1250 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/MorphTargetController.ts +164 -8
- package/src/components/Avatar/AvatarView/AvatarComponent/components/halfbodyAvatar.tsx +19 -17
- package/src/components/Avatar/AvatarView/AvatarComponent/constants.ts +80 -79
- package/src/components/Avatar/AvatarView/index.tsx +1 -7
- package/src/components/ChatBubble/ChatBubble.css +9 -0
- package/src/components/ChatBubble/ChatBubble.tsx +14 -2
- package/src/components/MemoriWidget/MemoriWidget.tsx +168 -76
- package/src/components/UploadButton/UploadButton.tsx +4 -4
- package/src/components/UploadButton/__snapshots__/UploadButton.test.tsx.snap +1 -1
- package/src/components/WhyThisAnswer/WhyThisAnswer.css +43 -0
- package/src/components/WhyThisAnswer/WhyThisAnswer.stories.tsx +44 -3
- package/src/components/WhyThisAnswer/WhyThisAnswer.test.tsx +128 -8
- package/src/components/WhyThisAnswer/WhyThisAnswer.tsx +28 -3
- package/src/components/WhyThisAnswer/__snapshots__/WhyThisAnswer.test.tsx.snap +15 -1
- package/src/components/layouts/layouts.stories.tsx +0 -8
- package/src/context/visemeContext.tsx +40 -41
- package/src/index.stories.tsx +63 -65
- package/src/locales/de.json +1 -0
- package/src/locales/en.json +1 -0
- package/src/locales/es.json +1 -0
- package/src/locales/fr.json +1 -0
- package/src/locales/it.json +1 -0
- package/src/components/Avatar/AvatarView/AvatarComponent/components/controllers/AnimationController.ts +0 -308
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
## [7.21.1](https://github.com/memori-ai/memori-react/compare/v7.21.0...v7.21.1) (2025-03-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* chat bubble headings color inherit ([4b342df](https://github.com/memori-ai/memori-react/commit/4b342df452a66422d7d6d8b5118895a907b98f1b))
|
|
9
|
+
|
|
10
|
+
## [7.21.0](https://github.com/memori-ai/memori-react/compare/v7.19.2...v7.21.0) (2025-03-17)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* added AnimationLoader for flexible avatar animation management ([d0837a1](https://github.com/memori-ai/memori-react/commit/d0837a1d2e94a6ae898a12ed86258fb844425919))
|
|
16
|
+
* added AnimationParser for advanced avatar animation parsing ([f66daf2](https://github.com/memori-ai/memori-react/commit/f66daf20f7d2de994a240b91f8b31188b2b73e5d))
|
|
17
|
+
* create AnimationRegistry for centralized avatar animation management ([0c735ef](https://github.com/memori-ai/memori-react/commit/0c735ef87e00bfd57efcdce20a99017e2992faa5))
|
|
18
|
+
* enhance WhyThisAnswer component with receiver details and context variables ([5251cb1](https://github.com/memori-ai/memori-react/commit/5251cb195f2cbe8da6a8867ed13abb2843a25dba))
|
|
19
|
+
* implement AnimationStateMachine for advanced avatar animation control ([1aefb00](https://github.com/memori-ai/memori-react/commit/1aefb00129bc6c5bce01308c71bca56f3a8ab285))
|
|
20
|
+
* implement AvatarAnimator as comprehensive animation management system ([3049ef7](https://github.com/memori-ai/memori-react/commit/3049ef77125a1b5986b00029f8a3366594e1984e))
|
|
21
|
+
* improve RPM avatar detection and animation merging logic ([1e86edb](https://github.com/memori-ai/memori-react/commit/1e86edb8c294d3a59e4223a3a654077fc3de5f95))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* improve AvatarAnimator idle and animation transition logic ([ee797aa](https://github.com/memori-ai/memori-react/commit/ee797aa51a6fc0b452ef518d2afeccaa71fb7776))
|
|
27
|
+
* improve receiver display logic and ensure context variables are handled correctly ([6ce1227](https://github.com/memori-ai/memori-react/commit/6ce12273974eaeeb0618769e50e4726c24cc95e3))
|
|
28
|
+
* improve speech-to-text processing state management ([cfe9f4a](https://github.com/memori-ai/memori-react/commit/cfe9f4a18fc3dd43ba80b397d7c4965c37164b63))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
### Changes
|
|
32
|
+
|
|
33
|
+
* adjust emotion amplification and remove debug logging in MorphTargetController ([4af0a70](https://github.com/memori-ai/memori-react/commit/4af0a70ba23bc4b4dfc204008ffb4c0bdee82692))
|
|
34
|
+
* enhance AvatarAnimator with advanced animation management ([3cda44c](https://github.com/memori-ai/memori-react/commit/3cda44c679390fd5fe71befc18af571358a81bcd))
|
|
35
|
+
* enhance AvatarAnimator with advanced emotion and sequence handling ([f1e8f63](https://github.com/memori-ai/memori-react/commit/f1e8f630c324cbf2e41583da15c10fdd14a795c0))
|
|
36
|
+
* enhance MorphTargetController with dynamic emotion processing ([2fd8c2e](https://github.com/memori-ai/memori-react/commit/2fd8c2e34acfed487ffe0c1bdcd14c8a50049d35))
|
|
37
|
+
* enhance speech processing with robust message handling ([1a1370f](https://github.com/memori-ai/memori-react/commit/1a1370f2c600223aa6911b27e72dc5a389939b1b))
|
|
38
|
+
* improve emotion mapping and processing in MorphTargetController ([4a49461](https://github.com/memori-ai/memori-react/commit/4a49461985217f382d355883f9d52f7d15f7414d))
|
|
39
|
+
* improve speech recognition ([c6d1a1c](https://github.com/memori-ai/memori-react/commit/c6d1a1ca39e42e8c6636aeb4d00772946a8463e6))
|
|
40
|
+
* optimize AvatarAnimator with advanced transition and sequence handling ([1f67479](https://github.com/memori-ai/memori-react/commit/1f674795dcb85f5a14d419426f324ac2f70e615d))
|
|
41
|
+
* simplify AvatarView component and remove unused animation-related props ([d84dbc0](https://github.com/memori-ai/memori-react/commit/d84dbc0e3c19a19c2bbcbfbab3d647998c658e34))
|
|
42
|
+
* simplify DynamicShadow component with AvatarAnimator integration ([71c0991](https://github.com/memori-ai/memori-react/commit/71c09917b11baa96a252ff75882be3785f266f30))
|
|
43
|
+
* streamline HalfBodyAvatar component with simplified morph target and chat handling ([8d68795](https://github.com/memori-ai/memori-react/commit/8d687959c52056a4e01f3aa74e025a7567424405))
|
|
44
|
+
* upload button accepts pdf, txt and json ([36d8c65](https://github.com/memori-ai/memori-react/commit/36d8c65d9a7ace9399527b93cc36089c28a709d8))
|
|
45
|
+
* why this answer i18n, ui and styles ([18292dc](https://github.com/memori-ai/memori-react/commit/18292dce56d9609ae56525a50f44503c762abeda))
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
### Maintenance
|
|
49
|
+
|
|
50
|
+
* generated by ai label in chat with fallback ([f28199b](https://github.com/memori-ai/memori-react/commit/f28199be65f9ea010ef6c9b3c6bc6eb5700fb669))
|
|
51
|
+
* update api client ([8ab1bfd](https://github.com/memori-ai/memori-react/commit/8ab1bfd9cee3d486155bb053226666621e0aa295))
|
|
52
|
+
* update Storybook stories with new avatar configurations and layouts ([749c57a](https://github.com/memori-ai/memori-react/commit/749c57a3cae69edadf032240a5d7b3fd36afe213))
|
|
53
|
+
* update Storybook stories with test scenarios for RPM avatar animations and layouts ([b61a063](https://github.com/memori-ai/memori-react/commit/b61a063f6607d1216fcd7e967e60149f888ba51f))
|
|
54
|
+
|
|
3
55
|
## [7.19.2](https://github.com/memori-ai/memori-react/compare/v7.19.1...v7.19.2) (2025-03-07)
|
|
4
56
|
|
|
5
57
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { AvatarAnimator } from '../components/controllers/AvatarAnimator';
|
|
2
|
+
declare const DynamicShadow: ({ animator, avatarPosition, }: {
|
|
3
|
+
animator: AvatarAnimator | null;
|
|
3
4
|
avatarPosition: any;
|
|
4
5
|
}) => JSX.Element;
|
|
5
6
|
export default DynamicShadow;
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
4
|
const drei_1 = require("@react-three/drei");
|
|
5
|
-
const DynamicShadow = ({
|
|
5
|
+
const DynamicShadow = ({ animator, avatarPosition, }) => {
|
|
6
6
|
const getShadowProps = () => {
|
|
7
|
+
var _a, _b, _c, _d, _e;
|
|
7
8
|
const baseProps = {
|
|
8
9
|
width: 10,
|
|
9
10
|
height: 10,
|
|
@@ -13,7 +14,13 @@ const DynamicShadow = ({ currentBaseAction, avatarPosition, }) => {
|
|
|
13
14
|
resolution: 1024,
|
|
14
15
|
color: '#000000',
|
|
15
16
|
};
|
|
16
|
-
if (
|
|
17
|
+
if (!animator) {
|
|
18
|
+
return {
|
|
19
|
+
...baseProps,
|
|
20
|
+
opacity: 0,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if ((_a = animator.getCurrentAnimationName()) === null || _a === void 0 ? void 0 : _a.startsWith('Loading')) {
|
|
17
24
|
return {
|
|
18
25
|
...baseProps,
|
|
19
26
|
opacity: 0.85,
|
|
@@ -22,8 +29,8 @@ const DynamicShadow = ({ currentBaseAction, avatarPosition, }) => {
|
|
|
22
29
|
height: 12,
|
|
23
30
|
};
|
|
24
31
|
}
|
|
25
|
-
else if (
|
|
26
|
-
|
|
32
|
+
else if (((_b = animator.getCurrentAnimationName()) === null || _b === void 0 ? void 0 : _b.includes('Gioia')) ||
|
|
33
|
+
((_c = animator.getCurrentAnimationName()) === null || _c === void 0 ? void 0 : _c.includes('Joy'))) {
|
|
27
34
|
return {
|
|
28
35
|
...baseProps,
|
|
29
36
|
opacity: 0.9,
|
|
@@ -32,8 +39,8 @@ const DynamicShadow = ({ currentBaseAction, avatarPosition, }) => {
|
|
|
32
39
|
height: 11,
|
|
33
40
|
};
|
|
34
41
|
}
|
|
35
|
-
else if (
|
|
36
|
-
|
|
42
|
+
else if (((_d = animator.getCurrentAnimationName()) === null || _d === void 0 ? void 0 : _d.includes('Rabbia')) ||
|
|
43
|
+
((_e = animator.getCurrentAnimationName()) === null || _e === void 0 ? void 0 : _e.includes('Anger'))) {
|
|
37
44
|
return {
|
|
38
45
|
...baseProps,
|
|
39
46
|
opacity: 0.95,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicShadow.js","sourceRoot":"","sources":["../../../../../../src/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.tsx"],"names":[],"mappings":";;;AAEA,4CAAsE;
|
|
1
|
+
{"version":3,"file":"DynamicShadow.js","sourceRoot":"","sources":["../../../../../../src/components/Avatar/AvatarView/AvatarComponent/Shadow/DynamicShadow.tsx"],"names":[],"mappings":";;;AAEA,4CAAsE;AAGtE,MAAM,aAAa,GAAG,CAAC,EACrB,QAAQ,EACR,cAAc,GAIf,EAAE,EAAE;IAEH,MAAM,cAAc,GAAG,GAAG,EAAE;;QAC1B,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,CAAC;YACN,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO;gBACL,GAAG,SAAS;gBACZ,OAAO,EAAE,CAAC;aACX,CAAC;SACH;QAED,IAAI,MAAA,QAAQ,CAAC,uBAAuB,EAAE,0CAAE,UAAU,CAAC,SAAS,CAAC,EAAE;YAC7D,OAAO;gBACL,GAAG,SAAS;gBACZ,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;aACX,CAAC;SACH;aAAM,IACL,CAAA,MAAA,QAAQ,CAAC,uBAAuB,EAAE,0CAAE,QAAQ,CAAC,OAAO,CAAC;aACrD,MAAA,QAAQ,CAAC,uBAAuB,EAAE,0CAAE,QAAQ,CAAC,KAAK,CAAC,CAAA,EACnD;YACA,OAAO;gBACL,GAAG,SAAS;gBACZ,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;aACX,CAAC;SACH;aAAM,IACL,CAAA,MAAA,QAAQ,CAAC,uBAAuB,EAAE,0CAAE,QAAQ,CAAC,QAAQ,CAAC;aACtD,MAAA,QAAQ,CAAC,uBAAuB,EAAE,0CAAE,QAAQ,CAAC,OAAO,CAAC,CAAA,EACrD;YACA,OAAO;gBACL,GAAG,SAAS;gBACZ,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,EAAE;aACX,CAAC;SACH;QAGD,OAAO;YACL,GAAG,SAAS;YACZ,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,GAAG;SACV,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,CACL,6DAEE,uBAAC,qBAAc,IACb,OAAO,EAAE,WAAW,CAAC,OAAO,EAC5B,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,IAAI,EAAE,WAAW,CAAC,IAAI,EACtB,GAAG,EAAE,WAAW,CAAC,GAAG,EACpB,UAAU,EAAE,WAAW,CAAC,UAAU,EAClC,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,MAAM,EAAE,QAAQ,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAClC,EAGF,uBAAC,qBAAc,IACZ,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,CAAC,EACP,GAAG,EAAE,CAAC,EACN,UAAU,EAAE,IAAI,EAChB,KAAK,EAAC,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GACvB,IACD,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,kBAAe,aAAa,CAAC"}
|
|
@@ -1,26 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
interface
|
|
3
|
-
|
|
4
|
-
animation?: string;
|
|
5
|
-
loading: boolean;
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
interface AvatarViewProps {
|
|
3
|
+
chatEmission: string | null | undefined;
|
|
6
4
|
url: string;
|
|
7
5
|
sex: 'MALE' | 'FEMALE';
|
|
8
6
|
eyeBlink: boolean;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
avatarHeight?: number;
|
|
14
|
-
avatarDepth?: number;
|
|
15
|
-
stopProcessing: () => void;
|
|
16
|
-
resetVisemeQueue: () => void;
|
|
7
|
+
halfBody: boolean;
|
|
8
|
+
loading: boolean;
|
|
9
|
+
avatarHeight: number;
|
|
10
|
+
avatarDepth: number;
|
|
17
11
|
updateCurrentViseme: (currentTime: number) => {
|
|
18
12
|
name: string;
|
|
19
13
|
weight: number;
|
|
20
14
|
} | null;
|
|
21
|
-
setCameraZ: (
|
|
15
|
+
setCameraZ: (cameraZ: number) => void;
|
|
16
|
+
headMovement: boolean;
|
|
17
|
+
speaking: boolean;
|
|
18
|
+
showControls: boolean;
|
|
22
19
|
}
|
|
23
|
-
export declare const AvatarView:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export {};
|
|
20
|
+
export declare const AvatarView: ({ chatEmission, url, sex, eyeBlink, halfBody, loading, avatarHeight, avatarDepth, updateCurrentViseme, setCameraZ, headMovement, showControls, }: AvatarViewProps) => JSX.Element;
|
|
21
|
+
declare const _default: import("react").MemoExoticComponent<({ chatEmission, url, sex, eyeBlink, halfBody, loading, avatarHeight, avatarDepth, updateCurrentViseme, setCameraZ, headMovement, showControls, }: AvatarViewProps) => JSX.Element>;
|
|
22
|
+
export default _default;
|
|
@@ -4,96 +4,38 @@ exports.AvatarView = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const react_1 = require("react");
|
|
7
|
-
const controls_1 = tslib_1.__importDefault(require("./components/controls"));
|
|
8
7
|
const fullbodyAvatar_1 = require("./components/FullbodyAvatar/fullbodyAvatar");
|
|
9
8
|
const halfbodyAvatar_1 = tslib_1.__importDefault(require("./components/halfbodyAvatar"));
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const [emotionMorphTargets, setEmotionMorphTargets] = (0, react_1.useState)({});
|
|
19
|
-
const [isRPM, setIsRPM] = (0, react_1.useState)(false);
|
|
20
|
-
const [timeScale, setTimeScale] = (0, react_1.useState)(0.8);
|
|
21
|
-
const emotionMap = {
|
|
22
|
-
Joy: { Joy: 1 },
|
|
23
|
-
Anger: { Anger: 1 },
|
|
24
|
-
Surprise: { Surprise: 1 },
|
|
25
|
-
Sadness: { Sadness: 1 },
|
|
26
|
-
Fear: { Fear: 1 },
|
|
27
|
-
};
|
|
28
|
-
const getDefaultEmotions = () => Object.keys(emotionMap).reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
|
|
29
|
-
const handleRPMBlendShape = (0, react_1.useCallback)((outputContent) => constants_1.MAPPING_BLEND_SHAPE_TO_EMOTION_RPM[outputContent], []);
|
|
30
|
-
const handleCustomGLBBlendShape = (0, react_1.useCallback)((outputContent) => constants_1.MAPPING_BLEND_SHAPE_TO_EMOTION_CUSTOM_GLB[outputContent], []);
|
|
31
|
-
const setEmotionMorphTargetInfluences = (0, react_1.useCallback)((action, outputContent) => {
|
|
32
|
-
if (action.startsWith('Loading'))
|
|
33
|
-
return;
|
|
34
|
-
const defaultEmotions = getDefaultEmotions();
|
|
35
|
-
if (outputContent === 'default') {
|
|
36
|
-
setEmotionMorphTargets(defaultEmotions);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (isRPM) {
|
|
40
|
-
const emotion = handleRPMBlendShape(outputContent);
|
|
41
|
-
setEmotionMorphTargets(_ => ({ ...defaultEmotions, ...emotion }));
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
const emotion = handleCustomGLBBlendShape(outputContent);
|
|
45
|
-
const emotionValues = emotion === 'default' ? defaultEmotions : emotionMap[emotion];
|
|
46
|
-
setEmotionMorphTargets(_ => ({ ...defaultEmotions, ...emotionValues }));
|
|
9
|
+
const MemoizedFullbodyAvatar = (0, react_1.memo)(fullbodyAvatar_1.FullbodyAvatar);
|
|
10
|
+
const MemoizedHalfBodyAvatar = (0, react_1.memo)(halfbodyAvatar_1.default);
|
|
11
|
+
const AvatarView = ({ chatEmission, url, sex, eyeBlink, halfBody, loading, avatarHeight = 50, avatarDepth = -50, updateCurrentViseme, setCameraZ, headMovement, showControls, }) => {
|
|
12
|
+
const animatorRef = (0, react_1.useRef)(null);
|
|
13
|
+
const setAnimatorRef = (0, react_1.useCallback)((animator) => {
|
|
14
|
+
if (animator !== animatorRef.current) {
|
|
15
|
+
console.log('[AvatarView] Animator reference updated');
|
|
16
|
+
animatorRef.current = animator;
|
|
47
17
|
}
|
|
48
|
-
}, [isRPM, handleRPMBlendShape, handleCustomGLBBlendShape]);
|
|
49
|
-
const onBaseActionChange = (0, react_1.useCallback)((action, outputContent) => {
|
|
50
|
-
setEmotionMorphTargetInfluences(action, outputContent);
|
|
51
|
-
setCurrentBaseAction({ action, weight: 1 });
|
|
52
|
-
}, [setEmotionMorphTargetInfluences]);
|
|
53
|
-
const onMorphTargetInfluencesChange = (0, react_1.useCallback)((influences) => {
|
|
54
|
-
setMorphTargetInfluences(prev => ({ ...prev, ...influences }));
|
|
55
|
-
}, []);
|
|
56
|
-
const onMorphTargetDictionaryChange = (0, react_1.useCallback)((dictionary) => {
|
|
57
|
-
setMorphTargetDictionary(dictionary);
|
|
58
18
|
}, []);
|
|
59
19
|
(0, react_1.useEffect)(() => {
|
|
60
|
-
|
|
61
|
-
if (loading) {
|
|
62
|
-
const randomNumber = Math.floor(Math.random() * 3) + 1;
|
|
63
|
-
onBaseActionChange(`Loading${randomNumber}`, '');
|
|
20
|
+
if (!animatorRef.current)
|
|
64
21
|
return;
|
|
22
|
+
try {
|
|
23
|
+
animatorRef.current.processChatEmission(chatEmission, loading);
|
|
65
24
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
? (_b = (_a = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.split('<output class="memori-emotion">')[1]) === null || _a === void 0 ? void 0 : _a.split('</output>')[0]) === null || _b === void 0 ? void 0 : _b.trim()
|
|
69
|
-
: null;
|
|
70
|
-
const hasOutputTagSequence = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.includes('<output class="animation-sequence">');
|
|
71
|
-
const outputContentSequence = hasOutputTagSequence
|
|
72
|
-
? (_d = (_c = chatEmission === null || chatEmission === void 0 ? void 0 : chatEmission.split('<output class="animation-sequence">')[1]) === null || _c === void 0 ? void 0 : _c.split('</output>')[0]) === null || _d === void 0 ? void 0 : _d.trim()
|
|
73
|
-
: null;
|
|
74
|
-
if (outputContentSequence && outputContentSequence.includes('->')) {
|
|
75
|
-
onBaseActionChange(outputContentSequence, outputContentSequence);
|
|
76
|
-
}
|
|
77
|
-
else if (outputContentEmotion) {
|
|
78
|
-
console.log('[AvatarView] outputContentEmotion:', outputContentEmotion);
|
|
79
|
-
const randomNumber = Math.floor(Math.random() * 3) + 1;
|
|
80
|
-
onBaseActionChange(`${outputContentEmotion}${randomNumber}`, outputContentEmotion);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
const randomNumber = Math.floor(Math.random() * 5) + 1;
|
|
84
|
-
onBaseActionChange(`Idle${randomNumber === 3 ? 4 : randomNumber}`, '');
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('Error processing chat emission:', error);
|
|
85
27
|
}
|
|
86
|
-
}, [
|
|
87
|
-
const commonAvatarProps = {
|
|
28
|
+
}, [loading, chatEmission]);
|
|
29
|
+
const commonAvatarProps = (0, react_1.useCallback)(() => ({
|
|
88
30
|
url,
|
|
89
31
|
onCameraZChange: setCameraZ,
|
|
90
|
-
setMorphTargetInfluences,
|
|
91
|
-
setMorphTargetDictionary,
|
|
92
32
|
updateCurrentViseme,
|
|
93
33
|
avatarHeight,
|
|
94
34
|
avatarDepth,
|
|
95
|
-
|
|
96
|
-
|
|
35
|
+
setAnimatorRef,
|
|
36
|
+
}), [url, setCameraZ, updateCurrentViseme, avatarHeight, avatarDepth, setAnimatorRef]);
|
|
37
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [halfBody ? ((0, jsx_runtime_1.jsx)(MemoizedHalfBodyAvatar, { ...commonAvatarProps(), eyeBlink: eyeBlink, headMovement: headMovement })) : ((0, jsx_runtime_1.jsx)(MemoizedFullbodyAvatar, { ...commonAvatarProps(), sex: sex, eyeBlink: eyeBlink, chatEmission: chatEmission, loading: loading })), showControls && animatorRef.current && ((0, jsx_runtime_1.jsx)("div", { className: "animation-controls" }))] }));
|
|
97
38
|
};
|
|
98
39
|
exports.AvatarView = AvatarView;
|
|
40
|
+
exports.default = (0, react_1.memo)(exports.AvatarView);
|
|
99
41
|
//# sourceMappingURL=avatarComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"avatarComponent.js","sourceRoot":"","sources":["../../../../../src/components/Avatar/AvatarView/AvatarComponent/avatarComponent.tsx"],"names":[],"mappings":";;;;;AAAA,iCAA6D;AAE7D,+EAA4E;AAC5E,yFAAyD;AAqBzD,MAAM,sBAAsB,GAAG,IAAA,YAAI,EAAC,+BAAc,CAAC,CAAC;AAGpD,MAAM,sBAAsB,GAAG,IAAA,YAAI,EAAC,wBAAc,CAAC,CAAC;AAE7C,MAAM,UAAU,GAAG,CAAC,EACzB,YAAY,EACZ,GAAG,EACH,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,YAAY,GAAG,EAAE,EACjB,WAAW,GAAG,CAAC,EAAE,EACjB,mBAAmB,EACnB,UAAU,EACV,YAAY,EAEZ,YAAY,GACI,EAAE,EAAE;IAEpB,MAAM,WAAW,GAAG,IAAA,cAAM,EAAwB,IAAI,CAAC,CAAC;IAGxD,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,CAAC,QAA+B,EAAE,EAAE;QACrE,IAAI,QAAQ,KAAK,WAAW,CAAC,OAAO,EAAE;YACpC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;SAChC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAIP,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,WAAW,CAAC,OAAO;YAAE,OAAO;QAEjC,IAAI;YAEF,WAAW,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SAChE;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;SACzD;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAG5B,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE,CAAC,CAAC;QAC3C,GAAG;QACH,eAAe,EAAE,UAAU;QAC3B,mBAAmB;QACnB,YAAY;QACZ,WAAW;QACX,cAAc;KACf,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAGvF,OAAO,CACL,6DACG,QAAQ,CAAC,CAAC,CAAC,CACV,uBAAC,sBAAsB,OACjB,iBAAiB,EAAE,EACvB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC,CAAC,CAAC,CACF,uBAAC,sBAAsB,OACjB,iBAAiB,EAAE,EACvB,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,GAChB,CACH,EACA,YAAY,IAAI,WAAW,CAAC,OAAO,IAAI,CACtC,gCAAK,SAAS,EAAC,oBAAoB,GAE7B,CACP,IACA,CACJ,CAAC;AACJ,CAAC,CAAC;AA1EW,QAAA,UAAU,cA0ErB;AAEF,kBAAe,IAAA,YAAI,EAAC,kBAAU,CAAC,CAAC"}
|
|
@@ -1,2 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { AvatarAnimator } from '../controllers/AvatarAnimator';
|
|
2
|
+
export interface FullbodyAvatarProps {
|
|
3
|
+
url: string;
|
|
4
|
+
sex: 'MALE' | 'FEMALE';
|
|
5
|
+
eyeBlink: boolean;
|
|
6
|
+
updateCurrentViseme: (currentTime: number) => {
|
|
7
|
+
name: string;
|
|
8
|
+
weight: number;
|
|
9
|
+
} | null;
|
|
10
|
+
avatarHeight?: number;
|
|
11
|
+
avatarDepth?: number;
|
|
12
|
+
onCameraZChange?: (value: number) => void;
|
|
13
|
+
chatEmission: any;
|
|
14
|
+
loading: boolean;
|
|
15
|
+
setAnimatorRef?: (animator: AvatarAnimator | null) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function FullbodyAvatar({ url, sex, eyeBlink, updateCurrentViseme, avatarHeight, avatarDepth, onCameraZChange, chatEmission, loading, setAnimatorRef, }: FullbodyAvatarProps): JSX.Element;
|
|
@@ -7,25 +7,36 @@ const react_1 = require("react");
|
|
|
7
7
|
const three_1 = require("three");
|
|
8
8
|
const drei_1 = require("@react-three/drei");
|
|
9
9
|
const fiber_1 = require("@react-three/fiber");
|
|
10
|
-
const types_1 = require("./types");
|
|
11
|
-
const AnimationController_1 = require("../controllers/AnimationController");
|
|
12
10
|
const MorphTargetController_1 = require("../controllers/MorphTargetController");
|
|
13
11
|
const AvatarPositionController_1 = require("../controllers/AvatarPositionController");
|
|
12
|
+
const AvatarAnimator_1 = require("../controllers/AvatarAnimator");
|
|
14
13
|
const constants_1 = require("../../constants");
|
|
15
14
|
const DynamicShadow_1 = tslib_1.__importDefault(require("../../Shadow/DynamicShadow"));
|
|
16
|
-
function FullbodyAvatar({ url, sex,
|
|
17
|
-
const { scene } = (0, drei_1.useGLTF)(url);
|
|
18
|
-
const { animations: baseAnimations } = (0, drei_1.useGLTF)(url);
|
|
15
|
+
function FullbodyAvatar({ url, sex, eyeBlink, updateCurrentViseme, avatarHeight = 50, avatarDepth = 0, onCameraZChange, chatEmission, loading, setAnimatorRef, }) {
|
|
16
|
+
const { scene, animations: baseAnimations } = (0, drei_1.useGLTF)(url);
|
|
19
17
|
const { animations: additionalAnimations } = (0, drei_1.useGLTF)(constants_1.ANIMATION_URLS[sex]);
|
|
20
|
-
const
|
|
18
|
+
const needsAdditionalAnimations = (0, react_1.useMemo)(() => {
|
|
19
|
+
let found = false;
|
|
20
|
+
scene.traverse((object) => {
|
|
21
|
+
if (object instanceof three_1.SkinnedMesh &&
|
|
22
|
+
(object.name === 'GBNL__Head' ||
|
|
23
|
+
object.name === 'Wolf3D_Avatar' ||
|
|
24
|
+
object.name === 'Wolf3D_Avatar006_1')) {
|
|
25
|
+
found = true;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return found;
|
|
29
|
+
}, [scene]);
|
|
30
|
+
const mergedAnimations = (0, react_1.useMemo)(() => needsAdditionalAnimations ? [...baseAnimations, ...additionalAnimations] : baseAnimations, [baseAnimations, additionalAnimations, needsAdditionalAnimations]);
|
|
21
31
|
const { actions } = (0, drei_1.useAnimations)(mergedAnimations, scene);
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
32
|
+
const morphTargetControllerRef = (0, react_1.useRef)(null);
|
|
33
|
+
const positionControllerRef = (0, react_1.useRef)(null);
|
|
34
|
+
const animatorRef = (0, react_1.useRef)(null);
|
|
35
|
+
const isInitializedRef = (0, react_1.useRef)(false);
|
|
25
36
|
const lastPositionRef = (0, react_1.useRef)(constants_1.AVATAR_POSITION.clone());
|
|
26
37
|
const positionUpdateThrottleRef = (0, react_1.useRef)(0);
|
|
27
38
|
const POSITION_UPDATE_INTERVAL = 1;
|
|
28
|
-
const
|
|
39
|
+
const [isRpm, setIsRpm] = (0, react_1.useState)(false);
|
|
29
40
|
const blinkStateRef = (0, react_1.useRef)({
|
|
30
41
|
isBlinking: false,
|
|
31
42
|
lastBlinkTime: 0,
|
|
@@ -33,27 +44,35 @@ function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScale, eyeB
|
|
|
33
44
|
blinkStartTime: 0,
|
|
34
45
|
});
|
|
35
46
|
(0, react_1.useEffect)(() => {
|
|
36
|
-
if (!
|
|
37
|
-
positionControllerRef.current = new AvatarPositionController_1.AvatarPositionController(constants_1.AVATAR_POSITION);
|
|
38
|
-
}
|
|
39
|
-
if (!actions || !scene)
|
|
47
|
+
if (!scene)
|
|
40
48
|
return;
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
let headMesh = null;
|
|
50
|
+
scene.traverse((object) => {
|
|
51
|
+
if (object instanceof three_1.SkinnedMesh &&
|
|
52
|
+
(object.name === 'GBNL__Head' ||
|
|
53
|
+
object.name === 'Wolf3D_Avatar' ||
|
|
54
|
+
object.name === 'Wolf3D_Avatar006_1')) {
|
|
55
|
+
if (object.name === 'Wolf3D_Avatar' ||
|
|
56
|
+
object.name === 'Wolf3D_Avatar006_1') {
|
|
57
|
+
setIsRpm(true);
|
|
58
|
+
console.log('RPM avatar detected');
|
|
59
|
+
}
|
|
60
|
+
headMesh = object;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
43
63
|
if (headMesh) {
|
|
44
|
-
morphTargetControllerRef.current
|
|
45
|
-
|
|
46
|
-
setMorphTargetDictionary(headMesh.morphTargetDictionary);
|
|
47
|
-
const initialInfluences = Object.keys(headMesh.morphTargetDictionary)
|
|
48
|
-
.reduce((acc, key) => ({ ...acc, [key]: 0 }), {});
|
|
49
|
-
setMorphTargetInfluences(initialInfluences);
|
|
64
|
+
if (!morphTargetControllerRef.current) {
|
|
65
|
+
morphTargetControllerRef.current = new MorphTargetController_1.MorphTargetController(headMesh);
|
|
50
66
|
}
|
|
51
67
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
68
|
+
}, [scene]);
|
|
69
|
+
(0, react_1.useEffect)(() => {
|
|
70
|
+
if (!positionControllerRef.current) {
|
|
71
|
+
positionControllerRef.current = new AvatarPositionController_1.AvatarPositionController(constants_1.AVATAR_POSITION);
|
|
72
|
+
}
|
|
73
|
+
return () => {
|
|
74
|
+
};
|
|
75
|
+
}, []);
|
|
57
76
|
(0, react_1.useEffect)(() => {
|
|
58
77
|
if (positionControllerRef.current) {
|
|
59
78
|
positionControllerRef.current.updateHeight(avatarHeight, false);
|
|
@@ -65,70 +84,76 @@ function FullbodyAvatar({ url, sex, setIsRpm, currentBaseAction, timeScale, eyeB
|
|
|
65
84
|
onCameraZChange(newCameraZ);
|
|
66
85
|
}
|
|
67
86
|
}, [avatarDepth, onCameraZChange]);
|
|
68
|
-
const headMesh = (0, react_1.useMemo)(() => {
|
|
69
|
-
let foundMesh;
|
|
70
|
-
scene === null || scene === void 0 ? void 0 : scene.traverse((object) => {
|
|
71
|
-
if (object instanceof three_1.SkinnedMesh &&
|
|
72
|
-
(object.name === 'GBNL__Head' || object.name === 'Wolf3D_Avatar' || object.name === 'Wolf3D_Avatar006_1')) {
|
|
73
|
-
if (object.name === 'GBNL__Head') {
|
|
74
|
-
setIsRpm(false);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
setIsRpm(true);
|
|
78
|
-
}
|
|
79
|
-
foundMesh = object;
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
return foundMesh;
|
|
83
|
-
}, [scene]);
|
|
84
87
|
(0, react_1.useEffect)(() => {
|
|
85
|
-
if (!
|
|
88
|
+
if (!scene || !actions || isInitializedRef.current) {
|
|
86
89
|
return;
|
|
87
|
-
if (currentBaseAction.action.startsWith('Loading')) {
|
|
88
|
-
animationControllerRef.current.updateIsChatAlreadyStarted(true);
|
|
89
|
-
animationControllerRef.current.transitionTo(types_1.AnimationState.LOADING, currentBaseAction.action);
|
|
90
90
|
}
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
console.log('Initializing animator');
|
|
92
|
+
if (!animatorRef.current) {
|
|
93
|
+
animatorRef.current = new AvatarAnimator_1.AvatarAnimator();
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
95
|
+
const animator = animatorRef.current;
|
|
96
|
+
const initWithPreloadedAnimations = async () => {
|
|
97
|
+
try {
|
|
98
|
+
if (animator.isInitialized()) {
|
|
99
|
+
console.log('Animator already initialized, skipping initialization');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
await animator.initialize(scene, actions, mergedAnimations, isRpm ? 'RPM' : 'CUSTOM_GLB');
|
|
103
|
+
console.log('AvatarAnimator initialized with', Object.keys(actions).length, 'animations');
|
|
104
|
+
if (setAnimatorRef) {
|
|
105
|
+
setAnimatorRef(animator);
|
|
106
|
+
}
|
|
107
|
+
isInitializedRef.current = true;
|
|
108
|
+
animator.setTimeScale(0.8);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error('Error initializing AvatarAnimator:', error);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
initWithPreloadedAnimations();
|
|
115
|
+
return () => {
|
|
116
|
+
if (animatorRef.current && isInitializedRef.current) {
|
|
117
|
+
console.log('Cleaning up animator');
|
|
118
|
+
if ('mixer' in animatorRef.current && animatorRef.current['mixer']) {
|
|
119
|
+
animatorRef.current['mixer'].stopAllAction();
|
|
120
|
+
}
|
|
121
|
+
if (setAnimatorRef) {
|
|
122
|
+
setAnimatorRef(null);
|
|
123
|
+
}
|
|
124
|
+
isInitializedRef.current = false;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}, [scene, actions, mergedAnimations, sex, setAnimatorRef]);
|
|
128
|
+
const frameCallback = (0, react_1.useCallback)((state, delta) => {
|
|
107
129
|
const currentTime = state.clock.elapsedTime * 1000;
|
|
108
|
-
(
|
|
130
|
+
if (animatorRef.current && isInitializedRef.current) {
|
|
131
|
+
animatorRef.current.update(delta);
|
|
132
|
+
}
|
|
109
133
|
if (morphTargetControllerRef.current) {
|
|
110
134
|
const currentViseme = updateCurrentViseme(currentTime / 1000);
|
|
111
|
-
morphTargetControllerRef.current.updateMorphTargets(currentTime,
|
|
135
|
+
morphTargetControllerRef.current.updateMorphTargets(currentTime, chatEmission, loading, currentViseme, eyeBlink, blinkStateRef.current);
|
|
112
136
|
}
|
|
113
137
|
if (scene && positionControllerRef.current) {
|
|
114
138
|
const newScale = positionControllerRef.current.updateScale(constants_1.SCALE_LERP_FACTOR);
|
|
115
139
|
scene.scale.copy(newScale);
|
|
116
|
-
if (currentTime - positionUpdateThrottleRef.current >=
|
|
140
|
+
if (currentTime - positionUpdateThrottleRef.current >=
|
|
141
|
+
POSITION_UPDATE_INTERVAL) {
|
|
117
142
|
const currentPosition = positionControllerRef.current.getPosition();
|
|
118
143
|
currentPosition.setX(Number(currentPosition.x.toFixed(6)));
|
|
119
144
|
currentPosition.setY(Number(currentPosition.y.toFixed(6)));
|
|
120
145
|
currentPosition.setZ(Number(currentPosition.z.toFixed(6)));
|
|
121
|
-
const positionDelta = currentPosition.distanceTo(lastPositionRef.current);
|
|
122
146
|
lastPositionRef.current.copy(currentPosition);
|
|
123
147
|
positionUpdateThrottleRef.current = currentTime;
|
|
124
148
|
}
|
|
125
149
|
}
|
|
126
|
-
});
|
|
150
|
+
}, [scene, updateCurrentViseme, chatEmission, loading, eyeBlink]);
|
|
151
|
+
(0, fiber_1.useFrame)(frameCallback);
|
|
127
152
|
const position = (0, react_1.useMemo)(() => {
|
|
128
153
|
var _a;
|
|
129
|
-
return ((_a = positionControllerRef.current) === null || _a === void 0 ? void 0 : _a.getPosition()) || constants_1.AVATAR_POSITION.clone();
|
|
130
|
-
}, [
|
|
131
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(DynamicShadow_1.default, {
|
|
154
|
+
return (((_a = positionControllerRef.current) === null || _a === void 0 ? void 0 : _a.getPosition()) || constants_1.AVATAR_POSITION.clone());
|
|
155
|
+
}, []);
|
|
156
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(DynamicShadow_1.default, { animator: animatorRef.current, avatarPosition: position }), (0, jsx_runtime_1.jsx)("group", { position: position, rotation: constants_1.AVATAR_ROTATION, children: (0, jsx_runtime_1.jsx)("primitive", { object: scene }) })] }));
|
|
132
157
|
}
|
|
133
158
|
exports.FullbodyAvatar = FullbodyAvatar;
|
|
134
159
|
//# sourceMappingURL=fullbodyAvatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"fullbodyAvatar.js","sourceRoot":"","sources":["../../../../../../../src/components/Avatar/AvatarView/AvatarComponent/components/FullbodyAvatar/fullbodyAvatar.tsx"],"names":[],"mappings":"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"}
|