Пример #1
0
 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]
Пример #2
0
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
Пример #3
0
    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]
Пример #4
0
    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]