def poll(self): key_get = self._key_conversions.get mouse_button_get = self._mouse_conversions.get window_height = conf.get_resolution()[1] for event in sdl2_ext.get_events(): if event.type == sdl2.SDL_QUIT: raise SystemExit elif event.type == sdl2.SDL_KEYDOWN: self.process_key_down(key_get(event.key.keysym.sym)) elif event.type == sdl2.SDL_KEYUP: self.process_key_up(key_get(event.key.keysym.sym)) elif event.type == sdl2.SDL_MOUSEMOTION: event = event.motion x = event.x y = window_height - event.y self.process_mouse_motion((x, y)) elif event.type == sdl2.SDL_MOUSEBUTTONUP: event = event.button x = event.x y = window_height - event.y button = mouse_button_get(event.button) self.process_mouse_button_up(button, (x, y)) elif event.type == sdl2.SDL_MOUSEBUTTONDOWN: event = event.button x = event.x y = window_height - event.y button = mouse_button_get(event.button) self.process_mouse_button_down(button, (x, y)) self.process_long_press() self.process_mouse_longpress()
def poll(self): key_get = self._key_conversions.get mouse_button_get = self._mouse_conversions.get window_height = conf.get_resolution()[1] pg = pygame for event in pygame.event.get(): if event.type == pg.QUIT: raise SystemExit elif event.type == pg.KEYDOWN: self.process_key_down(key_get(event.key)) elif event.type == pg.KEYUP: self.process_key_up(key_get(event.key)) elif event.type == pg.MOUSEMOTION: x, y = event.pos y = window_height - y self.process_mouse_motion((x, y)) elif event.type == pg.MOUSEBUTTONUP: x, y = event.pos y = window_height - y button = mouse_button_get(event.button) self.process_mouse_button_up(button, (x, y)) elif event.type == pg.MOUSEBUTTONDOWN: x, y = event.pos y = window_height - y button = mouse_button_get(event.button) self.process_mouse_button_down(button, (x, y)) self.process_long_press() self.process_mouse_longpress()
def add_bounds(self, *args, **kwds): '''Cria um conjunto de AABB's que representa uma região fechada. Parameters ---------- ''' # Processa argumentos hard = kwds.pop('hard', True) delta = kwds.pop('delta', 10000) use_poly = kwds.pop('use_poly', False) if len(args) == 4: xmin, xmax, ymin, ymax = args elif len(args) == 1: xmin, xmax, ymin, ymax = args[0] elif not args: if 'width' not in kwds: raise TypeError('not enougth parameters to set boundaries') W, H = conf.get_resolution() value = kwds.pop('width') try: N = len(value) if N == 2: dx, dy = value xmin, xmax = dx, W - dx ymin, ymax = dy, H - dy elif N == 4: dx, dy, dx1, dy1 = value xmin, xmax = dx, W - dx1 ymin, ymax = dy, H - dy1 else: raise ValueError('width can have 1, 2 or 4 values') except TypeError: dx = dy = value xmin, xmax = dx, W - dx ymin, ymax = dy, H - dy else: raise TypeError('invalid number of positional arguments') assert xmin < xmax and ymin < ymax, 'invalid bounds' maker = Rectangle if use_poly else AABB up = maker( bbox=(xmin - delta, xmax + delta, ymax, ymax + delta), **kwds) down = maker( bbox=(xmin - delta, xmax + delta, ymin - delta, ymin), **kwds) left = maker( bbox=(xmin - delta, xmin, ymin, ymax), **kwds) right = maker( bbox=(xmax, xmax + delta, ymin, ymax), **kwds) for box in [up, down, left, right]: box.make_static() assert box._invmass == 0.0 self.add([up, down, left, right]) self._bounds = (left, right, up, down) self._hard_bounds = hard
def aabb_margin(self, *args, width=500, **kwargs): """ Creates four AABBs that encloses the visible area. It accepts a few different signatures: aabb_margin(width): Creates a margin around screen with the given width in pixels. Width can be positive or negative (for a margin outside the visible area of the screen. aabb_margin(width_x, width_y): Set different widths in the x and y directions. aabb_margin(width_left, width_bottom, width_right, width_top): Set width in each direction to a different value. """ W, H = conf.get_resolution() N = len(args) if N == 0: dx = dy = dx_ = dy_ = 0 elif N == 1: dx = dy = dx_ = dy_ = args[0] elif N == 2: dx, dy = args dx_, dy_ = dx, dy elif N == 4: dx, dy, dx_, dy_ = args else: raise ValueError('width can have 1, 2 or 4 values') xmin, xmax = dx, W - dx_ ymin, ymax = dy, H - dy_ maker = objects.AABB width = width up = maker((xmin - width, xmax + width, ymax, ymax + width), **kwargs) down = maker((xmin - width, xmax + width, ymin - width, ymin), **kwargs) left = maker((xmin - width, xmin, ymin, ymax), **kwargs) right = maker((xmax, xmax + width, ymin, ymax), **kwargs) for box in [up, down, left, right]: box.make_static() self.__add([up, down, left, right]) return left, right, up, down