1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
C++RAW
#include "UnityPrefix.h"
#include "Runtime/Mono/MonoBehaviour.h"
#include "Runtime/Mono/MonoScript.h"
#include "Runtime/Graphics/Transform.h"
#include "Runtime/Animation/Avatar.h"
#include "Runtime/mecanim/human/human.h"
using namespace Unity;
CSRAW
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Collections;
namespace UnityEngine
{
ENUM internal BodyDoF
SpineFrontBack = 0,
SpineLeftRight,
SpineRollLeftRight,
ChestFrontBack,
ChestLeftRight,
ChestRollLeftRight,
LastBodyDoF
END
ENUM internal HeadDoF
NeckFrontBack = 0,
NeckLeftRight,
NeckRollLeftRight,
HeadFrontBack,
HeadLeftRight,
HeadRollLeftRight,
LeftEyeDownUp,
LeftEyeInOut,
RightEyeDownUp,
RightEyeInOut,
JawDownUp,
JawLeftRight,
LastHeadDoF
END
ENUM internal LegDoF
UpperLegFrontBack = 0,
UpperLegInOut,
UpperLegRollInOut,
LegCloseOpen,
LegRollInOut,
FootCloseOpen,
FootInOut,
ToesUpDown,
LastLegDoF
END
ENUM internal ArmDoF
ShoulderDownUp = 0,
ShoulderFrontBack,
ArmDownUp,
ArmFrontBack,
ArmRollInOut,
ForeArmCloseOpen,
ForeArmRollInOut,
HandDownUp,
HandInOut,
LastArmDoF
END
ENUM internal FingerDoF
ProximalDownUp = 0,
ProximalInOut,
IntermediateCloseOpen,
DistalCloseOpen,
LastFingerDoF
END
ENUM internal DoF
BodyDoFStart = 0,
HeadDoFStart = (int)BodyDoFStart + (int)BodyDoF.LastBodyDoF,
LeftLegDoFStart = (int)HeadDoFStart + (int)HeadDoF.LastHeadDoF,
RightLegDoFStart = (int)LeftLegDoFStart + (int)LegDoF.LastLegDoF,
LeftArmDoFStart = (int)RightLegDoFStart + (int)LegDoF.LastLegDoF,
RightArmDoFStart = (int)LeftArmDoFStart + (int)ArmDoF.LastArmDoF,
LeftThumbDoFStart = (int)RightArmDoFStart + (int)ArmDoF.LastArmDoF,
LeftIndexDoFStart = (int)LeftThumbDoFStart + (int)FingerDoF.LastFingerDoF,
LeftMiddleDoFStart = (int)LeftIndexDoFStart + (int)FingerDoF.LastFingerDoF,
LeftRingDoFStart = (int)LeftMiddleDoFStart + (int)FingerDoF.LastFingerDoF,
LeftLittleDoFStart = (int)LeftRingDoFStart + (int)FingerDoF.LastFingerDoF,
RightThumbDoFStart = (int)LeftLittleDoFStart + (int)FingerDoF.LastFingerDoF,
RightIndexDoFStart = (int)RightThumbDoFStart + (int)FingerDoF.LastFingerDoF,
RightMiddleDoFStart = (int)RightIndexDoFStart + (int)FingerDoF.LastFingerDoF,
RightRingDoFStart = (int)RightMiddleDoFStart + (int)FingerDoF.LastFingerDoF,
RightLittleDoFStart = (int)RightRingDoFStart + (int)FingerDoF.LastFingerDoF,
LastDoF = (int)RightLittleDoFStart + (int)FingerDoF.LastFingerDoF
END
// Human Body Bones
ENUM HumanBodyBones
// This is the Hips bone
Hips = 0,
// This is the Left Upper Leg bone
LeftUpperLeg = 1,
// This is the Right Upper Leg bone
RightUpperLeg = 2,
// This is the Left Knee bone
LeftLowerLeg = 3,
// This is the Right Knee bone
RightLowerLeg = 4,
// This is the Left Ankle bone
LeftFoot = 5,
// This is the Right Ankle bone
RightFoot = 6,
// This is the first Spine bone
Spine = 7,
// This is the Chest bone
Chest = 8,
// This is the Neck bone
Neck = 9,
// This is the Head bone
Head = 10,
// This is the Left Shoulder bone
LeftShoulder = 11,
// This is the Right Shoulder bone
RightShoulder = 12,
// This is the Left Upper Arm bone
LeftUpperArm = 13,
// This is the Right Upper Arm bone
RightUpperArm = 14,
// This is the Left Elbow bone
LeftLowerArm = 15,
// This is the Right Elbow bone
RightLowerArm = 16,
// This is the Left Wrist bone
LeftHand = 17,
// This is the Right Wrist bone
RightHand = 18,
// This is the Left Toes bone
LeftToes = 19,
// This is the Right Toes bone
RightToes = 20,
// This is the Left Eye bone
LeftEye = 21,
// This is the Right Eye bone
RightEye = 22,
// This is the Jaw bone
Jaw = 23,
// This is the Last bone index delimiter
LastBone = 24
END
ENUM internal HumanFingerBones
ThumbProximal = 0,
ThumbIntermediate,
ThumbDistal,
IndexProximal,
IndexIntermediate,
IndexDistal,
MiddleProximal,
MiddleIntermediate,
MiddleDistal,
RingProximal,
RingIntermediate,
RingDistal,
LittleProximal,
LittleIntermediate,
LittleDistal,
LastBone
END
ENUM internal HumanBodyPart
BodyStart = 0,
LeftFingerStart = (int)BodyStart + (int)HumanBodyBones.LastBone,
RightFingerStart = (int)LeftFingerStart + (int)HumanFingerBones.LastBone
END
ENUM internal HumanParameter
UpperArmTwist = 0,
LowerArmTwist,
UpperLegTwist,
LowerLegTwist,
ArmStretch,
LegStretch,
FeetSpacing
END
// Avatar definition
CLASS Avatar : Object
// Return true if this avatar is a valid mecanim avatar. It can be a generic avatar or a human avatar.
CUSTOM_PROP bool isValid {
return self->IsValid();
}
// Return true if this avatar is a valid human avatar.
CUSTOM_PROP bool isHuman
{
return self->IsValid() && self->GetAsset()->isHuman();
}
CUSTOM internal void SetMuscleMinMax(int muscleId, float min, float max)
{
self->SetMuscleMinMax(muscleId, min, max);
}
CUSTOM internal void SetParameter(int parameterId, float value)
{
self->SetParameter(parameterId, value);
}
CUSTOM internal float GetAxisLength(int humanId)
{
return self->GetAxisLength(humanId);
}
CUSTOM internal Quaternion GetPreRotation(int humanId)
{
return self->GetPreRotation(humanId);
}
CUSTOM internal Quaternion GetPostRotation(int humanId)
{
return self->GetPostRotation(humanId);
}
CUSTOM internal Quaternion GetZYPostQ(int humanId, Quaternion parentQ, Quaternion q) {
return self->GetZYPostQ(humanId, parentQ, q);
}
CUSTOM internal Quaternion GetZYRoll(int humanId, Vector3 uvw) {
return self->GetZYRoll(humanId, uvw);
}
CUSTOM internal Vector3 GetLimitSign(int humanId){
return self->GetLimitSign(humanId);
}
END
// Humanoid definition
CLASS HumanTrait : Object
// Number of muscles
CUSTOM_PROP static int MuscleCount
{
return HumanTrait::MuscleCount;
}
// Muscle's name
CUSTOM_PROP static string[] MuscleName
{
return Scripting::StringVectorToMono( HumanTrait::GetMuscleName() );
}
// Number of bones
CUSTOM_PROP static int BoneCount
{
return HumanTrait::BoneCount;
}
// Bone's name
CUSTOM_PROP static string[] BoneName
{
return Scripting::StringVectorToMono( HumanTrait::GetBoneName() );
}
// Return muscle index linked to bone i, dofIndex allow you to choose between X, Y and Z muscle's axis
CUSTOM static int MuscleFromBone(int i, int dofIndex){
return HumanTrait::MuscleFromBone(i, dofIndex);
}
// Return bone index linked to muscle i
CUSTOM static int BoneFromMuscle(int i){
return HumanTrait::BoneFromMuscle(i);
}
// Return true if bone i is a required bone.
CUSTOM static bool RequiredBone(int i){
return HumanTrait::RequiredBone(i);
}
// Number of required bones.
CUSTOM_PROP static int RequiredBoneCount
{
return HumanTrait::RequiredBoneCount();
}
CUSTOM internal static bool HasCollider(Avatar avatar, int i){
return HumanTrait::HasCollider(*avatar, i);
}
// Return default minimum values for muscle.
CUSTOM static float GetMuscleDefaultMin(int i){
return HumanTrait::GetMuscleDefaultMin(i);
}
// Return default maximum values for muscle.
CUSTOM static float GetMuscleDefaultMax(int i){
return HumanTrait::GetMuscleDefaultMax(i);
}
END
CSRAW }
|