from .component import Component, ComponentType class SpriteSpec: def __init__( self, ms_per_frame: int, top_x: int, top_y: int, end_x: int, end_y: int, frames: int, ): self.ms_per_frame = ms_per_frame self.frames = frames self.top_x = top_x self.top_y = top_y self.end_x = end_x self.end_y = end_y def to_dict(self) -> dict: return { "ms_per_frame": self.ms_per_frame, "top_x": self.top_x, "top_y": self.top_y, "end_x": self.end_x, "end_y": self.end_y, "frames": self.frames, } def __repr__(self) -> str: return f"SpriteSpec(ms_per_frame={self.ms_per_frame}, top_x={self.top_x}, top_y={self.top_y}, end_x={self.end_x}, end_y={self.end_y}, frames={self.frames})" class SpriteSheet(Component): def __init__( self, source: str, state_to_spritespec: dict[str, SpriteSpec], initial_state: str, ): super().__init__(ComponentType.SPRITESHEET) self.source = source self.state_to_spritespec = state_to_spritespec # these are only really used for client initialization self.initial_state = initial_state self.current_frame = 0 self.last_update = 0 def __repr__(self) -> str: return f"SpriteSheet(source={self.source}, state_to_spritespec={self.state_to_spritespec}, initial_state={self.initial_state}, current_frame={self.current_frame}, last_update={self.last_update})" def to_dict(self) -> dict: return { "source": self.source, "current_frame": self.current_frame, "last_update": self.last_update, "current_state": self.initial_state, "state_to_spritespec": { k: v.to_dict() for k, v in self.state_to_spritespec.items() }, }