pybeamshow/effects/line.py

46 lines
1.2 KiB
Python
Raw Permalink Normal View History

2023-02-24 18:21:21 +01:00
from effects.effect import MovingEffect
from typing import Any, Iterable, Optional, Tuple
from util import XYCoord
from util.color import Colors, ColorGenerator
from util.transform import PositionGenerator
import pygame as pg
class Lines(MovingEffect):
def __init__(
self,
bounds: pg.Rect,
vectors: Iterable[Tuple[XYCoord, XYCoord, ColorGenerator]],
thickness: int,
2023-02-24 18:59:24 +01:00
mover: Optional[PositionGenerator] = None,
2023-02-24 18:21:21 +01:00
*groups: pg.sprite.Group,
) -> None:
self.vectors = vectors
self.thickness = thickness
image = pg.Surface(bounds.size)
image.fill(Colors.Black)
image.set_colorkey(Colors.Black)
super().__init__(
image,
pg.Rect(bounds),
mover,
*groups,
)
self.bounds = bounds
self.update(is_beat=False)
def update(self, *args: Any, **kwargs: Any) -> None:
self.rect.topleft = self.mover.send((self.rect.size, kwargs["is_beat"]))
self.image.fill(Colors.Black)
for line in self.vectors:
pg.draw.line(
self.image,
next(line[2]),
line[0],
line[1],
width=self.thickness,
)