Пример #1
0
        public virtual bool hits_walkable(SpherePath path, Sphere validPos, Vector3 up)
        {
            if (!Sphere.Intersects(validPos))
            {
                return(false);
            }

            var dist  = Vector3.Dot(SplittingPlane.Normal, validPos.Center) + SplittingPlane.D;
            var reach = validPos.Radius - PhysicsGlobals.EPSILON;

            if (dist >= reach)
            {
                return(PosNode.hits_walkable(path, validPos, up));
            }

            if (dist <= -reach)
            {
                return(NegNode.hits_walkable(path, validPos, up));
            }

            if (PosNode.hits_walkable(path, validPos, up))
            {
                return(true);
            }

            if (NegNode.hits_walkable(path, validPos, up))
            {
                return(true);
            }

            return(false);
        }
Пример #2
0
        public TransitionState check_walkable(SpherePath path, Sphere checkPos, float scale)
        {
            var validPos = new Sphere(checkPos);

            return(RootNode.hits_walkable(path, validPos, path.LocalSpaceZ) ? TransitionState.Collided : TransitionState.OK);
        }