private static Direction GetVisibilityMask(TilePosition position, IDictionary <TilePosition, GroundType> groundTypes) { if (!groundTypes.ContainsKey(position)) { return(Direction.None); } if (groundTypes[position].IsInVisible()) { return(Direction.None); } return(position.Neighbors() .Where(dirAndPos => !HasVisibleNeighbor(groundTypes, dirAndPos.Value)) .Aggregate(Direction.None, (prev, next) => prev.CombineFlags(next.Key))); }