Maybe Tyler could tell you a bit on this, but the raycasting is more than bugged in my version of the headers. I haven't experimented with it in LE or C/C++, so I didn't know how to translate it correctly. Here is my source for it. @Tyler, feel free to fix it:
using System;
namespace Leadwerks
{
public class Pick
{
public Core.TPick Structure { get; private set; }
public Vector3 Position
{
get
{
return new Vector3(Structure.x, Structure.y, Structure.z);
}
}
public Vector3 Normal
{
get
{
return new Vector3(Structure.nx, Structure.ny, Structure.nz);
}
}
public Entity Entity
{
get
{
return new Entity(Structure.entity);
}
}
public Surface Surface
{
get
{
return new Surface(Structure.surface);
}
}
}
public static class Raycasting
{
public static bool PointVisible(Vector3 origin, Vector3 end, float radius, int collisionType)
{
return Convert.ToBoolean(Core.PointVisible(origin.ToFloatArray(), end.ToFloatArray(), radius, collisionType, IntPtr.Zero));
}
public static bool EntityVisible(Entity origin, Entity end, float radius, int collisionType)
{
return Convert.ToBoolean(Core.EntityVisible(origin.Pointer, end.Pointer, radius, collisionType, IntPtr.Zero));
}
public static bool LinePick(Pick pick, Vector3 origin, Vector3 end, float radius, int collisionType)
{
return Convert.ToBoolean(Core.LinePick(pick.Structure, origin.ToFloatArray(), end.ToFloatArray(), radius, collisionType, IntPtr.Zero));
}
public static bool EntityPick(Pick pick, Entity entity, float range, float radius, int collisionType)
{
return Convert.ToBoolean(Core.EntityPick(pick.Structure, entity.Pointer, range, radius, collisionType, IntPtr.Zero));
}
public static bool CameraPick(Pick pick, Camera camera, Vector3 position, float radius, int collisionType)
{
return Convert.ToBoolean(Core.CameraPick(pick.Structure, camera.Pointer, position.ToFloatArray(), radius, collisionType, IntPtr.Zero));
}
}
}