public Vector3 CalculatePaddleForce(ZB_PaddleBlade paddleBlade) { float velocity = paddleBlade.Speed; //print(velocity); if (velocity > velocityDeadZone) { float submergedArea = paddleBlade.SubmergedArea; if (submergedArea > 0) { Vector3 thrust = paddleBlade.RawForce; Vector3 normalizedThrust = thrust.normalized; if (restrictOptimalVelocity && velocity > maxOptimalVelocity) { thrust = normalizedThrust * velocityRestricter; } return(thrust); } } return(Vector3.zero); }
void AddPaddleForce(Vector3 paddleForce, ZB_PaddleBlade blade) { //var velocity = forceTarget.velocity; //// convert a portion of the given force to a forward impulse //float dot = Vector3.Dot(forceTarget.transform.InverseTransformVector(paddleForce).normalized, _boatForward); //float obliqueness = Mathf.Abs(dot); //if (DebugText.gameObject.activeSelf) // DebugText.text = Math.Round(dot, 2, MidpointRounding.AwayFromZero).ToString(); //_currForwardForce = forceTarget.transform.TransformVector(_boatForward).normalized * dot * paddleThrustMultiplier * 5f; //forceTarget.AddForce(_currForwardForce); // add force if (blade.ForcePoint != null) { forceTarget.AddForceAtPosition(paddleForce * paddleThrustMultiplier /** (1f - dot)*/, blade.ForcePoint.transform.position); } else { forceTarget.AddForceAtPosition(paddleForce * paddleThrustMultiplier /** (1f - dot)*/, blade.transform.position); } }