@memori.ai/memori-react 7.4.6 → 7.5.0
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 +25 -0
- package/README.md +1 -1
- package/dist/components/Avatar/Avatar.d.ts +1 -0
- package/dist/components/Avatar/Avatar.js +64 -60
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/AvatarView/components/controls.d.ts +23 -0
- package/dist/components/Avatar/AvatarView/components/controls.js +55 -0
- package/dist/components/Avatar/AvatarView/components/controls.js.map +1 -0
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +18 -0
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js +60 -0
- package/dist/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -0
- package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +9 -0
- package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js +39 -0
- package/dist/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +1 -0
- package/dist/components/Avatar/AvatarView/components/loader.d.ts +5 -0
- package/dist/components/Avatar/AvatarView/components/loader.js +12 -0
- package/dist/components/Avatar/AvatarView/components/loader.js.map +1 -0
- package/dist/components/Avatar/AvatarView/index.d.ts +18 -0
- package/dist/components/Avatar/AvatarView/index.js +109 -0
- package/dist/components/Avatar/AvatarView/index.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js +47 -0
- package/dist/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useHeadMovement.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/utils/useHeadMovement.js +53 -0
- package/dist/components/Avatar/AvatarView/utils/useHeadMovement.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js +34 -0
- package/dist/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js +68 -0
- package/dist/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/useSmile.d.ts +2 -0
- package/dist/components/Avatar/AvatarView/utils/useSmile.js +28 -0
- package/dist/components/Avatar/AvatarView/utils/useSmile.js.map +1 -0
- package/dist/components/Avatar/AvatarView/utils/utils.d.ts +13 -0
- package/dist/components/Avatar/AvatarView/utils/utils.js +42 -0
- package/dist/components/Avatar/AvatarView/utils/utils.js.map +1 -0
- package/dist/components/MemoriWidget/MemoriWidget.js +5 -0
- package/dist/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/dist/components/StartPanel/StartPanel.js +3 -2
- package/dist/components/StartPanel/StartPanel.js.map +1 -1
- package/dist/helpers/constants.d.ts +1 -0
- package/dist/helpers/constants.js +2 -1
- package/dist/helpers/constants.js.map +1 -1
- package/dist/helpers/error.js +5 -0
- package/dist/helpers/error.js.map +1 -1
- package/dist/i18n.js +13 -1
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/locales/de.json +426 -0
- package/dist/locales/en.json +5 -0
- package/dist/locales/es.json +426 -0
- package/dist/locales/fr.json +426 -0
- package/dist/locales/it.json +5 -0
- package/esm/components/Avatar/Avatar.d.ts +1 -0
- package/esm/components/Avatar/Avatar.js +66 -62
- package/esm/components/Avatar/Avatar.js.map +1 -1
- package/esm/components/Avatar/AvatarView/components/controls.d.ts +23 -0
- package/esm/components/Avatar/AvatarView/components/controls.js +52 -0
- package/esm/components/Avatar/AvatarView/components/controls.js.map +1 -0
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.d.ts +18 -0
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js +56 -0
- package/esm/components/Avatar/AvatarView/components/fullbodyAvatar.js.map +1 -0
- package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.d.ts +9 -0
- package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js +35 -0
- package/esm/components/Avatar/AvatarView/components/halfbodyAvatar.js.map +1 -0
- package/esm/components/Avatar/AvatarView/components/loader.d.ts +5 -0
- package/esm/components/Avatar/AvatarView/components/loader.js +9 -0
- package/esm/components/Avatar/AvatarView/components/loader.js.map +1 -0
- package/esm/components/Avatar/AvatarView/index.d.ts +18 -0
- package/esm/components/Avatar/AvatarView/index.js +105 -0
- package/esm/components/Avatar/AvatarView/index.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js +44 -0
- package/esm/components/Avatar/AvatarView/utils/useEyeBlink.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useHeadMovement.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/utils/useHeadMovement.js +50 -0
- package/esm/components/Avatar/AvatarView/utils/useHeadMovement.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js +31 -0
- package/esm/components/Avatar/AvatarView/utils/useLoadingMorphAnim.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js +65 -0
- package/esm/components/Avatar/AvatarView/utils/useMouthSpeaking.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/useSmile.d.ts +2 -0
- package/esm/components/Avatar/AvatarView/utils/useSmile.js +25 -0
- package/esm/components/Avatar/AvatarView/utils/useSmile.js.map +1 -0
- package/esm/components/Avatar/AvatarView/utils/utils.d.ts +13 -0
- package/esm/components/Avatar/AvatarView/utils/utils.js +33 -0
- package/esm/components/Avatar/AvatarView/utils/utils.js.map +1 -0
- package/esm/components/MemoriWidget/MemoriWidget.js +6 -1
- package/esm/components/MemoriWidget/MemoriWidget.js.map +1 -1
- package/esm/components/StartPanel/StartPanel.js +3 -2
- package/esm/components/StartPanel/StartPanel.js.map +1 -1
- package/esm/helpers/constants.d.ts +1 -0
- package/esm/helpers/constants.js +1 -0
- package/esm/helpers/constants.js.map +1 -1
- package/esm/helpers/error.js +5 -0
- package/esm/helpers/error.js.map +1 -1
- package/esm/i18n.js +13 -1
- package/esm/i18n.js.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.js +12 -1
- package/esm/index.js.map +1 -1
- package/esm/locales/de.json +426 -0
- package/esm/locales/en.json +5 -0
- package/esm/locales/es.json +426 -0
- package/esm/locales/fr.json +426 -0
- package/esm/locales/it.json +5 -0
- package/package.json +2 -1
- package/src/components/Avatar/Avatar.tsx +149 -144
- package/src/components/{AvatarView → Avatar/AvatarView}/AvatarView.stories.tsx +9 -2
- package/src/components/Avatar/AvatarView/components/controls.tsx +94 -0
- package/src/components/Avatar/AvatarView/components/fullbodyAvatar.tsx +120 -0
- package/src/components/Avatar/AvatarView/components/halfbodyAvatar.tsx +69 -0
- package/src/components/{AvatarView → Avatar/AvatarView}/components/loader.tsx +1 -1
- package/src/components/Avatar/AvatarView/index.tsx +251 -0
- package/src/components/Avatar/AvatarView/utils/useEyeBlink.ts +59 -0
- package/src/components/Avatar/AvatarView/utils/useMouthSpeaking.ts +87 -0
- package/src/components/Avatar/AvatarView/utils/useSmile.ts +39 -0
- package/src/components/Avatar/__snapshots__/Avatar.test.tsx.snap +1 -1
- package/src/components/MemoriWidget/MemoriWidget.tsx +11 -1
- package/src/components/StartPanel/StartPanel.tsx +3 -2
- package/src/components/layouts/Chat.test.tsx +12 -9
- package/src/components/layouts/FullPage.test.tsx +12 -9
- package/src/components/layouts/Totem.test.tsx +12 -9
- package/src/components/layouts/WebsiteAssistant.test.tsx +12 -9
- package/src/components/layouts/__snapshots__/Chat.test.tsx.snap +13 -8
- package/src/components/layouts/__snapshots__/FullPage.test.tsx.snap +14 -9
- package/src/components/layouts/__snapshots__/Totem.test.tsx.snap +14 -9
- package/src/components/layouts/__snapshots__/WebsiteAssistant.test.tsx.snap +6 -1
- package/src/helpers/constants.ts +2 -0
- package/src/helpers/error.ts +5 -0
- package/src/i18n.ts +13 -1
- package/src/index.stories.tsx +29 -0
- package/src/index.tsx +14 -3
- package/src/locales/de.json +454 -0
- package/src/locales/en.json +5 -0
- package/src/locales/es.json +426 -0
- package/src/locales/fr.json +426 -0
- package/src/locales/it.json +5 -0
- package/src/components/AvatarView/components/avatar.tsx +0 -57
- package/src/components/AvatarView/components/fullbodyAvatar.tsx +0 -99
- package/src/components/AvatarView/index.tsx +0 -101
- package/src/components/AvatarView/utils/useEyeBlink.ts +0 -48
- package/src/components/AvatarView/utils/useMouthSpeaking.ts +0 -70
- package/src/components/AvatarView/utils/useSmile.ts +0 -31
- /package/src/components/{AvatarView → Avatar/AvatarView}/utils/useHeadMovement.ts +0 -0
- /package/src/components/{AvatarView → Avatar/AvatarView}/utils/useLoadingMorphAnim.ts +0 -0
- /package/src/components/{AvatarView → Avatar/AvatarView}/utils/utils.ts +0 -0
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { CSSProperties } from 'react';
|
|
2
|
-
import React, { Suspense } from 'react';
|
|
3
|
-
import Avatar from './components/avatar';
|
|
4
|
-
import FullbodyAvatar, { AvatarProps } from './components/fullbodyAvatar';
|
|
5
|
-
import Loader from './components/loader';
|
|
6
|
-
import { Canvas } from '@react-three/fiber';
|
|
7
|
-
import { OrbitControls, SpotLight, Environment } from '@react-three/drei';
|
|
8
|
-
import { isAndroid, isiOS } from '../../helpers/utils';
|
|
9
|
-
|
|
10
|
-
export interface Props {
|
|
11
|
-
url: string;
|
|
12
|
-
sex: 'MALE' | 'FEMALE';
|
|
13
|
-
fallbackImg?: string;
|
|
14
|
-
eyeBlink?: boolean;
|
|
15
|
-
headMovement?: boolean;
|
|
16
|
-
rotateAvatar?: boolean;
|
|
17
|
-
speaking?: boolean;
|
|
18
|
-
style?: CSSProperties;
|
|
19
|
-
fallback?: React.ReactNode;
|
|
20
|
-
halfBody?: boolean;
|
|
21
|
-
animation?: AvatarProps['animation'];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const defaultStylesHalfBody = {
|
|
25
|
-
width: '250px',
|
|
26
|
-
height: '250px',
|
|
27
|
-
backgroundColor: 'white',
|
|
28
|
-
borderRadius: '100%',
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const defaultStylesFullBody = {
|
|
32
|
-
width: '500px',
|
|
33
|
-
height: '500px',
|
|
34
|
-
backgroundColor: 'white',
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export default function AvatarView({
|
|
38
|
-
url,
|
|
39
|
-
sex,
|
|
40
|
-
fallbackImg,
|
|
41
|
-
style,
|
|
42
|
-
rotateAvatar,
|
|
43
|
-
eyeBlink,
|
|
44
|
-
headMovement,
|
|
45
|
-
speaking,
|
|
46
|
-
fallback,
|
|
47
|
-
halfBody = true,
|
|
48
|
-
animation,
|
|
49
|
-
}: Props) {
|
|
50
|
-
const defaultStyles = halfBody
|
|
51
|
-
? defaultStylesHalfBody
|
|
52
|
-
: defaultStylesFullBody;
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
-
<Canvas
|
|
56
|
-
style={style || defaultStyles}
|
|
57
|
-
camera={
|
|
58
|
-
halfBody
|
|
59
|
-
? {
|
|
60
|
-
fov: 40,
|
|
61
|
-
position: [0, 0, 0.6],
|
|
62
|
-
}
|
|
63
|
-
: { fov: 40, position: [0, 0.0000175, 3] }
|
|
64
|
-
}
|
|
65
|
-
>
|
|
66
|
-
<Suspense fallback={fallback || <Loader fallbackImg={fallbackImg} />}>
|
|
67
|
-
{isAndroid() || isiOS() ? (
|
|
68
|
-
<SpotLight
|
|
69
|
-
distance={100}
|
|
70
|
-
position={[-0.3, 0.2, 1.25]}
|
|
71
|
-
angle={Math.PI / 2}
|
|
72
|
-
attenuation={5}
|
|
73
|
-
anglePower={5}
|
|
74
|
-
/>
|
|
75
|
-
) : (
|
|
76
|
-
<Environment files="https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/venice_sunset_1k.hdr" />
|
|
77
|
-
)}
|
|
78
|
-
{rotateAvatar && halfBody && (
|
|
79
|
-
<OrbitControls enablePan={false} enableZoom={false} />
|
|
80
|
-
)}
|
|
81
|
-
{halfBody ? (
|
|
82
|
-
<Avatar
|
|
83
|
-
url={url}
|
|
84
|
-
eyeBlink={eyeBlink}
|
|
85
|
-
headMovement={headMovement}
|
|
86
|
-
speaking={speaking}
|
|
87
|
-
/>
|
|
88
|
-
) : (
|
|
89
|
-
<FullbodyAvatar
|
|
90
|
-
url={url}
|
|
91
|
-
sex={sex}
|
|
92
|
-
eyeBlink={eyeBlink}
|
|
93
|
-
headMovement={headMovement}
|
|
94
|
-
speaking={speaking}
|
|
95
|
-
animation={animation}
|
|
96
|
-
/>
|
|
97
|
-
)}
|
|
98
|
-
</Suspense>
|
|
99
|
-
</Canvas>
|
|
100
|
-
);
|
|
101
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { SkinnedMesh } from 'three';
|
|
2
|
-
import { Nodes } from './utils';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import { useFrame } from '@react-three/fiber';
|
|
5
|
-
|
|
6
|
-
let blinkTime: number = 999;
|
|
7
|
-
let timeout: NodeJS.Timeout;
|
|
8
|
-
|
|
9
|
-
let headMesh: SkinnedMesh;
|
|
10
|
-
let morphIndex: number = 0;
|
|
11
|
-
|
|
12
|
-
const setNextBlink = () => {
|
|
13
|
-
blinkTime = 0;
|
|
14
|
-
timeout = setTimeout(setNextBlink, Math.random() * 5000 + 2000);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export default function useEyeBlink(
|
|
18
|
-
enabled: boolean | undefined,
|
|
19
|
-
nodes: Nodes
|
|
20
|
-
) {
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (!enabled) return;
|
|
23
|
-
|
|
24
|
-
headMesh = (nodes.Wolf3D_Head || nodes.Wolf3D_Avatar) as SkinnedMesh;
|
|
25
|
-
|
|
26
|
-
if (headMesh?.morphTargetDictionary && headMesh?.morphTargetInfluences) {
|
|
27
|
-
morphIndex = headMesh.morphTargetDictionary.eyesClosed;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
timeout = setTimeout(setNextBlink, 3000);
|
|
31
|
-
|
|
32
|
-
return () => {
|
|
33
|
-
clearTimeout(timeout);
|
|
34
|
-
};
|
|
35
|
-
}, [nodes, enabled]);
|
|
36
|
-
|
|
37
|
-
useFrame((_, delta) => {
|
|
38
|
-
if (!enabled) return;
|
|
39
|
-
|
|
40
|
-
if (blinkTime < 2 && headMesh?.morphTargetInfluences) {
|
|
41
|
-
let value = Math.abs(Math.sin((blinkTime * Math.PI) / 2));
|
|
42
|
-
blinkTime += delta * 10;
|
|
43
|
-
headMesh.morphTargetInfluences[morphIndex] = value;
|
|
44
|
-
} else if (headMesh?.morphTargetInfluences) {
|
|
45
|
-
headMesh.morphTargetInfluences[morphIndex] = 0;
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { Nodes } from './utils';
|
|
2
|
-
import { SkinnedMesh } from 'three';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import { useFrame } from '@react-three/fiber';
|
|
5
|
-
|
|
6
|
-
let mouthMoveTime: number = 999;
|
|
7
|
-
let timeout: NodeJS.Timeout;
|
|
8
|
-
|
|
9
|
-
let mouthMesh: SkinnedMesh;
|
|
10
|
-
let mouthOpenMorphIndex: number = 0;
|
|
11
|
-
let mouthSmileMorphIndex: number = 0;
|
|
12
|
-
let mouthFunnerMorphIndex: number = 0;
|
|
13
|
-
let mouthPuckerMorphIndex: number = 0;
|
|
14
|
-
|
|
15
|
-
const setNextMouthOpen = () => {
|
|
16
|
-
mouthMoveTime = 0;
|
|
17
|
-
timeout = setTimeout(setNextMouthOpen, Math.random() * 500);
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
// https://learn.microsoft.com/it-it/azure/cognitive-services/speech-service/how-to-speech-synthesis-viseme?tabs=visemeid&pivots=programming-language-javascript
|
|
21
|
-
|
|
22
|
-
export default function useMouthSpeaking(
|
|
23
|
-
speaking: boolean | undefined,
|
|
24
|
-
nodes: Nodes
|
|
25
|
-
) {
|
|
26
|
-
useEffect(() => {
|
|
27
|
-
if (!speaking) return;
|
|
28
|
-
|
|
29
|
-
mouthMesh = (nodes.Wolf3D_Head ||
|
|
30
|
-
nodes.Wolf3D_Avatar ||
|
|
31
|
-
nodes.Wolf3D_Avatar001) as SkinnedMesh;
|
|
32
|
-
|
|
33
|
-
if (mouthMesh?.morphTargetDictionary && mouthMesh?.morphTargetInfluences) {
|
|
34
|
-
mouthOpenMorphIndex = mouthMesh.morphTargetDictionary.mouthOpen;
|
|
35
|
-
mouthSmileMorphIndex = mouthMesh.morphTargetDictionary.mouthSmile;
|
|
36
|
-
mouthFunnerMorphIndex = mouthMesh.morphTargetDictionary.mouthFunner;
|
|
37
|
-
mouthPuckerMorphIndex = mouthMesh.morphTargetDictionary.mouthPucker;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
timeout = setTimeout(setNextMouthOpen, 200);
|
|
41
|
-
// timeout = setTimeout(visemeDD = 0.4, start - audioOffset);
|
|
42
|
-
|
|
43
|
-
return () => {
|
|
44
|
-
clearTimeout(timeout);
|
|
45
|
-
};
|
|
46
|
-
}, [nodes, speaking]);
|
|
47
|
-
|
|
48
|
-
useFrame((_, delta) => {
|
|
49
|
-
if (!speaking) {
|
|
50
|
-
if (mouthMesh?.morphTargetInfluences) {
|
|
51
|
-
mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = 0;
|
|
52
|
-
mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
|
|
53
|
-
mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = 0;
|
|
54
|
-
mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = 0;
|
|
55
|
-
}
|
|
56
|
-
} else if (mouthMoveTime < 2 && mouthMesh?.morphTargetInfluences) {
|
|
57
|
-
let value = Math.abs(Math.sin((mouthMoveTime * Math.PI) / 2));
|
|
58
|
-
mouthMoveTime += delta * 10;
|
|
59
|
-
mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = value / 3;
|
|
60
|
-
mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = value / 10;
|
|
61
|
-
mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = value / 7;
|
|
62
|
-
mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = value / 5;
|
|
63
|
-
} else if (mouthMesh?.morphTargetInfluences) {
|
|
64
|
-
mouthMesh.morphTargetInfluences[mouthOpenMorphIndex] = 0;
|
|
65
|
-
mouthMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
|
|
66
|
-
mouthMesh.morphTargetInfluences[mouthFunnerMorphIndex] = 0;
|
|
67
|
-
mouthMesh.morphTargetInfluences[mouthPuckerMorphIndex] = 0;
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { Nodes } from './utils';
|
|
2
|
-
import { SkinnedMesh } from 'three';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import { useFrame } from '@react-three/fiber';
|
|
5
|
-
|
|
6
|
-
let headMesh: SkinnedMesh;
|
|
7
|
-
let mouthSmileMorphIndex: number = 0;
|
|
8
|
-
|
|
9
|
-
export default function useSmile(smiling: boolean | undefined, nodes: Nodes) {
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (!smiling) return;
|
|
12
|
-
|
|
13
|
-
headMesh = (nodes.Wolf3D_Head ||
|
|
14
|
-
nodes.Wolf3D_Avatar ||
|
|
15
|
-
nodes.Wolf3D_Avatar001) as SkinnedMesh;
|
|
16
|
-
|
|
17
|
-
if (headMesh?.morphTargetDictionary && headMesh?.morphTargetInfluences) {
|
|
18
|
-
mouthSmileMorphIndex = headMesh.morphTargetDictionary.mouthSmile;
|
|
19
|
-
}
|
|
20
|
-
}, [nodes, smiling]);
|
|
21
|
-
|
|
22
|
-
useFrame(() => {
|
|
23
|
-
if (!smiling) {
|
|
24
|
-
if (headMesh?.morphTargetInfluences) {
|
|
25
|
-
headMesh.morphTargetInfluences[mouthSmileMorphIndex] = 0;
|
|
26
|
-
}
|
|
27
|
-
} else if (headMesh?.morphTargetInfluences) {
|
|
28
|
-
headMesh.morphTargetInfluences[mouthSmileMorphIndex] = 1 / 3;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|