def update(self, timer, world, events): self.functionality(events, world) way_point = Vector(self.aim) - Vector(self.rect.center) bearing = way_point.normalize() self.image = pygame.transform.rotate(self.image_master, way_point.angle_to(Vector(1, 0))) self.rect = Rectangle.get_rect(self.image, self.rect.center) if not self.should_retract: self.hook_image = pygame.transform.rotate( self.hook_image_master, way_point.angle_to(Vector(1, 0))) self.hook_rect = Rectangle.get_rect(self.hook_image, self.hook_rect.center) self.hitmask = get_hitmask(self.hook_rect, self.hook_image, 0) self.x = self.rect.x self.y = self.rect.y if self.shooter: self.shoot(timer) self.should_retract = True self.should_aim = False elif not self.should_retract: self.hook_rect = Rectangle.get_rect( self.hook_image, (self.rect.center[0] + bearing.x * self.displacement, self.rect.center[1] + bearing.y * self.displacement)) if self.should_retract and not self.shooter: self.retract(timer) if self.should_release: self.release(timer)
def _init_image(self, data: ProjectileData, direction: Vector2) -> None: self._base_image = images.get_image(data.image_file) if data.angled_image: angle = direction.angle_to(Vector2(0, 0)) self._base_image = rotate(self._base_image, angle) if data.rotating_image: self._process_image = self._rotate_image else: self._process_image = lambda x: x
def __init__(self, p1, p2): super().__init__(all_sprites) self.add(all_sprites) Wall.walls.append(self) x1, y1 = p1 x2, y2 = p2 self.normal = Vector2(x2 - x1, y2 - y1) # угол, на который повёрнута стена angle = Vector2.angle_to(self.normal, Vector2(0, 1)) # вектор нормали к стене self.normal = Vector2(y2 - y1, x1 - x2) # выбор цвета стены color = Wall.colors.pop(0) Wall.colors += [color] self.image = load_image("{}.png".format(color)) self.image = pygame.transform.scale( self.image, (10, int(self.normal.length()) + 5)) self.image = pygame.transform.rotate(self.image, angle) self.mask = pygame.mask.from_surface(self.image) x, y = min(x1, x2), min(y1, y2) w, h = self.image.get_width(), self.image.get_height() self.rect = pygame.Rect((x, y), (w, h))