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 (normalized)
    /// </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;
}