SA.FullBodyIK.BodyIK._UpperSolve_PreTranslate2 C# (CSharp) Method

_UpperSolve_PreTranslate2() private method

private _UpperSolve_PreTranslate2 ( Vector3 &translate, CachedRate01 &translateRate, CachedRate01 &stableRate, Vector3 &stableCenterLegPos ) : bool
translate UnityEngine.Vector3
translateRate CachedRate01
stableRate CachedRate01
stableCenterLegPos UnityEngine.Vector3
return bool
			bool _UpperSolve_PreTranslate2( out Vector3 translate, ref CachedRate01 translateRate, ref CachedRate01 stableRate, ref Vector3 stableCenterLegPos )
			{
				// If resetTransform = false, contain targetBeginPos to default transform or modify _UpperSolve_Translate()

				// Memo: Prepare SolveTargetBeginPosRated().

				translate = Vector3.zero;

				Assert( _hipsEffector != null );
				if( _hipsEffector.positionEnabled &&
					_hipsEffector.positionWeight <= IKEpsilon &&
					_hipsEffector.pull >= 1.0f - IKEpsilon ) {
					return false; // Always locked.
				}

				var temp = _solverInternal;
				Assert( temp != null );

				bool continuousSolverEnabled = _internalValues.continuousSolverEnabled;

				bool translateEnabled = (continuousSolverEnabled && stableRate.isGreater0);
				if( temp.targetCenterArmEnabled ) {
					translate = temp.targetCenterArmPos - temp.currentCenterArmPos;
					translateEnabled = true;
				}

				if( translateEnabled ) {
					if( translateRate.isLess1 ) {
						translate *= translateRate.value;
					}

					if( continuousSolverEnabled && stableRate.isGreater0 ) {
						Vector3 extraTranslate = stableCenterLegPos - temp.centerLegPos;
						translate = Vector3.Lerp( translate, extraTranslate, stableRate.value );
					}

					if( _hipsEffector.positionEnabled && _hipsEffector.pull > IKEpsilon ) {
						Vector3 extraTranslate = _hipsEffector._hidden_worldPosition - temp.centerLegPos;
						translate = Vector3.Lerp( translate, extraTranslate, _hipsEffector.pull );
					}

					return true;
				}

				return false;
			}