示例#1
0
        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;
                }
            }
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }
示例#4
0
 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;
 }