"""Checkerboard data source for visual pattern generation.""" from engine.data_sources.sources import DataSource, SourceItem class CheckerboardDataSource(DataSource): """Data source that generates a checkerboard pattern. Creates a grid of alternating characters, useful for testing motion effects and camera movement. The pattern is static; movement comes from camera panning. """ def __init__( self, width: int = 200, height: int = 200, square_size: int = 10, char_a: str = "#", char_b: str = " ", ): """Initialize checkerboard data source. Args: width: Total pattern width in characters height: Total pattern height in lines square_size: Size of each checker square in characters char_a: Character for "filled" squares (default: '#') char_b: Character for "empty" squares (default: ' ') """ self.width = width self.height = height self.square_size = square_size self.char_a = char_a self.char_b = char_b @property def name(self) -> str: return "checkerboard" @property def is_dynamic(self) -> bool: return False def fetch(self) -> list[SourceItem]: """Generate the checkerboard pattern as a single SourceItem.""" lines = [] for y in range(self.height): line_chars = [] for x in range(self.width): # Determine which square this position belongs to square_x = x // self.square_size square_y = y // self.square_size # Alternate pattern based on parity of square coordinates if (square_x + square_y) % 2 == 0: line_chars.append(self.char_a) else: line_chars.append(self.char_b) lines.append("".join(line_chars)) content = "\n".join(lines) return [SourceItem(content=content, source="checkerboard", timestamp="0")]