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