fBaseXtensions.Navigation.Navigation.CanRayCast C# (CSharp) Method

CanRayCast() public static method

Ray Cast -- if no navcellflags parameter is given then it will use Navigator.Raycast -- else it uses ZetaDia.Physics.Raycast to test navcellflags
public static CanRayCast ( System.Vector3 vStartLocation, System.Vector3 vDestination, NavCellFlags NavType = NavCellFlags.None, bool UseSearchGridProvider = false ) : bool
vStartLocation System.Vector3
vDestination System.Vector3
NavType NavCellFlags
UseSearchGridProvider bool
return bool
        public static bool CanRayCast(Vector3 vStartLocation, Vector3 vDestination, NavCellFlags NavType = NavCellFlags.None, bool UseSearchGridProvider = false)
        {
            if (!NavType.Equals(NavCellFlags.None))
                return ZetaDia.Physics.Raycast(vStartLocation, vDestination, NavType); //False means nothing hit

            if (UseSearchGridProvider)
            {
                Vector2 hitVector;
                if (vStartLocation.Z >= vDestination.Z)
                    return !Navigator.SearchGridProvider.Raycast(vStartLocation.ToVector2(), vDestination.ToVector2(), out hitVector);
                return !Navigator.SearchGridProvider.Raycast(vDestination.ToVector2(), vStartLocation.ToVector2(), out hitVector);
            }

            return !Navigator.Raycast(vStartLocation, vDestination); //True means nothing hit
        }

Usage Example

Exemplo n.º 1
0
        //Static Methods
        #region Static Movement Methods
        public static bool CheckVectorFlags(Vector3 currentPos, Vector3 targetPos, PointCheckingFlags flags)
        {
            //Avoidance Check (Any Avoidance)
            if (flags.HasFlag(PointCheckingFlags.AvoidanceOverlap))
            {
                if (ObjectCache.Obstacles.IsPositionWithinAvoidanceArea(targetPos))
                {
                    return(false);
                }
            }


            //Kiting Check
            //if (flags.HasFlag(PointCheckingFlags.MonsterOverlap))
            //{
            //	if (ObjectCache.Objects.OfType<CacheUnit>().Any(m => m.ShouldFlee && m.IsPositionWithinRange(targetPos, FunkyBaseExtension.Settings.Fleeing.FleeMaxMonsterDistance))) return false;
            //}


            //Avoidance Intersection Check
            if (flags.HasFlag(PointCheckingFlags.AvoidanceIntersection))
            {
                if (ObjectCache.Obstacles.TestVectorAgainstAvoidanceZones(currentPos, targetPos))
                {
                    return(false);
                }
            }

            Vector3 botcurpos = FunkyGame.Hero.Position;

            if (flags.HasFlag(PointCheckingFlags.Raycast))
            {
                if (!Navigation.CanRayCast(currentPos, targetPos))
                {
                    return(false);
                }
            }
            if (flags.HasFlag(PointCheckingFlags.RaycastWalkable))
            {
                if (!Navigation.CanRayCast(currentPos, targetPos, NavCellFlags.AllowWalk))
                {
                    return(false);
                }
            }
            if (flags.HasFlag(PointCheckingFlags.RaycastNavProvider))
            {
                if (!Navigation.CanRayCast(currentPos, targetPos, UseSearchGridProvider: true))
                {
                    return(false);
                }
            }

            return(true);
        }