public override float AddSingleResult(LocalConvexResult convexResult, bool normalInWorldSpace)
        {
            //caller already does the filter on the m_closestHitFraction
            Debug.Assert(convexResult.HitFraction <= ClosestHitFraction);

            ClosestHitFraction = convexResult.HitFraction;
            HitCollisionObject = convexResult.HitCollisionObject;
            if (normalInWorldSpace)
            {
                HitNormalWorld = convexResult.HitNormalLocal;
            }
            else
            {
                // need to transform normal into worldspace
                HitNormalWorld = Vector3.TransformCoordinate(convexResult.HitNormalLocal, HitCollisionObject.WorldTransform.Basis);
            }
            HitPointWorld = convexResult.HitPointLocal;
            return convexResult.HitFraction;
        }
        public override float AddSingleResult(LocalConvexResult convexResult, bool normalInWorldSpace)
        {
            if (convexResult.HitCollisionObject == _me)
            {
                return 1.0f;
            }

            if (!convexResult.HitCollisionObject.HasContactResponse)
            {
                return 1.0f;
            }

            Vector3 hitNormalWorld;
            if (normalInWorldSpace)
            {
                hitNormalWorld = convexResult.HitNormalLocal;
            }
            else
            {
                // need to transform normal into worldspace
                hitNormalWorld = Vector3.TransformCoordinate(convexResult.HitNormalLocal, convexResult.HitCollisionObject.WorldTransform.Basis);
            }

            float dotUp;
            Vector3.Dot(ref _up, ref hitNormalWorld, out dotUp);
            if (dotUp < _minSlopeDot)
            {
                return 1.0f;
            }

            return base.AddSingleResult(convexResult, normalInWorldSpace);
        }
 public abstract float AddSingleResult(LocalConvexResult convexResult, bool normalInWorldSpace);
Ejemplo n.º 4
0
        public override float AddSingleResult(LocalConvexResult convexResult, bool normalInWorldSpace)
        {
            var r0 = Container?.Room;
            var c1 = convexResult.HitCollisionObject.UserObject as EngineContainer;
            var r1 = c1?.Room;

            if ((c1 == null && c1 == Container) || (SkipGhost && c1.CollisionType == COLLISION_TYPE.Ghost))
            {
                return 1.0f;
            }

            if (r0 == null || r1 == null)
            {
                return base.AddSingleResult(convexResult, normalInWorldSpace);
            }

            if (r0 != null && r1 != null)
            {
                if (r0.IsInNearRoomsList(r1))
                {
                    return base.AddSingleResult(convexResult, normalInWorldSpace);
                }
            }

            return 1.0f;
        }