public RaycastHit(ray_hit ray, int hits) { NativeHandle = ray; Hits = hits; if (ray.bTerrain == 1) { Type = HitType.Terrain; } else { var pEntity = Global.gEnv.pEntitySystem.GetEntityFromPhysics(ray.pCollider); if (pEntity != null) { pEntity = pEntity.GetAttachedChild(ray.partid); } if (pEntity != null) { // We hit some sort of entity. _hitID = pEntity.GetId(); Type = HitType.Entity; } else { // We hit something that isn't registered with the entity system. Probably a designer object or brush. Type = HitType.Static; } } }
public static RaycastOutput Raycast(Vec3 position, Vec3 direction, float distance, entity_query_flags flags, uint rayFlags, int maxHits) { var rayHit = new ray_hit(); var hits = Env.PhysicalWorld.RayWorldIntersection(position, direction * distance, (int)flags, rayFlags, rayHit, maxHits); return(new RaycastOutput(rayHit, hits)); }
public static RaycastHit Cast(Vector3 position, Vector3 direction, float distance, EntityQueryFlags flags, RayFlags rayFlags, int maxHits) { var rayHit = new ray_hit(); var hits = Engine.PhysicalWorld.RayWorldIntersection(position, direction * distance, (int)flags, (uint)rayFlags, rayHit, maxHits); return(new RaycastHit(rayHit, hits)); }
internal static void FromNativeHit(ref RaycastHit hit, ray_hit nativeHit) { hit.Distance = nativeHit.dist; hit.Point = nativeHit.pt; hit.Normal = nativeHit.n; hit.TriangleIndex = nativeHit.iPrim; hit.SurfaceId = nativeHit.surface_idx; hit.PartId = nativeHit.partid; hit.PartIndex = nativeHit.ipart; }