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); }
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); }
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); }
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); }
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); }
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)); }