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