class DemoRenderable(Renderable): def __init__(self, f): self.f = pygame.image.load(f) self._position = Position() self.logger = logging.getLogger(__name__) @property def surface(self): return self.f @property def position(self): return self._position def handle_keypressed(self, event): if event[pygame.K_UP]: self.logger.info("KEYDOWN UP") self._position.shift(0, -1) if event[pygame.K_DOWN]: self.logger.info("KEYDOWN DOWN") self._position.shift(0, 1) if event[pygame.K_RIGHT]: self.logger.info("KEYDOWN RIGHT") self._position.shift(1, 0) if event[pygame.K_LEFT]: self.logger.info("KEYDOWN LEFT") self._position.shift(-1, 0)
def test_layer_scaling(): layer: Layer = Layer(motion_scale=(2, -2)) dr = DemoRenderable(pygame.surface.Surface((10, 10))) ms = MockSurface((-10, 10)) layer.add_renderable(dr) layer.blit(Position(5, 5), ms)
def handle_click(self, event: pygame.event.Event) -> bool: """ Function which takes a click event as a parameter, checks if the position falls within the object's surface If the click hits this item, call the internal child implementation for __handle_click Returns true or false if the click was handled by this object; allowing for differing event consumption. """ if self.position_intersects(Position(*event.pos)): self.__handle_click(event) return True return False
def handle_mousemove(self, event: pygame.event.Event) -> bool: """ Function which takes a mouse move event as a parameter, checks if the position falls within the object's surface If the mousemove is in the region, update the internal hover state Returns true or false if the click was handled by this object; allowing for differing event consumption. """ if self.position_intersects(Position(*event.pos)): self.__is_hovered = True self.__time_hovered = datetime.now() return True return False
def test_position_shift(): p = Position() p.shift(1, 1) assert p.x == 1 assert p.y == 1 p.shift(-2, -1) assert p.x == -1 assert p.y == 0
def __init__(self, f): self.f = pygame.image.load(f) self._position = Position() self.logger = logging.getLogger(__name__)
def __init__(self, f): self.f = f self._position = Position()
def __init__(self, f, a): self.f = f self._position = Position() self._anchor = a
def test_position_intersects(anchor, test_click_position, expected): dr = DemoRenderable(pygame.surface.Surface((10, 10)), anchor) assert dr.position_intersects(Position(*test_click_position)) == expected
def position(self): return Position()
def __init__(self): self.position: Position = Position() self.layers: Dict[int, Layer] = {} self.ordered_priorities: List[int] = []