예제 #1
0
    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)
예제 #2
0
 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
예제 #3
0
 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))