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 Boolean Raycast(Ray ray, out WMRaycastHit hit, Single distance, out Int32 mapid, ff9.s_moveCHRCache cache)
    {
        Boolean flag  = false;
        Boolean flag2 = false;
        Boolean flag3 = false;

        hit   = default(WMRaycastHit);
        mapid = 0;
        Int32 num = -1;

        if (cache != null)
        {
            for (Int32 i = 0; i < 10; i++)
            {
                Int32 num2 = (cache.Number + i) % 10;
                if (!(cache.Blocks[num2] != this))
                {
                    Int32 triangleIndex = cache.TriangleIndices[num2];
                    Int32 walkMeshIndex = cache.WalkMeshIndices[num2];
                    flag3 = (cache.OnObject[num2] == 1);
                    if (this.RaycastOnSpecifiedTriangle(ray, this.ActiveWalkMeshes, walkMeshIndex, out hit, out mapid, triangleIndex))
                    {
                        flag2 = true;
                        flag  = true;
                        break;
                    }
                }
            }
        }
        if (!flag && this.Raycast(ray, this.ActiveWalkMeshes, out hit, out mapid, out num))
        {
            flag2 = true;
            flag3 = false;
        }
        if (flag2)
        {
            if (cache != null && !flag)
            {
                cache.Number++;
                cache.Number %= 10;
                cache.TriangleIndices[cache.Number] = hit.triangleIndex;
                cache.WalkMeshIndices[cache.Number] = num;
                cache.Blocks[cache.Number]          = this;
                cache.OnObject[cache.Number]        = (Byte)((!flag3) ? 0 : 1);
            }
            return(true);
        }
        return(false);
    }
Ejemplo n.º 3
0
 private Boolean Raycast(Ray ray, List <WMMesh> walkMeshes, out WMRaycastHit hit, out Int32 mapid, out Int32 walkMeshIndex)
 {
     hit           = default(WMRaycastHit);
     mapid         = 0;
     walkMeshIndex = -1;
     for (Int32 i = 0; i < walkMeshes.Count; i++)
     {
         WMMesh mesh = walkMeshes[i];
         if (this.Raycast(ray, mesh, out hit, out mapid))
         {
             walkMeshIndex = i;
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 4
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.º 5
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);
    }
Ejemplo n.º 6
0
    private Boolean RaycastOnSpecifiedTriangle(Ray ray, List <WMMesh> walkMeshes, Int32 walkMeshIndex, out WMRaycastHit hit, out Int32 mapid, Int32 triangleIndex)
    {
        WMMesh mesh = walkMeshes[walkMeshIndex];

        return(this.RaycastOnSpecifiedTriangle(ray, mesh, out hit, out mapid, triangleIndex));
    }