public static bool IsBlocked(Loc2D loc, Enums.WalkMode walkMode) { //jumping ignores all short obstacles if (TileBlocked(loc, walkMode)) { return(true); } if (walkMode < Enums.WalkMode.Air) { foreach (Player player in Players) { if (!player.dead && player.CharLoc == loc) { return(true); } } foreach (Npc npc in Npcs) { if (!npc.dead && npc.CharLoc == loc) { return(true); } } } //map object blocking return(false); }
public static bool DirBlocked(Direction8 dir, ActiveChar character, Loc2D loc, bool inAir, int distance) { if (character == FocusedCharacter && Intangible) { Operations.MoveInDirection8(ref loc, dir, 1); if (!Operations.IsInBound(CurrentMap.Width, CurrentMap.Height, loc.X, loc.Y)) { return(true); } return(false); } Enums.WalkMode walkMode = Enums.WalkMode.Normal; if (inAir) { walkMode = Enums.WalkMode.Air; } for (int i = 0; i < distance; i++) { Operations.MoveInDirection8(ref loc, dir, 1); if (IsBlocked(loc, walkMode)) { return(true); } } return(false); }
public static bool MoveBlocked(Loc2D loc, Direction8 dir) { Enums.WalkMode walkMode = Enums.WalkMode.Air; Operations.MoveInDirection8(ref loc, dir, 1); if (TileBlocked(loc, walkMode)) { return(true); } return(false); }
public static bool TileBlocked(Loc2D loc, Enums.WalkMode walkMode) { if (!Operations.IsInBound(CurrentMap.Width, CurrentMap.Height, loc.X, loc.Y)) { return(true); } if (CurrentMap.MapArray[loc.X, loc.Y].Data.Type == Enums.TileType.Blocked) { return(true); } if (CurrentMap.MapArray[loc.X, loc.Y].Data.Type == Enums.TileType.Water) { return(walkMode > 0); } return(false); }