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; }
void _UpperSolve_Translate2( ref CachedRate01 translateRate, ref CachedRate01 stableRate, ref Vector3 stableCenterLegPos ) { Vector3 translate; if( _UpperSolve_PreTranslate2( out translate, ref translateRate, ref stableRate, ref stableCenterLegPos ) ) { var temp = _solverInternal; Assert( temp != null ); temp.Translate( ref translate ); } }