Example #1
0
        private float SimulateJumpWithVelocity(Vector2 startVelocity, float windSpeed)
        {
            var position = new Vector2(0, 0);
            var velocity = startVelocity;

            while (position.y >= hill.LandingArea(position.x))
            {
                var velocityAir = velocity + velocity.normalized * windSpeed;
                var liftVec     = new Vector2(-velocityAir.normalized.y, velocityAir.normalized.x);
                var angle       = -Mathf.Rad2Deg * Mathf.Atan2(velocityAir.y, velocityAir.x);
                var lift        = GetLift(angle);
                var drag        = GetDrag(angle);

                var force = -velocityAir.normalized * ((float)drag * velocityAir.sqrMagnitude) +
                            liftVec * ((float)lift * velocityAir.sqrMagnitude);
                force *= aeroForceScale;

                velocity += (force + gravity) * timeDelta;
                position += velocity * timeDelta;
            }

            return(Distance(position));
        }