internal static SessionModel FilterModelForBot(Bot bot, SessionModel dataModel) { Point[] ownedTilePositions = dataModel.GameMap.Tiles .Where(t => t.Entity != null && t.Entity.OwnerId == bot.Id) .Select(t => new Point(t.X, t.Y)).ToArray(); var filteredPositions = new List <Point>(); foreach (var tilePosition in ownedTilePositions) { for (int x = -4; x < 5; x++) { for (int y = -4; y < 5; y++) { var total = Abs(x) + Abs(y); if (total <= 5) { var newPos = new Point(x, y) + tilePosition; if (!filteredPositions.Contains(newPos) && dataModel.GameMap.Tiles.Any(t => t.X == newPos.X && t.Y == newPos.Y)) { filteredPositions.Add(newPos); } } } } } var model = (SessionModel)dataModel.Clone(); model.GameMap.Tiles = model.GameMap.Tiles.Where(t => filteredPositions.Contains(new Point(t.X, t.Y))).ToArray(); return(model); }