/// <summary> /// Applies force to the held obstacle, if necessary. /// </summary> protected void ApplyForceToObstacle() { Vector3 currentDistance = HookingData.HookedObstacle.GetPosition() - transform.position; var forceCalculator = ForceCalculator.GetInstance(); Vector3 glovePositionalForce = forceCalculator.GlovePositionalForce(currentDistance, HookingData.HookingRefDistance, Strength); Vector3 gloveRotationalForce = forceCalculator.GloveRotationalForce(HookingData.HookingRefDistance, GameConstants.PlayerRotationRefVector, transform.rotation, Strength); Vector3 dampeningForce = forceCalculator.DampeningForce(HookingData.HookedObstacle.GetVelocity(), _dampeningFactor, Strength); Vector3 totalForce = glovePositionalForce + gloveRotationalForce; totalForce += dampeningForce; totalForce *= Time.deltaTime; HookingData.HookedObstacle.ApplyForce(totalForce); }