private static void UpdateSkirt(ref BumperSkirtAnimationData data)
        {
            const float skirtTilt = 5.0f;

            var hitX = data.BallPosition.x;
            var hitY = data.BallPosition.y;
            var dy   = math.abs(hitY - data.Center.y);

            if (dy == 0.0f)
            {
                dy = 0.000001f;
            }

            var dx     = math.abs(hitX - data.Center.x);
            var skirtA = math.atan(dx / dy);

            data.Rotation.x = math.cos(skirtA) * skirtTilt;
            data.Rotation.y = math.sin(skirtA) * skirtTilt;
            if (data.Center.y < hitY)
            {
                data.Rotation.x = -data.Rotation.x;
            }

            if (data.Center.x > hitX)
            {
                data.Rotation.y = -data.Rotation.y;
            }
        }
 private static void ResetSkirt(ref BumperSkirtAnimationData data)
 {
     data.Rotation = new float2(0, 0);
 }
 public static void Collide(ref BallData ball, ref NativeQueue <EventData> .ParallelWriter events,
                            ref CollisionEventData collEvent, ref BumperRingAnimationData ringData, ref BumperSkirtAnimationData skirtData,
                            in Collider collider, in BumperStaticData data, ref Random random)