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