1 module ft.data;
2 import gl3n.linalg;
3 
4 enum BlendshapeNames : string {
5     eyeBlinkLeft = "eyeBlinkLeft",
6     eyeLookDownLeft = "eyeLookDownLeft",
7     eyeLookInLeft = "eyeLookInLeft",
8     eyeLookOutLeft = "eyeLookOutLeft",
9     eyeLookUpLeft = "eyeLookUpLeft",
10     eyeSquintLeft = "eyeSquintLeft",
11     eyeWideLeft = "eyeWideLeft",
12 
13     eyeBlinkRight = "eyeBlinkRight",
14     eyeLookDownRight = "eyeLookDownRight",
15     eyeLookInRight = "eyeLookInRight",
16     eyeLookOutRight = "eyeLookOutRight",
17     eyeLookUpRight = "eyeLookUpRight",
18     eyeSquintRight = "eyeSquintRight",
19     eyeWideRight = "eyeWideRight",
20 
21     jawForward = "jawForward",
22     jawLeft = "jawLeft",
23     jawRight = "jawRight",
24     jawOpen = "jawOpen",
25     mouthClose = "mouthClose",
26     mouthFunnel = "mouthFunnel",
27     mouthPucker = "mouthPucker",
28     mouthLeft = "mouthLeft",
29     mouthRight = "mouthRight",
30     mouthSmileLeft = "mouthSmileLeft",
31     mouthSmileRight = "mouthSmileRight",
32     mouthFrownLeft = "mouthFrownLeft",
33     mouthFrownRight = "mouthFrownRight",
34     mouthDimpleLeft = "mouthDimpleLeft",
35     mouthDimpleRight = "mouthDimpleRight",
36     mouthStretchLeft = "mouthStretchLeft",
37     mouthStretchRight = "mouthStretchRight",
38     mouthRollLower = "mouthRollLower",
39     mouthRollUpper = "mouthRollUpper",
40     mouthShrugLower = "mouthShrugLower",
41     mouthShrugUpper = "mouthShrugUpper",
42     mouthPressLeft = "mouthPressLeft",
43     mouthPressRight = "mouthPressRight",
44     mouthLowerDownLeft = "mouthLowerDownLeft",
45     mouthLowerDownRight = "mouthLowerDownRight",
46     mouthUpperUpLeft = "mouthUpperUpLeft",
47     mouthUpperUpRight = "mouthUpperUpRight",
48 
49     browDownLeft = "browDownLeft",
50     browDownRight = "browDownRight",
51     browInnerUp = "browInnerUp",
52     browOuterUpLeft = "browOuterUpLeft",
53     browOuterUpRight = "browOuterUpRight",
54     cheekPuff = "cheekPuff",
55     cheekSquintLeft = "cheekSquintLeft",
56     cheekSquintRight = "cheekSquintRight",
57     noseSneerLeft = "noseSneerLeft",
58     noseSneerRight = "noseSneerRight",
59 
60     tongueOut = "tongueOut",
61 
62     vrmNeutral = "NEUTRAL",
63     vrmA = "A",
64     vrmI = "I",
65     vrmU = "U",
66     vrmE = "E",
67     vrmO = "O",
68     vrmBlink = "BLINK",
69     vrmJoy = "JOY",
70     vrmAngry = "ANGRY",
71     vrmSorrow = "SORROW",
72     vrmFun = "FUN",
73     vrmLookUp = "LOOKUP",
74     vrmLookLeft = "LOOKLEFT",
75     vrmLookRight = "LOOKRIGHT",
76     vrmBlinkLeft = "BLINK_L",
77     vrmBlinkRight = "BLINK_R",
78 }
79 
80 /**
81     Names of humanoid bones according to Unity
82     and the VMC protocol
83 */
84 enum BoneNames {
85     vmcHips = "Hips",
86     vmcLeftUpperLeg = "LeftUpperLeg",
87     vmcRightUpperLeg = "RightUpperLeg",
88     vmcLeftLowerLeg = "LeftLowerLeg",
89     vmcRightLowerLeg = "RightLowerLeg",
90     vmcLeftFoot = "LeftFoot",
91     vmcRightFoot = "RightFoot",
92     vmcSpine = "Spine",
93     vmcChest = "Chest",
94     vmcUpperChest = "UpperChest",
95     vmcNeck = "Neck",
96     vmcHead = "Head",
97     vmcLeftShoulder = "LeftShoulder",
98     vmcRightShoulder = "RightShoulder",
99     vmcLeftUpperArm = "LeftUpperArm",
100     vmcRightUpperArm = "RightUpperArm",
101     vmcLeftLowerArm = "LeftLowerArm",
102     vmcRightLowerArm = "RightLowerArm",
103     vmcLeftHand = "LeftHand",
104     vmcRightHand = "RightHand",
105     vmcLeftToes = "LeftToes",
106     vmcRightToes = "RightToes",
107     vmcLeftEye = "LeftEye",
108     vmcRightEye = "RightEye",
109     vmcJaw = "Jaw",
110     vmcLeftThumbProximal = "LeftThumbProximal",
111     vmcLeftThumbIntermediate = "LeftThumbIntermediate",
112     vmcLeftThumbDistal = "LeftThumbDistal",
113     vmcLeftIndexProximal = "LeftIndexProximal",
114     vmcLeftIndexIntermediate = "LeftIndexIntermediate",
115     vmcLeftIndexDistal = "LeftIndexDistal",
116     vmcLeftMiddleProximal = "LeftMiddleProximal",
117     vmcLeftMiddleIntermediate = "LeftMiddleIntermediate",
118     vmcLeftMiddleDistal = "LeftMiddleDistal",
119     vmcLeftRingProximal = "LeftRingProximal",
120     vmcLeftRingIntermediate = "LeftRingIntermediate",
121     vmcLeftRingDistal = "LeftRingDistal",
122     vmcLeftLittleProximal = "LeftLittleProximal",
123     vmcLeftLittleIntermediate = "LeftLittleIntermediate",
124     vmcLeftLittleDistal = "LeftLittleDistal",
125     vmcRightThumbProximal = "RightThumbProximal",
126     vmcRightThumbIntermediate = "RightThumbIntermediate",
127     vmcRightThumbDistal = "RightThumbDistal",
128     vmcRightIndexProximal = "RightIndexProximal",
129     vmcRightIndexIntermediate = "RightIndexIntermediate",
130     vmcRightIndexDistal = "RightIndexDistal",
131     vmcRightMiddleProximal = "RightMiddleProximal",
132     vmcRightMiddleIntermediate = "RightMiddleIntermediate",
133     vmcRightMiddleDistal = "RightMiddleDistal",
134     vmcRightRingProximal = "RightRingProximal",
135     vmcRightRingIntermediate = "RightRingIntermediate",
136     vmcRightRingDistal = "RightRingDistal",
137     vmcRightLittleProximal = "RightLittleProximal",
138     vmcRightLittleIntermediate = "RightLittleIntermediate",
139     vmcRightLittleDistal = "RightLittleDistal",
140     vmcLastBone = "LastBone"
141 }
142 
143 struct Bone {
144     /**
145         Position of the bone
146     */
147     vec3 position;
148 
149     /**
150         Rotation of the bone
151     */
152     quat rotation;
153 }