void _Prefix()
{
if( _isPrefixed ) {
return;
}
_isPrefixed = true;
SafeNew( ref bodyBones );
SafeNew( ref headBones );
SafeNew( ref leftLegBones );
SafeNew( ref rightLegBones );
SafeNew( ref leftArmBones );
leftArmBones.Repair();
SafeNew( ref rightArmBones );
rightArmBones.Repair();
SafeNew( ref leftHandFingersBones );
leftHandFingersBones.Repair();
SafeNew( ref rightHandFingersBones );
rightHandFingersBones.Repair();
SafeNew( ref bodyEffectors );
SafeNew( ref headEffectors );
SafeNew( ref leftArmEffectors );
SafeNew( ref rightArmEffectors );
SafeNew( ref leftLegEffectors );
SafeNew( ref rightLegEffectors );
SafeNew( ref leftHandFingersEffectors );
SafeNew( ref rightHandFingersEffectors );
SafeNew( ref settings );
SafeNew( ref editorSettings );
SafeNew( ref internalValues );
settings.Prefix();
if( _bones == null || _bones.Length != (int)BoneLocation.Max ) {
_bones = new Bone[(int)BoneLocation.Max];
}
if( _effectors == null || _effectors.Length != (int)EffectorLocation.Max ) {
_effectors = new Effector[(int)EffectorLocation.Max];
}
_Prefix( ref bodyBones.hips, BoneLocation.Hips, null );
_Prefix( ref bodyBones.spine, BoneLocation.Spine, bodyBones.hips );
_Prefix( ref bodyBones.spine2, BoneLocation.Spine2, bodyBones.spine );
_Prefix( ref bodyBones.spine3, BoneLocation.Spine3, bodyBones.spine2 );
_Prefix( ref bodyBones.spine4, BoneLocation.Spine4, bodyBones.spine3 );
_Prefix( ref headBones.neck, BoneLocation.Neck, bodyBones.spineU );
_Prefix( ref headBones.head, BoneLocation.Head, headBones.neck );
_Prefix( ref headBones.leftEye, BoneLocation.LeftEye, headBones.head );
_Prefix( ref headBones.rightEye, BoneLocation.RightEye, headBones.head );
for( int i = 0; i != 2; ++i ) {
var legBones = (i == 0) ? leftLegBones : rightLegBones;
_Prefix( ref legBones.leg, (i == 0) ? BoneLocation.LeftLeg : BoneLocation.RightLeg, bodyBones.hips );
_Prefix( ref legBones.knee, (i == 0) ? BoneLocation.LeftKnee : BoneLocation.RightKnee, legBones.leg );
_Prefix( ref legBones.foot, (i == 0) ? BoneLocation.LeftFoot : BoneLocation.RightFoot, legBones.knee );
var armBones = (i == 0) ? leftArmBones : rightArmBones;
_Prefix( ref armBones.shoulder, (i == 0) ? BoneLocation.LeftShoulder : BoneLocation.RightShoulder, bodyBones.spineU );
_Prefix( ref armBones.arm, (i == 0) ? BoneLocation.LeftArm : BoneLocation.RightArm, armBones.shoulder );
_Prefix( ref armBones.elbow, (i == 0) ? BoneLocation.LeftElbow : BoneLocation.RightElbow, armBones.arm );
_Prefix( ref armBones.wrist, (i == 0) ? BoneLocation.LeftWrist : BoneLocation.RightWrist, armBones.elbow );
for( int n = 0; n != MaxArmRollLength; ++n ) {
var armRollLocation = (i == 0) ? BoneLocation.LeftArmRoll0 : BoneLocation.RightArmRoll0;
_Prefix( ref armBones.armRoll[n], (BoneLocation)((int)armRollLocation + n), armBones.arm );
}
for( int n = 0; n != MaxElbowRollLength; ++n ) {
var elbowRollLocation = (i == 0) ? BoneLocation.LeftElbowRoll0 : BoneLocation.RightElbowRoll0;
_Prefix( ref armBones.elbowRoll[n], (BoneLocation)((int)elbowRollLocation + n), armBones.elbow );
}
var fingerBones = (i == 0) ? leftHandFingersBones : rightHandFingersBones;
for( int n = 0; n != MaxHandFingerLength; ++n ) {
var thumbLocation = (i == 0) ? BoneLocation.LeftHandThumb0 : BoneLocation.RightHandThumb0;
var indexLocation = (i == 0) ? BoneLocation.LeftHandIndex0 : BoneLocation.RightHandIndex0;
var middleLocation = (i == 0) ? BoneLocation.LeftHandMiddle0 : BoneLocation.RightHandMiddle0;
var ringLocation = (i == 0) ? BoneLocation.LeftHandRing0 : BoneLocation.RightHandRing0;
var littleLocation = (i == 0) ? BoneLocation.LeftHandLittle0 : BoneLocation.RightHandLittle0;
_Prefix( ref fingerBones.thumb[n], (BoneLocation)((int)thumbLocation + n), (n == 0) ? armBones.wrist : fingerBones.thumb[n - 1] );
_Prefix( ref fingerBones.index[n], (BoneLocation)((int)indexLocation + n), (n == 0) ? armBones.wrist : fingerBones.index[n - 1] );
_Prefix( ref fingerBones.middle[n], (BoneLocation)((int)middleLocation + n), (n == 0) ? armBones.wrist : fingerBones.middle[n - 1] );
_Prefix( ref fingerBones.ring[n], (BoneLocation)((int)ringLocation + n), (n == 0) ? armBones.wrist : fingerBones.ring[n - 1] );
_Prefix( ref fingerBones.little[n], (BoneLocation)((int)littleLocation + n), (n == 0) ? armBones.wrist : fingerBones.little[n - 1] );
}
}
_Prefix( ref rootEffector, EffectorLocation.Root );
_Prefix( ref bodyEffectors.hips, EffectorLocation.Hips, rootEffector, bodyBones.hips, leftLegBones.leg, rightLegBones.leg );
_Prefix( ref headEffectors.neck, EffectorLocation.Neck, bodyEffectors.hips, headBones.neck );
_Prefix( ref headEffectors.head, EffectorLocation.Head, headEffectors.neck, headBones.head );
_Prefix( ref headEffectors.eyes, EffectorLocation.Eyes, rootEffector, headBones.head, headBones.leftEye, headBones.rightEye );
_Prefix( ref leftLegEffectors.knee, EffectorLocation.LeftKnee, rootEffector, leftLegBones.knee );
_Prefix( ref leftLegEffectors.foot, EffectorLocation.LeftFoot, rootEffector, leftLegBones.foot );
_Prefix( ref rightLegEffectors.knee, EffectorLocation.RightKnee, rootEffector, rightLegBones.knee );
_Prefix( ref rightLegEffectors.foot, EffectorLocation.RightFoot, rootEffector, rightLegBones.foot );
_Prefix( ref leftArmEffectors.arm, EffectorLocation.LeftArm, bodyEffectors.hips, leftArmBones.arm );
_Prefix( ref leftArmEffectors.elbow, EffectorLocation.LeftElbow, bodyEffectors.hips, leftArmBones.elbow );
_Prefix( ref leftArmEffectors.wrist, EffectorLocation.LeftWrist, bodyEffectors.hips, leftArmBones.wrist );
_Prefix( ref rightArmEffectors.arm, EffectorLocation.RightArm, bodyEffectors.hips, rightArmBones.arm );
_Prefix( ref rightArmEffectors.elbow, EffectorLocation.RightElbow, bodyEffectors.hips, rightArmBones.elbow );
_Prefix( ref rightArmEffectors.wrist, EffectorLocation.RightWrist, bodyEffectors.hips, rightArmBones.wrist );
_Prefix( ref leftHandFingersEffectors.thumb, EffectorLocation.LeftHandThumb, leftArmEffectors.wrist, leftHandFingersBones.thumb );
_Prefix( ref leftHandFingersEffectors.index, EffectorLocation.LeftHandIndex, leftArmEffectors.wrist, leftHandFingersBones.index );
_Prefix( ref leftHandFingersEffectors.middle, EffectorLocation.LeftHandMiddle, leftArmEffectors.wrist, leftHandFingersBones.middle );
_Prefix( ref leftHandFingersEffectors.ring, EffectorLocation.LeftHandRing, leftArmEffectors.wrist, leftHandFingersBones.ring );
_Prefix( ref leftHandFingersEffectors.little, EffectorLocation.LeftHandLittle, leftArmEffectors.wrist, leftHandFingersBones.little );
_Prefix( ref rightHandFingersEffectors.thumb, EffectorLocation.RightHandThumb, rightArmEffectors.wrist, rightHandFingersBones.thumb );
_Prefix( ref rightHandFingersEffectors.index, EffectorLocation.RightHandIndex, rightArmEffectors.wrist, rightHandFingersBones.index );
_Prefix( ref rightHandFingersEffectors.middle, EffectorLocation.RightHandMiddle, rightArmEffectors.wrist, rightHandFingersBones.middle );
_Prefix( ref rightHandFingersEffectors.ring, EffectorLocation.RightHandRing, rightArmEffectors.wrist, rightHandFingersBones.ring );
_Prefix( ref rightHandFingersEffectors.little, EffectorLocation.RightHandLittle, rightArmEffectors.wrist, rightHandFingersBones.little );
if( !_isPrefixedAtLeastOnce ) {
_isPrefixedAtLeastOnce = true;
for( int i = 0; i != _effectors.Length; ++i ) {
_effectors[i].Prefix();
}
}
}