using System.Numerics;
using System.Runtime.InteropServices;

namespace Raylib_cs
{
    /// <summary>
    /// Ray, ray for raycasting
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public partial struct Ray
    {
        /// <summary>
        /// Ray position (origin)
        /// </summary>
        public Vector3 position;

        /// <summary>
        /// Ray direction
        /// </summary>
        public Vector3 direction;

        public Ray(Vector3 position, Vector3 direction)
        {
            this.position = position;
            this.direction = direction;
        }
    }

    /// <summary>
    /// Raycast hit information
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    public partial struct RayCollision
    {
        /// <summary>
        /// Did the ray hit something?
        /// </summary>
        public CBool hit;

        /// <summary>
        /// Distance to the nearest hit
        /// </summary>
        public float distance;

        /// <summary>
        /// Point of the nearest hit
        /// </summary>
        public Vector3 point;

        /// <summary>
        /// Surface normal of hit
        /// </summary>
        public Vector3 normal;
    }
}