# Path: pysc2/lib/point.py
# class Point(collections.namedtuple("Point", ["x", "y"])):
# class Rect(collections.namedtuple("Rect", ["t", "l", "b", "r"])):
#   def build(cls, obj):
#   def unit_rand(cls):
#   def assign_to(self, obj):
#   def dist(self, other):
#   def dist_sq(self, other):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def abs(self):
#   def len(self):
#   def scale(self, target_len):
#   def scale_max_size(self, max_size):
#   def scale_min_size(self, min_size):
#   def min_dim(self):
#   def max_dim(self):
#   def transpose(self):
#   def rotate_deg(self, angle):
#   def rotate_rad(self, angle):
#   def rotate_rand(self, angle=180):
#   def contained_circle(self, pt, radius):
#   def bound(self, p1, p2=None):
#   def __str__(self):
#   def __neg__(self):
#   def __add__(self, pt_or_val):
#   def __sub__(self, pt_or_val):
#   def __mul__(self, pt_or_val):
#   def __truediv__(self, pt_or_val):
#   def __floordiv__(self, pt_or_val):
#   def __new__(cls, *args):
#   def __str__(self):
#   def center(self):
#   def top(self):
#   def left(self):
#   def bottom(self):
#   def right(self):
#   def width(self):
#   def height(self):
#   def tl(self):
#   def br(self):
#   def tr(self):
#   def bl(self):
#   def diagonal(self):
#   def size(self):
#   def area(self):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def contains_point(self, pt):
#   def contains_circle(self, pt, radius):
#   def intersects_circle(self, pt, radius):


import collections
import numbers
import enum
import numpy
import six
from pysc2.lib import point
from s2clientprotocol import spatial_pb2 as sc_spatial
from s2clientprotocol import ui_pb2 as sc_ui
def spatial(action, action_space):
  """Choose the action space for the action proto."""
  if action_space == ActionSpace.FEATURES:
    return action.action_feature_layer
  elif action_space == ActionSpace.RGB:
    return action.action_render
  else:
    raise ValueError("Unexpected value for action_space: %s" % action_space)


def no_op(action, action_space):
  del action, action_space


def move_camera(action, action_space, minimap):
  """Move the camera."""
  minimap.assign_to(spatial(action, action_space).camera_move.center_minimap)


def select_point(action, action_space, select_point_act, screen):
  """Select a unit at a point."""
  select = spatial(action, action_space).unit_selection_point
  screen.assign_to(select.selection_screen_coord)
  select.type = select_point_act


def select_rect(action, action_space, select_add, screen, screen2):
  """Select units within a rectangle."""
  select = spatial(action, action_space).unit_selection_rect
  out_rect = select.selection_screen_coord.add()

# Path: pysc2/lib/point.py
# class Point(collections.namedtuple("Point", ["x", "y"])):
# class Rect(collections.namedtuple("Rect", ["t", "l", "b", "r"])):
#   def build(cls, obj):
#   def unit_rand(cls):
#   def assign_to(self, obj):
#   def dist(self, other):
#   def dist_sq(self, other):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def abs(self):
#   def len(self):
#   def scale(self, target_len):
#   def scale_max_size(self, max_size):
#   def scale_min_size(self, min_size):
#   def min_dim(self):
#   def max_dim(self):
#   def transpose(self):
#   def rotate_deg(self, angle):
#   def rotate_rad(self, angle):
#   def rotate_rand(self, angle=180):
#   def contained_circle(self, pt, radius):
#   def bound(self, p1, p2=None):
#   def __str__(self):
#   def __neg__(self):
#   def __add__(self, pt_or_val):
#   def __sub__(self, pt_or_val):
#   def __mul__(self, pt_or_val):
#   def __truediv__(self, pt_or_val):
#   def __floordiv__(self, pt_or_val):
#   def __new__(cls, *args):
#   def __str__(self):
#   def center(self):
#   def top(self):
#   def left(self):
#   def bottom(self):
#   def right(self):
#   def width(self):
#   def height(self):
#   def tl(self):
#   def br(self):
#   def tr(self):
#   def bl(self):
#   def diagonal(self):
#   def size(self):
#   def area(self):
#   def round(self):
#   def floor(self):
#   def ceil(self):
#   def contains_point(self, pt):
#   def contains_circle(self, pt, radius):
#   def intersects_circle(self, pt, radius):


# Path: pysc2/lib/actions.py
import collections
import numbers
import enum
import numpy
import six
from pysc2.lib import point
from s2clientprotocol import spatial_pb2 as sc_spatial
from s2clientprotocol import ui_pb2 as sc_ui

def spatial(action, action_space):
  """Choose the action space for the action proto."""
  if action_space == ActionSpace.FEATURES:
    return action.action_feature_layer
  elif action_space == ActionSpace.RGB:
    return action.action_render
  else:
    raise ValueError("Unexpected value for action_space: %s" % action_space)


def no_op(action, action_space):
  del action, action_space


def move_camera(action, action_space, minimap):
  """Move the camera."""
  minimap.assign_to(spatial(action, action_space).camera_move.center_minimap)


def select_point(action, action_space, select_point_act, screen):
  """Select a unit at a point."""
  select = spatial(action, action_space).unit_selection_point
  screen.assign_to(select.selection_screen_coord)
  select.type = select_point_act


def select_rect(action, action_space, select_add, screen, screen2):
  """Select units within a rectangle."""
  select = spatial(action, action_space).unit_selection_rect
  out_rect = select.selection_screen_coord.add()

  screen_rect = point.Rect(screen, screen2)