Esempio n. 1
0
    private void AddWalkMesh(List <WMMesh> walkMeshes, Mesh mesh)
    {
        Vector3[] vertices  = mesh.vertices;
        Int32[]   triangles = mesh.triangles;
        Vector3[] normals   = mesh.normals;
        Vector4[] tangents  = mesh.tangents;
        if ((Int32)vertices.Length != (Int32)triangles.Length && (Int32)vertices.Length != (Int32)tangents.Length)
        {
            global::Debug.LogWarning("All vertices, triangles, tangents .Length must be equal");
        }
        List <Vector3> list = new List <Vector3>();

        for (Int32 i = 0; i < (Int32)vertices.Length / 3; i++)
        {
            Vector3 b    = vertices[triangles[i * 3]];
            Vector3 a    = vertices[triangles[i * 3 + 1]];
            Vector3 a2   = vertices[triangles[i * 3 + 2]];
            Vector3 item = Vector3.Cross(a - b, a2 - b);
            item.Normalize();
            list.Add(item);
        }
        WMMesh item2 = new WMMesh
        {
            Id              = this.Number,
            Transform       = base.transform,
            Vertices        = vertices,
            Triangles       = triangles,
            Normals         = normals,
            Tangents        = tangents,
            TriangleNormals = list.ToArray()
        };

        walkMeshes.Add(item2);
    }
Esempio n. 2
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);
 }
Esempio 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);
 }
Esempio 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);
    }
Esempio 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);
    }
Esempio 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));
    }