def expansion_locations(self) -> Dict[Point2, Units]:
        """List of possible expansion locations."""
        # RESOURCE_SPREAD_THRESHOLD = 144
        RESOURCE_SPREAD_THRESHOLD = 225
        geysers = self.state.vespene_geyser
        all_resources = self.state.resources

        # Group nearby minerals together to form expansion locations
        resource_groups = []
        for mf in all_resources:
            mf_height = self.get_terrain_height(mf.position)
            for cluster in resource_groups:
                # bases on standard maps dont have more than 10 resources
                if len(cluster) == 10:
                    continue
                if mf.position._distance_squared(
                    cluster[0].position
                ) < RESOURCE_SPREAD_THRESHOLD and mf_height == self.get_terrain_height(cluster[0].position):
                    cluster.append(mf)
                    break
            else:  # not found
                resource_groups.append([mf])
        # Filter out bases with only one mineral field
        resource_groups = [cluster for cluster in resource_groups if len(cluster) > 1]
        # distance offsets from a gas geysir
        offsets = [(x, y) for x in range(-9, 10) for y in range(-9, 10) if 75 >= x ** 2 + y ** 2 >= 49]
        centers = {}
        # for every resource group:
        for resources in resource_groups:
            # possible expansion points
            # resources[-1] is a gas geysir which always has (x.5, y.5) coordinates, just like an expansion
            possible_points = (
                Point2((offset[0] + resources[-1].position.x, offset[1] + resources[-1].position.y))
                for offset in offsets
            )
            # filter out points that are too near
            possible_points = [
                point
                for point in possible_points
                if all(point.distance_to(resource) >= (7 if resource in geysers else 6) for resource in resources)
            ]
            # choose best fitting point
            result = min(possible_points, key=lambda p: sum(p.distance_to(resource) for resource in resources))
            centers[result] = resources
        """ Returns dict with center of resources as key, resources (mineral field, vespene geyser) as value """
        return centers
List of possible expansion locations.