Ejemplo n.º 1
0
 private Boolean Raycast(Ray ray, WMMesh mesh, out WMRaycastHit hit, out Int32 mapid)
 {
     if (WMPhysics.Raycast(ray, mesh, out hit))
     {
         Transform transform = mesh.Transform;
         Vector3[] vertices  = mesh.Vertices;
         Int32[]   triangles = mesh.Triangles;
         Vector4[] tangents  = mesh.Tangents;
         mapid = (Int32)tangents[triangles[hit.triangleIndex * 3]].x;
         return(mapid != 12782 || ff9.w_moveCHRControlPtr.type == 1);
     }
     mapid = 0;
     return(false);
 }
Ejemplo n.º 2
0
    public static Boolean Raycast(Ray ray, WMMesh mesh, out WMRaycastHit hit)
    {
        Int32[]   triangles = mesh.Triangles;
        Vector4[] tangents  = mesh.Tangents;
        Vector3[] vertices  = mesh.Vertices;
        Transform transform = mesh.Transform;

        hit = default(WMRaycastHit);
        for (Int32 i = 0; i < (Int32)triangles.Length / 3; i++)
        {
            Int32 num = (Int32)tangents[triangles[i * 3]].x;
            if (num != 4078 || WMPhysics.IgnoreExceptions)
            {
                if (num != 4088 || WMPhysics.IgnoreExceptions)
                {
                    if (num != 2040 || WMPhysics.IgnoreExceptions)
                    {
                        Single num2 = Vector3.Dot(Vector3.up, mesh.TriangleNormals[i]);
                        if (num2 <= 0.1f)
                        {
                            if (!WMPhysics.IgnoreExceptions)
                            {
                                goto IL_15E;
                            }
                        }
                        Vector3 vector  = vertices[triangles[i * 3]];
                        Vector3 vector2 = vertices[triangles[i * 3 + 1]];
                        Vector3 vector3 = vertices[triangles[i * 3 + 2]];
                        vector  = transform.TransformPoint(vector);
                        vector2 = transform.TransformPoint(vector2);
                        vector3 = transform.TransformPoint(vector3);
                        WMTriangle t = new WMTriangle(vector, vector2, vector3);
                        if (WMPhysics.intersect3D_RayTriangle(ray, t, out hit.point) == 1)
                        {
                            hit.triangleIndex = i;
                            return(true);
                        }
                    }
                }
            }
            IL_15E :;
        }
        return(false);
    }
Ejemplo n.º 3
0
    public static Boolean RaycastOnSpecifiedTriangle(Ray ray, WMMesh mesh, Int32 triangleIndex, out WMRaycastHit hit)
    {
        Vector3[] vertices  = mesh.Vertices;
        Int32[]   triangles = mesh.Triangles;
        Transform transform = mesh.Transform;

        hit = default(WMRaycastHit);
        Vector3 vector  = vertices[triangles[triangleIndex * 3]];
        Vector3 vector2 = vertices[triangles[triangleIndex * 3 + 1]];
        Vector3 vector3 = vertices[triangles[triangleIndex * 3 + 2]];

        vector  = transform.TransformPoint(vector);
        vector2 = transform.TransformPoint(vector2);
        vector3 = transform.TransformPoint(vector3);
        WMTriangle t = new WMTriangle(vector, vector2, vector3);

        if (WMPhysics.intersect3D_RayTriangle(ray, t, out hit.point) != 0)
        {
            hit.triangleIndex = triangleIndex;
            return(true);
        }
        return(false);
    }