async def query_building_placement(self, ability: AbilityId, positions: List[Union[Unit, Point2, Point3]], ignore_resources: bool=True) -> List[ActionResult]: assert isinstance(ability, AbilityData) result = await self._execute(query=query_pb.RequestQuery( placements=[query_pb.RequestQueryBuildingPlacement( ability_id=ability.id.value, target_pos=common_pb.Point2D(x=position.x, y=position.y) ) for position in positions], ignore_resource_requirements=ignore_resources )) return [ActionResult(p.result) for p in result.query.placements]
async def query_building_placement(ws, ability_id, point): if not isinstance(point, common.Point2D): point = common.Point2D(x=point[0], y=point[1]) api_request = api.Request(query=api_query.RequestQuery(placements=[ api_query.RequestQueryBuildingPlacement(ability_id=ability_id, target_pos=point) ])) await ws.send(api_request.SerializeToString()) result = await ws.recv() response = api.Response.FromString(result) return response.query.placements[0].result == 1
async def query_building_placement( self, ability: AbilityData, positions: List[Union[Point2, Point3]], ignore_resources: bool = True) -> List[ActionResult]: """This function might be deleted in favor of the function above (_query_building_placement_fast). :param ability: :param positions: :param ignore_resources:""" assert isinstance(ability, AbilityData) result = await self._execute(query=query_pb.RequestQuery( placements=(query_pb.RequestQueryBuildingPlacement( ability_id=ability.id.value, target_pos=position.as_Point2D) for position in positions), ignore_resource_requirements=ignore_resources, )) # Unnecessary converting to ActionResult? return [ActionResult(p.result) for p in result.query.placements]
async def _query_building_placement_fast( self, ability: AbilityData, positions: List[Union[Point2, Point3]], ignore_resources: bool = True) -> List[ActionResult]: """ :param ability: :param positions: :param ignore_resources: """ result = await self._execute(query=query_pb.RequestQuery( placements=(query_pb.RequestQueryBuildingPlacement( ability_id=ability.id.value, target_pos=position.as_Point2D) for position in positions), ignore_resource_requirements=ignore_resources, )) # Success enum value is 1, see https://github.com/Blizzard/s2client-proto/blob/9906df71d6909511907d8419b33acc1a3bd51ec0/s2clientprotocol/error.proto#L7 return [p.result == 1 for p in result.query.placements]