class PatternMeta: def __init__(self, id, name, frames, pixels, flags, fps): self.id = id self.name = name self.frames = frames self.pixels = pixels self.flags = flags self.fps = fps def to_json(self): return { "id": self.id, "name": self.name, "frames": self.frames, "pixels": self.pixels, "flags": self.flags, "fps": self.fps } @classmethod def from_json(cls, json): return cls( json["id"], json["name"], json["frames"], json["pixels"], json["flags"], json["fps"] ) class PatternBuilder: def __init__(self, name, fps=1): self.pixels = [] self.name = name self.fps = fps self.frame_count = 1 self.pixel_count = 0 self.frame_pixels = 0 def add_pixel(self, r, g, b): if self.frame_count == 1: self.pixel_count += 1 self.frame_pixels += 1 self.pixels += [r, g, b] def next_frame(self): self.frame_count += 1 self.frame_pixels = 0 def is_valid(self): self.frame_pixels == self.pixel_count def to_binary_string(self): return ''.join([chr(item) for item in self.pixels])