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