SA.FullBodyIK._ComputeBaseHipsTransform C# (CSharp) Method

_ComputeBaseHipsTransform() public method

public _ComputeBaseHipsTransform ( ) : void
return void
		void _ComputeBaseHipsTransform()
		{
			Assert( internalValues != null );

			if( bodyEffectors == null ) { // Note: bodyEffectors is public.
				return;
			}

			Effector hipsEffector = bodyEffectors.hips;
			if( hipsEffector == null || rootEffector == null ) {
				return;
			}

			if( hipsEffector.rotationEnabled && hipsEffector.rotationWeight > IKEpsilon ) {
				Quaternion hipsRotation = hipsEffector.worldRotation * Inverse( hipsEffector._defaultRotation );
				if( hipsEffector.rotationWeight < 1.0f - IKEpsilon ) {
					Quaternion rootRotation = rootEffector.worldRotation * Inverse( rootEffector._defaultRotation );
					Quaternion tempRotation = Quaternion.Lerp( rootRotation, hipsRotation, hipsEffector.rotationWeight );
					SAFBIKMatSetRot( out internalValues.baseHipsBasis, ref tempRotation );
				} else {
					SAFBIKMatSetRot( out internalValues.baseHipsBasis, ref hipsRotation );
				}
			} else {
				Quaternion rootEffectorWorldRotation = rootEffector.worldRotation;
				SAFBIKMatSetRotMultInv1( out internalValues.baseHipsBasis, ref rootEffectorWorldRotation, ref rootEffector._defaultRotation );
			}

			if( hipsEffector.positionEnabled && hipsEffector.positionWeight > IKEpsilon ) {
				Vector3 hipsEffectorWorldPosition = hipsEffector.worldPosition;
				SAFBIKMatMultVecPreSubAdd(
					out internalValues.baseHipsPos,
					ref internalValues.baseHipsBasis,
					ref rootEffector._defaultPosition,
					ref hipsEffector._defaultPosition,
					ref hipsEffectorWorldPosition );
				if( hipsEffector.positionWeight < 1.0f - IKEpsilon ) {
					Vector3 rootEffectorWorldPosition = rootEffector.worldPosition;
					Vector3 hipsPosition;
					SAFBIKMatMultVecPreSubAdd(
						out hipsPosition,
						ref internalValues.baseHipsBasis,
						ref hipsEffector._defaultPosition,
						ref rootEffector._defaultPosition,
						ref rootEffectorWorldPosition );
					internalValues.baseHipsPos = Vector3.Lerp( hipsPosition, internalValues.baseHipsPos, hipsEffector.positionWeight );
				}
			} else {
				Vector3 rootEffectorWorldPosition = rootEffector.worldPosition;
				SAFBIKMatMultVecPreSubAdd(
					out internalValues.baseHipsPos,
					ref internalValues.baseHipsBasis,
					ref hipsEffector._defaultPosition,
					ref rootEffector._defaultPosition,
					ref rootEffectorWorldPosition );
			}
		}
FullBodyIK