diff --git a/docs/API_REFERENCE_DYNAMIC.md b/docs/API_REFERENCE_DYNAMIC.md deleted file mode 100644 index 4cf6ae8..0000000 --- a/docs/API_REFERENCE_DYNAMIC.md +++ /dev/null @@ -1,1607 +0,0 @@ -# McRogueFace API Reference - -*Generated on 2025-12-28 14:29:42* - -*This documentation was dynamically generated from the compiled module.* - -## Table of Contents - -- [Functions](#functions) -- [Classes](#classes) - - [Animation](#animation) - - [Arc](#arc) - - [Caption](#caption) - - [Circle](#circle) - - [Color](#color) - - [ColorLayer](#colorlayer) - - [Drawable](#drawable) - - [Entity](#entity) - - [EntityCollection](#entitycollection) - - [FOV](#fov) - - [Font](#font) - - [Frame](#frame) - - [Grid](#grid) - - [GridPoint](#gridpoint) - - [GridPointState](#gridpointstate) - - [Line](#line) - - [Scene](#scene) - - [Sprite](#sprite) - - [Texture](#texture) - - [TileLayer](#tilelayer) - - [Timer](#timer) - - [UICollection](#uicollection) - - [UICollectionIter](#uicollectioniter) - - [UIEntityCollectionIter](#uientitycollectioniter) - - [Vector](#vector) - - [Window](#window) -- [Constants](#constants) - -## Functions - -### `createScene(name: str) -> None` - -Create a new empty scene. - -Note: - -**Arguments:** -- `name`: Unique name for the new scene - -**Returns:** None - -**Raises:** ValueError: If a scene with this name already exists The scene is created but not made active. Use setScene() to switch to it. - -### `createSoundBuffer(filename: str) -> int` - -Load a sound effect from a file and return its buffer ID. - -**Arguments:** -- `filename`: Path to the sound file (WAV, OGG, FLAC) - -**Returns:** int: Buffer ID for use with playSound() - -**Raises:** RuntimeError: If the file cannot be loaded - -### `currentScene() -> str` - -Get the name of the currently active scene. - -**Returns:** str: Name of the current scene - -### `delTimer(name: str) -> None` - -Stop and remove a timer. - -Note: - -**Arguments:** -- `name`: Timer identifier to remove - -**Returns:** None No error is raised if the timer doesn't exist. - -### `end_benchmark() -> str` - -Stop benchmark capture and write data to JSON file. - -Note: - -**Returns:** str: The filename of the written benchmark data - -**Raises:** RuntimeError: If no benchmark is currently running Returns the auto-generated filename (e.g., 'benchmark_12345_20250528_143022.json') - -### `exit() -> None` - -Cleanly shut down the game engine and exit the application. - -Note: - -**Returns:** None This immediately closes the window and terminates the program. - -### `find(name: str, scene: str = None) -> UIDrawable | None` - -Find the first UI element with the specified name. - -Note: - -**Arguments:** -- `name`: Exact name to search for -- `scene`: Scene to search in (default: current scene) - -**Returns:** Frame, Caption, Sprite, Grid, or Entity if found; None otherwise Searches scene UI elements and entities within grids. - -### `findAll(pattern: str, scene: str = None) -> list` - -Find all UI elements matching a name pattern. - -Note: - -**Arguments:** -- `pattern`: Name pattern with optional wildcards (* matches any characters) -- `scene`: Scene to search in (default: current scene) - -**Returns:** list: All matching UI elements and entities - -### `getMetrics() -> dict` - -Get current performance metrics. - -**Returns:** dict: Performance data with keys: frame_time (last frame duration in seconds), avg_frame_time (average frame time), fps (frames per second), draw_calls (number of draw calls), ui_elements (total UI element count), visible_elements (visible element count), current_frame (frame counter), runtime (total runtime in seconds) - -### `getMusicVolume() -> int` - -Get the current music volume level. - -**Returns:** int: Current volume (0-100) - -### `getSoundVolume() -> int` - -Get the current sound effects volume level. - -**Returns:** int: Current volume (0-100) - -### `keypressScene(handler: callable) -> None` - -Set the keyboard event handler for the current scene. - -Note: - -**Arguments:** -- `handler`: Callable that receives (key_name: str, is_pressed: bool) - -**Returns:** None - -### `loadMusic(filename: str) -> None` - -Load and immediately play background music from a file. - -Note: - -**Arguments:** -- `filename`: Path to the music file (WAV, OGG, FLAC) - -**Returns:** None Only one music track can play at a time. Loading new music stops the current track. - -### `log_benchmark(message: str) -> None` - -Add a log message to the current benchmark frame. - -Note: - -**Arguments:** -- `message`: Text to associate with the current frame - -**Returns:** None - -**Raises:** RuntimeError: If no benchmark is currently running Messages appear in the 'logs' array of each frame in the output JSON. - -### `playSound(buffer_id: int) -> None` - -Play a sound effect using a previously loaded buffer. - -**Arguments:** -- `buffer_id`: Sound buffer ID returned by createSoundBuffer() - -**Returns:** None - -**Raises:** RuntimeError: If the buffer ID is invalid - -### `sceneUI(scene: str = None) -> list` - -Get all UI elements for a scene. - -**Arguments:** -- `scene`: Scene name. If None, uses current scene - -**Returns:** list: All UI elements (Frame, Caption, Sprite, Grid) in the scene - -**Raises:** KeyError: If the specified scene doesn't exist - -### `setDevConsole(enabled: bool) -> None` - -Enable or disable the developer console overlay. - -Note: - -**Arguments:** -- `enabled`: True to enable the console (default), False to disable - -**Returns:** None When disabled, the grave/tilde key will not open the console. Use this to ship games without debug features. - -### `setMusicVolume(volume: int) -> None` - -Set the global music volume. - -**Arguments:** -- `volume`: Volume level from 0 (silent) to 100 (full volume) - -**Returns:** None - -### `setScale(multiplier: float) -> None` - -Scale the game window size. - -Note: - -**Arguments:** -- `multiplier`: Scale factor (e.g., 2.0 for double size) - -**Returns:** None The internal resolution remains 1024x768, but the window is scaled. This is deprecated - use Window.resolution instead. - -### `setScene(scene: str, transition: str = None, duration: float = 0.0) -> None` - -Switch to a different scene with optional transition effect. - -**Arguments:** -- `scene`: Name of the scene to switch to -- `transition`: Transition type ('fade', 'slide_left', 'slide_right', 'slide_up', 'slide_down') -- `duration`: Transition duration in seconds (default: 0.0 for instant) - -**Returns:** None - -**Raises:** KeyError: If the scene doesn't exist ValueError: If the transition type is invalid - -### `setSoundVolume(volume: int) -> None` - -Set the global sound effects volume. - -**Arguments:** -- `volume`: Volume level from 0 (silent) to 100 (full volume) - -**Returns:** None - -### `setTimer(name: str, handler: callable, interval: int) -> None` - -Create or update a recurring timer. - -Note: - -**Arguments:** -- `name`: Unique identifier for the timer -- `handler`: Function called with (runtime: float) parameter -- `interval`: Time between calls in milliseconds - -**Returns:** None If a timer with this name exists, it will be replaced. The handler receives the total runtime in seconds as its argument. - -### `start_benchmark() -> None` - -Start capturing benchmark data to a file. - -Note: - -**Returns:** None - -**Raises:** RuntimeError: If a benchmark is already running Benchmark filename is auto-generated from PID and timestamp. Use end_benchmark() to stop and get filename. - -### `step(dt: float = None) -> float` - -Advance simulation time (headless mode only). - -Note: - -**Arguments:** -- `dt`: Time to advance in seconds. If None, advances to the next scheduled event (timer/animation). - -**Returns:** float: Actual time advanced in seconds. Returns 0.0 in windowed mode. In windowed mode, this is a no-op and returns 0.0. Use this for deterministic simulation control in headless/testing scenarios. - -## Classes - -### Animation - -Animation object for animating UI properties - -**Methods:** - -#### `complete() -> None` - -Complete the animation immediately by jumping to the final value. - -Note: - -**Returns:** None Sets elapsed = duration and applies target value immediately. Completion callback will be called if set. - -#### `get_current_value() -> Any` - -Get the current interpolated value of the animation. - -Note: - -**Returns:** Any: Current value (type depends on property: float, int, Color tuple, Vector tuple, or str) Return type matches the target property type. For sprite_index returns int, for pos returns (x, y), for fill_color returns (r, g, b, a). - -#### `hasValidTarget() -> bool` - -Check if the animation still has a valid target. - -Note: - -**Returns:** bool: True if the target still exists, False if it was destroyed Animations automatically clean up when targets are destroyed. Use this to check if manual cleanup is needed. - -#### `start(target: UIDrawable, conflict_mode: str = 'replace') -> None` - -Start the animation on a target UI element. - -Note: - -**Arguments:** -- `target`: The UI element to animate (Frame, Caption, Sprite, Grid, or Entity) -- `conflict_mode`: How to handle conflicts if property is already animating: 'replace' (default) - complete existing animation and start new one; 'queue' - wait for existing animation to complete; 'error' - raise RuntimeError if property is busy - -**Returns:** None - -**Raises:** RuntimeError: When conflict_mode='error' and property is already animating The animation will automatically stop if the target is destroyed. - -#### `update(delta_time: float) -> bool` - -Update the animation by the given time delta. - -Note: - -**Arguments:** -- `delta_time`: Time elapsed since last update in seconds - -**Returns:** bool: True if animation is still running, False if complete Typically called by AnimationManager automatically. Manual calls only needed for custom animation control. - -### Arc - -*Inherits from: Drawable* - -Arc(center=None, radius=0, start_angle=0, end_angle=90, color=None, thickness=1, **kwargs) - -An arc UI element for drawing curved line segments. - -Args: - center (tuple, optional): Center position as (x, y). Default: (0, 0) - radius (float, optional): Arc radius in pixels. Default: 0 - start_angle (float, optional): Starting angle in degrees. Default: 0 - end_angle (float, optional): Ending angle in degrees. Default: 90 - color (Color, optional): Arc color. Default: White - thickness (float, optional): Line thickness. Default: 1.0 - -Keyword Args: - on_click (callable): Click handler. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - -Attributes: - center (Vector): Center position - radius (float): Arc radius - start_angle (float): Starting angle in degrees - end_angle (float): Ending angle in degrees - color (Color): Arc color - thickness (float): Line thickness - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Caption - -*Inherits from: Drawable* - -Caption(pos=None, font=None, text='', **kwargs) - -A text display UI element with customizable font and styling. - -Args: - pos (tuple, optional): Position as (x, y) tuple. Default: (0, 0) - font (Font, optional): Font object for text rendering. Default: engine default font - text (str, optional): The text content to display. Default: '' - -Keyword Args: - fill_color (Color): Text fill color. Default: (255, 255, 255, 255) - outline_color (Color): Text outline color. Default: (0, 0, 0, 255) - outline (float): Text outline thickness. Default: 0 - font_size (float): Font size in points. Default: 16 - click (callable): Click event handler. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - x (float): X position override. Default: 0 - y (float): Y position override. Default: 0 - -Attributes: - text (str): The displayed text content - x, y (float): Position in pixels - pos (Vector): Position as a Vector object - font (Font): Font used for rendering - font_size (float): Font size in points - fill_color, outline_color (Color): Text appearance - outline (float): Outline thickness - click (callable): Click event handler - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - w, h (float): Read-only computed size based on text and font - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Circle - -*Inherits from: Drawable* - -Circle(radius=0, center=None, fill_color=None, outline_color=None, outline=0, **kwargs) - -A circle UI element for drawing filled or outlined circles. - -Args: - radius (float, optional): Circle radius in pixels. Default: 0 - center (tuple, optional): Center position as (x, y). Default: (0, 0) - fill_color (Color, optional): Fill color. Default: White - outline_color (Color, optional): Outline color. Default: Transparent - outline (float, optional): Outline thickness. Default: 0 (no outline) - -Keyword Args: - on_click (callable): Click handler. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - -Attributes: - radius (float): Circle radius - center (Vector): Center position - fill_color (Color): Fill color - outline_color (Color): Outline color - outline (float): Outline thickness - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Color - -SFML Color Object - -**Methods:** - -#### `from_hex(hex_string: str) -> Color` - -Create a Color from a hexadecimal string. - -Note: - -**Arguments:** -- `hex_string`: Hex color string (e.g., '#FF0000', 'FF0000', '#AABBCCDD' for RGBA) - -**Returns:** Color: New Color object with values from hex string - -**Raises:** ValueError: If hex string is not 6 or 8 characters (RGB or RGBA) This is a class method. Call as Color.from_hex('#FF0000') - -#### `lerp(other: Color, t: float) -> Color` - -Linearly interpolate between this color and another. - -Note: - -**Arguments:** -- `other`: The target Color to interpolate towards -- `t`: Interpolation factor (0.0 = this color, 1.0 = other color). Automatically clamped to [0.0, 1.0] - -**Returns:** Color: New Color representing the interpolated value All components (r, g, b, a) are interpolated independently - -#### `to_hex() -> str` - -Convert this Color to a hexadecimal string. - -Note: - -**Returns:** str: Hex string in format '#RRGGBB' or '#RRGGBBAA' (if alpha < 255) Alpha component is only included if not fully opaque (< 255) - -### ColorLayer - -ColorLayer(z_index=-1, grid_size=None) - -A grid layer that stores RGBA colors per cell. - -Args: - z_index (int): Render order. Negative = below entities. Default: -1 - grid_size (tuple): Dimensions as (width, height). Default: parent grid size - -Attributes: - z_index (int): Layer z-order relative to entities - visible (bool): Whether layer is rendered - grid_size (tuple): Layer dimensions (read-only) - -Methods: - at(x, y): Get color at cell position - set(x, y, color): Set color at cell position - fill(color): Fill entire layer with color - -**Methods:** - -#### `apply_perspective(entity, visible=None, discovered=None, unknown=None)` - -Bind this layer to an entity for automatic FOV updates. - -#### `at(x, y) -> Color` - -Get the color at cell position (x, y). - -#### `clear_perspective()` - -Remove the perspective binding from this layer. - -#### `draw_fov(source, radius=None, fov=None, visible=None, discovered=None, unknown=None)` - -Paint cells based on field-of-view visibility from source position. - -Note: Layer must be attached to a grid for FOV calculation. - -#### `fill(color)` - -Fill the entire layer with the specified color. - -#### `fill_rect(pos, size, color)` - -Fill a rectangular region with a color. - -**Arguments:** -- `color`: Color object or (r, g, b[, a]) tuple - -#### `set(x, y, color)` - -Set the color at cell position (x, y). - -#### `update_perspective()` - -Redraw FOV based on the bound entity's current position. -Call this after the entity moves to update the visibility layer. - -### Drawable - -Base class for all drawable UI elements - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Entity - -Entity(grid_pos=None, texture=None, sprite_index=0, **kwargs) - -A game entity that exists on a grid with sprite rendering. - -Args: - grid_pos (tuple, optional): Grid position as (x, y) tuple. Default: (0, 0) - texture (Texture, optional): Texture object for sprite. Default: default texture - sprite_index (int, optional): Index into texture atlas. Default: 0 - -Keyword Args: - grid (Grid): Grid to attach entity to. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - name (str): Element name for finding. Default: None - x (float): X grid position override. Default: 0 - y (float): Y grid position override. Default: 0 - -Attributes: - pos (tuple): Grid position as (x, y) tuple - x, y (float): Grid position coordinates - draw_pos (tuple): Pixel position for rendering - gridstate (GridPointState): Visibility state for grid points - sprite_index (int): Current sprite index - visible (bool): Visibility state - opacity (float): Opacity value - name (str): Element name - -**Methods:** - -#### `at(...)` - -#### `die(...)` - -Remove this entity from its grid - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `index(...)` - -Return the index of this entity in its grid's entity collection - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `path_to(x: int, y: int) -> bool` - -Find and follow path to target position using A* pathfinding. - -**Arguments:** -- `x`: Target X coordinate -- `y`: Target Y coordinate - -**Returns:** True if a path was found and the entity started moving, False otherwise The entity will automatically move along the path over multiple frames. Call this again to change the target or repath. - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -#### `update_visibility() -> None` - -Update entity's visibility state based on current FOV. -Recomputes which cells are visible from the entity's position and updates -the entity's gridstate to track explored areas. This is called automatically -when the entity moves if it has a grid with perspective set. - -#### `visible_entities(fov=None, radius=None) -> list[Entity]` - -Get list of other entities visible from this entity's position. - -**Returns:** List of Entity objects that are within field of view. Computes FOV from this entity's position and returns all other entities whose positions fall within the visible area. - -### EntityCollection - -Iterable, indexable collection of Entities - -**Methods:** - -#### `append(entity)` - -Add an entity to the end of the collection. - -#### `count(entity) -> int` - -Count occurrences of entity in the collection. - -#### `extend(iterable)` - -Add all entities from an iterable to the collection. - -#### `find(name) -> entity or list` - -Find entities by name. - -**Returns:** Single entity if exact match, list if wildcard, None if not found. - -#### `index(entity) -> int` - -Return index of first occurrence of entity. Raises ValueError if not found. - -#### `insert(index, entity)` - -Insert entity at index. Like list.insert(), indices past the end append. - -#### `pop([index]) -> entity` - -Remove and return entity at index (default: last entity). - -#### `remove(entity)` - -Remove first occurrence of entity. Raises ValueError if not found. - -### FOV - -*Inherits from: IntEnum* - -**Methods:** - -#### `as_integer_ratio(...)` - -Return a pair of integers, whose ratio is equal to the original int. -The ratio is in lowest terms and has a positive denominator. ->>> (10).as_integer_ratio() -(10, 1) ->>> (-10).as_integer_ratio() -(-10, 1) ->>> (0).as_integer_ratio() -(0, 1) - -#### `bit_count(...)` - -Number of ones in the binary representation of the absolute value of self. -Also known as the population count. ->>> bin(13) -'0b1101' ->>> (13).bit_count() -3 - -#### `bit_length(...)` - -Number of bits necessary to represent self in binary. ->>> bin(37) -'0b100101' ->>> (37).bit_length() -6 - -#### `conjugate(...)` - -Returns self, the complex conjugate of any int. - -#### `from_bytes(...)` - -Return the integer represented by the given array of bytes. - bytes - Holds the array of bytes to convert. The argument must either - support the buffer protocol or be an iterable object producing bytes. - Bytes and bytearray are examples of built-in objects that support the - buffer protocol. - byteorder - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. - signed - Indicates whether two's complement is used to represent the integer. - -#### `is_integer(...)` - -Returns True. Exists for duck type compatibility with float.is_integer. - -#### `to_bytes(...)` - -Return an array of bytes representing an integer. - length - Length of bytes object to use. An OverflowError is raised if the - integer is not representable with the given number of bytes. Default - is length 1. - byteorder - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. - signed - Determines whether two's complement is used to represent the integer. - If signed is False and a negative integer is given, an OverflowError - is raised. - -### Font - -SFML Font Object - -**Methods:** - -### Frame - -*Inherits from: Drawable* - -Frame(pos=None, size=None, **kwargs) - -A rectangular frame UI element that can contain other drawable elements. - -Args: - pos (tuple, optional): Position as (x, y) tuple. Default: (0, 0) - size (tuple, optional): Size as (width, height) tuple. Default: (0, 0) - -Keyword Args: - fill_color (Color): Background fill color. Default: (0, 0, 0, 128) - outline_color (Color): Border outline color. Default: (255, 255, 255, 255) - outline (float): Border outline thickness. Default: 0 - click (callable): Click event handler. Default: None - children (list): Initial list of child drawable elements. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - x (float): X position override. Default: 0 - y (float): Y position override. Default: 0 - w (float): Width override. Default: 0 - h (float): Height override. Default: 0 - clip_children (bool): Whether to clip children to frame bounds. Default: False - cache_subtree (bool): Cache rendering to texture for performance. Default: False - -Attributes: - x, y (float): Position in pixels - w, h (float): Size in pixels - pos (Vector): Position as a Vector object - fill_color, outline_color (Color): Visual appearance - outline (float): Border thickness - click (callable): Click event handler - children (list): Collection of child drawable elements - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - clip_children (bool): Whether to clip children to frame bounds - cache_subtree (bool): Cache subtree rendering to texture - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Grid - -*Inherits from: Drawable* - -Grid(pos=None, size=None, grid_size=None, texture=None, **kwargs) - -A grid-based UI element for tile-based rendering and entity management. - -Args: - pos (tuple, optional): Position as (x, y) tuple. Default: (0, 0) - size (tuple, optional): Size as (width, height) tuple. Default: auto-calculated from grid_size - grid_size (tuple, optional): Grid dimensions as (grid_x, grid_y) tuple. Default: (2, 2) - texture (Texture, optional): Texture containing tile sprites. Default: default texture - -Keyword Args: - fill_color (Color): Background fill color. Default: None - click (callable): Click event handler. Default: None - center_x (float): X coordinate of center point. Default: 0 - center_y (float): Y coordinate of center point. Default: 0 - zoom (float): Zoom level for rendering. Default: 1.0 - perspective (int): Entity perspective index (-1 for omniscient). Default: -1 - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - x (float): X position override. Default: 0 - y (float): Y position override. Default: 0 - w (float): Width override. Default: auto-calculated - h (float): Height override. Default: auto-calculated - grid_x (int): Grid width override. Default: 2 - grid_y (int): Grid height override. Default: 2 - -Attributes: - x, y (float): Position in pixels - w, h (float): Size in pixels - pos (Vector): Position as a Vector object - size (tuple): Size as (width, height) tuple - center (tuple): Center point as (x, y) tuple - center_x, center_y (float): Center point coordinates - zoom (float): Zoom level for rendering - grid_size (tuple): Grid dimensions (width, height) in tiles - grid_x, grid_y (int): Grid dimensions - texture (Texture): Tile texture atlas - fill_color (Color): Background color - entities (EntityCollection): Collection of entities in the grid - perspective (int): Entity perspective index - click (callable): Click event handler - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - -**Methods:** - -#### `add_layer(type: str, z_index: int = -1, texture: Texture = None) -> ColorLayer | TileLayer` - -Add a new layer to the grid. - -**Arguments:** -- `type`: Layer type ('color' or 'tile') -- `z_index`: Render order. Negative = below entities, >= 0 = above entities. Default: -1 -- `texture`: Texture for tile layers. Required for 'tile' type. - -**Returns:** The created ColorLayer or TileLayer object. - -#### `at(...)` - -#### `compute_astar_path(x1: int, y1: int, x2: int, y2: int, diagonal_cost: float = 1.41) -> List[Tuple[int, int]]` - -Compute A* path between two points. - -**Arguments:** -- `x1`: Starting X coordinate -- `y1`: Starting Y coordinate -- `x2`: Target X coordinate -- `y2`: Target Y coordinate -- `diagonal_cost`: Cost of diagonal movement (default: 1.41) - -**Returns:** List of (x, y) tuples representing the path, empty list if no path exists Alternative A* implementation. Prefer find_path() for consistency. - -#### `compute_dijkstra(root_x: int, root_y: int, diagonal_cost: float = 1.41) -> None` - -Compute Dijkstra map from root position. - -**Arguments:** -- `root_x`: X coordinate of the root/target -- `root_y`: Y coordinate of the root/target -- `diagonal_cost`: Cost of diagonal movement (default: 1.41) - -#### `compute_fov(x: int, y: int, radius: int = 0, light_walls: bool = True, algorithm: int = FOV_BASIC) -> None` - -Compute field of view from a position. - -**Arguments:** -- `x`: X coordinate of the viewer -- `y`: Y coordinate of the viewer -- `radius`: Maximum view distance (0 = unlimited) -- `light_walls`: Whether walls are lit when visible -- `algorithm`: FOV algorithm to use (FOV_BASIC, FOV_DIAMOND, FOV_SHADOW, FOV_PERMISSIVE_0-8) - -#### `entities_in_radius(x: float, y: float, radius: float) -> list[Entity]` - -Query entities within radius using spatial hash (O(k) where k = nearby entities). - -**Arguments:** -- `x`: Center X coordinate -- `y`: Center Y coordinate -- `radius`: Search radius - -**Returns:** List of Entity objects within the radius. - -#### `find_path(x1: int, y1: int, x2: int, y2: int, diagonal_cost: float = 1.41) -> List[Tuple[int, int]]` - -Find A* path between two points. - -**Arguments:** -- `x1`: Starting X coordinate -- `y1`: Starting Y coordinate -- `x2`: Target X coordinate -- `y2`: Target Y coordinate -- `diagonal_cost`: Cost of diagonal movement (default: 1.41) - -**Returns:** List of (x, y) tuples representing the path, empty list if no path exists Uses A* algorithm with walkability from grid cells. - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `get_dijkstra_distance(x: int, y: int) -> Optional[float]` - -Get distance from Dijkstra root to position. - -**Arguments:** -- `x`: X coordinate to query -- `y`: Y coordinate to query - -**Returns:** Distance as float, or None if position is unreachable or invalid Must call compute_dijkstra() first. - -#### `get_dijkstra_path(x: int, y: int) -> List[Tuple[int, int]]` - -Get path from position to Dijkstra root. - -**Arguments:** -- `x`: Starting X coordinate -- `y`: Starting Y coordinate - -**Returns:** List of (x, y) tuples representing path to root, empty if unreachable Must call compute_dijkstra() first. Path includes start but not root position. - -#### `is_in_fov(x: int, y: int) -> bool` - -Check if a cell is in the field of view. - -**Arguments:** -- `x`: X coordinate to check -- `y`: Y coordinate to check - -**Returns:** True if the cell is visible, False otherwise Must call compute_fov() first to calculate visibility. - -#### `layer(z_index: int) -> ColorLayer | TileLayer | None` - -Get a layer by its z_index. - -**Arguments:** -- `z_index`: The z_index of the layer to find. - -**Returns:** The layer with the specified z_index, or None if not found. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `remove_layer(layer: ColorLayer | TileLayer) -> None` - -Remove a layer from the grid. - -**Arguments:** -- `layer`: The layer to remove. - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### GridPoint - -UIGridPoint object - -**Methods:** - -### GridPointState - -UIGridPointState object - -**Methods:** - -### Line - -*Inherits from: Drawable* - -Line(start=None, end=None, thickness=1.0, color=None, **kwargs) - -A line UI element for drawing straight lines between two points. - -Args: - start (tuple, optional): Starting point as (x, y). Default: (0, 0) - end (tuple, optional): Ending point as (x, y). Default: (0, 0) - thickness (float, optional): Line thickness in pixels. Default: 1.0 - color (Color, optional): Line color. Default: White - -Keyword Args: - on_click (callable): Click handler. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - -Attributes: - start (Vector): Starting point - end (Vector): Ending point - thickness (float): Line thickness - color (Color): Line color - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Scene - -Base class for object-oriented scenes - -**Methods:** - -#### `activate() -> None` - -Make this the active scene. - -Note: - -**Returns:** None Deactivates the current scene and activates this one. Scene transitions and lifecycle callbacks are triggered. - -#### `register_keyboard(callback: callable) -> None` - -Register a keyboard event handler function. - -Note: - -**Arguments:** -- `callback`: Function that receives (key: str, pressed: bool) when keyboard events occur - -**Returns:** None Alternative to setting on_key property. Handler is called for both key press and release events. - -### Sprite - -*Inherits from: Drawable* - -Sprite(pos=None, texture=None, sprite_index=0, **kwargs) - -A sprite UI element that displays a texture or portion of a texture atlas. - -Args: - pos (tuple, optional): Position as (x, y) tuple. Default: (0, 0) - texture (Texture, optional): Texture object to display. Default: default texture - sprite_index (int, optional): Index into texture atlas. Default: 0 - -Keyword Args: - scale (float): Uniform scale factor. Default: 1.0 - scale_x (float): Horizontal scale factor. Default: 1.0 - scale_y (float): Vertical scale factor. Default: 1.0 - click (callable): Click event handler. Default: None - visible (bool): Visibility state. Default: True - opacity (float): Opacity (0.0-1.0). Default: 1.0 - z_index (int): Rendering order. Default: 0 - name (str): Element name for finding. Default: None - x (float): X position override. Default: 0 - y (float): Y position override. Default: 0 - -Attributes: - x, y (float): Position in pixels - pos (Vector): Position as a Vector object - texture (Texture): The texture being displayed - sprite_index (int): Current sprite index in texture atlas - scale (float): Uniform scale factor - scale_x, scale_y (float): Individual scale factors - click (callable): Click event handler - visible (bool): Visibility state - opacity (float): Opacity value - z_index (int): Rendering order - name (str): Element name - w, h (float): Read-only computed size based on texture and scale - -**Methods:** - -#### `get_bounds() -> tuple` - -Get the bounding rectangle of this drawable element. - -Note: - -**Returns:** tuple: (x, y, width, height) representing the element's bounds The bounds are in screen coordinates and account for current position and size. - -#### `move(dx: float, dy: float) -> None` - -Move the element by a relative offset. - -Note: - -**Arguments:** -- `dx`: Horizontal offset in pixels -- `dy`: Vertical offset in pixels - -#### `resize(width: float, height: float) -> None` - -Resize the element to new dimensions. - -Note: - -**Arguments:** -- `width`: New width in pixels -- `height`: New height in pixels - -### Texture - -SFML Texture Object - -**Methods:** - -### TileLayer - -TileLayer(z_index=-1, texture=None, grid_size=None) - -A grid layer that stores sprite indices per cell. - -Args: - z_index (int): Render order. Negative = below entities. Default: -1 - texture (Texture): Sprite atlas for tile rendering. Default: None - grid_size (tuple): Dimensions as (width, height). Default: parent grid size - -Attributes: - z_index (int): Layer z-order relative to entities - visible (bool): Whether layer is rendered - texture (Texture): Tile sprite atlas - grid_size (tuple): Layer dimensions (read-only) - -Methods: - at(x, y): Get tile index at cell position - set(x, y, index): Set tile index at cell position - fill(index): Fill entire layer with tile index - -**Methods:** - -#### `at(x, y) -> int` - -Get the tile index at cell position (x, y). Returns -1 if no tile. - -#### `fill(index)` - -Fill the entire layer with the specified tile index. - -#### `fill_rect(pos, size, index)` - -Fill a rectangular region with a tile index. - -#### `set(x, y, index)` - -Set the tile index at cell position (x, y). Use -1 for no tile. - -### Timer - -Timer(name, callback, interval, once=False) - -Create a timer that calls a function at regular intervals. - -Args: - name (str): Unique identifier for the timer - callback (callable): Function to call - receives (timer, runtime) args - interval (int): Time between calls in milliseconds - once (bool): If True, timer stops after first call. Default: False - -Attributes: - interval (int): Time between calls in milliseconds - remaining (int): Time until next call in milliseconds (read-only) - paused (bool): Whether timer is paused (read-only) - active (bool): Whether timer is active and not paused (read-only) - callback (callable): The callback function - once (bool): Whether timer stops after firing once - -Methods: - pause(): Pause the timer, preserving time remaining - resume(): Resume a paused timer - cancel(): Stop and remove the timer - restart(): Reset timer to start from beginning - -Example: - def on_timer(timer, runtime): - print(f'Timer {timer} fired at {runtime}ms') - if runtime > 5000: - timer.cancel() - - timer = mcrfpy.Timer('my_timer', on_timer, 1000) - timer.pause() # Pause timer - timer.resume() # Resume timer - timer.once = True # Make it one-shot - -**Methods:** - -#### `cancel() -> None` - -Cancel the timer and remove it from the timer system. - -Note: - -**Returns:** None The timer will no longer fire and cannot be restarted. The callback will not be called again. - -#### `pause() -> None` - -Pause the timer, preserving the time remaining until next trigger. - -Note: - -**Returns:** None The timer can be resumed later with resume(). Time spent paused does not count toward the interval. - -#### `restart() -> None` - -Restart the timer from the beginning. - -Note: - -**Returns:** None Resets the timer to fire after a full interval from now, regardless of remaining time. - -#### `resume() -> None` - -Resume a paused timer from where it left off. - -Note: - -**Returns:** None Has no effect if the timer is not paused. Timer will fire after the remaining time elapses. - -### UICollection - -Iterable, indexable collection of UI objects - -**Methods:** - -#### `append(element)` - -Add an element to the end of the collection. - -#### `count(element) -> int` - -Count occurrences of element in the collection. - -#### `extend(iterable)` - -Add all elements from an iterable to the collection. - -#### `find(name, recursive=False) -> element or list` - -Find elements by name. - -**Returns:** Single element if exact match, list if wildcard, None if not found. - -#### `index(element) -> int` - -Return index of first occurrence of element. Raises ValueError if not found. - -#### `insert(index, element)` - -Insert element at index. Like list.insert(), indices past the end append. - -Note: If using z_index for sorting, insertion order may not persist after -the next render. Use name-based .find() for stable element access. - -#### `pop([index]) -> element` - -Remove and return element at index (default: last element). - -Note: If using z_index for sorting, indices may shift after render. -Use name-based .find() for stable element access. - -#### `remove(element)` - -Remove first occurrence of element. Raises ValueError if not found. - -### UICollectionIter - -Iterator for a collection of UI objects - -**Methods:** - -### UIEntityCollectionIter - -Iterator for a collection of UI objects - -**Methods:** - -### Vector - -SFML Vector Object - -**Methods:** - -#### `angle() -> float` - -Get the angle of this vector in radians. - -**Returns:** float: Angle in radians from positive x-axis - -#### `copy() -> Vector` - -Create a copy of this vector. - -**Returns:** Vector: New Vector object with same x and y values - -#### `distance_to(other: Vector) -> float` - -Calculate the distance to another vector. - -**Arguments:** -- `other`: The other vector - -**Returns:** float: Distance between the two vectors - -#### `dot(other: Vector) -> float` - -Calculate the dot product with another vector. - -**Arguments:** -- `other`: The other vector - -**Returns:** float: Dot product of the two vectors - -#### `floor() -> Vector` - -Return a new vector with floored (integer) coordinates. - -Note: - -**Returns:** Vector: New Vector with floor(x) and floor(y) Useful for grid-based positioning. For a hashable tuple, use the .int property instead. - -#### `magnitude() -> float` - -Calculate the length/magnitude of this vector. - -**Returns:** float: The magnitude of the vector - -#### `magnitude_squared() -> float` - -Calculate the squared magnitude of this vector. - -Note: - -**Returns:** float: The squared magnitude (faster than magnitude()) Use this for comparisons to avoid expensive square root calculation. - -#### `normalize() -> Vector` - -Return a unit vector in the same direction. - -Note: - -**Returns:** Vector: New normalized vector with magnitude 1.0 For zero vectors (magnitude 0.0), returns a zero vector rather than raising an exception - -### Window - -Window singleton for accessing and modifying the game window properties - -**Methods:** - -#### `center() -> None` - -Center the window on the screen. - -Note: - -**Returns:** None Only works in windowed mode. Has no effect when fullscreen or in headless mode. - -#### `get() -> Window` - -Get the Window singleton instance. - -Note: - -**Returns:** Window: The global window object This is a class method. Call as Window.get(). There is only one window instance per application. - -#### `screenshot(filename: str = None) -> bytes | None` - -Take a screenshot of the current window contents. - -Note: - -**Arguments:** -- `filename`: Optional path to save screenshot. If omitted, returns raw RGBA bytes. - -**Returns:** bytes | None: Raw RGBA pixel data if no filename given, otherwise None after saving Screenshot is taken at the actual window resolution. Use after render loop update for current frame. - -## Constants - diff --git a/docs/api_reference_dynamic.html b/docs/api_reference_dynamic.html index d41d591..14e58f6 100644 --- a/docs/api_reference_dynamic.html +++ b/docs/api_reference_dynamic.html @@ -108,7 +108,7 @@
Generated on 2025-12-28 14:29:42
+Generated on 2025-11-29 10:12:05
This documentation was dynamically generated from the compiled module.
Raises: RuntimeError: If a benchmark is already running Benchmark filename is auto-generated from PID and timestamp. Use end_benchmark() to stop and get filename.
step(dt: float = None) -> floatAdvance simulation time (headless mode only). - -Note:
-Returns: float: Actual time advanced in seconds. Returns 0.0 in windowed mode. In windowed mode, this is a no-op and returns 0.0. Use this for deterministic simulation control in headless/testing scenarios.
-start(target: UIDrawable, conflict_mode: str = 'replace') -> Nonestart(target: UIDrawable) -> NoneStart the animation on a target UI element. Note:
Returns: None
-Raises: RuntimeError: When conflict_mode='error' and property is already animating The animation will automatically stop if the target is destroyed.
+Returns: None The animation will automatically stop if the target is destroyed. Call AnimationManager.update(delta_time) each frame to progress animations.
apply_perspective(entity, visible=None, discovered=None, unknown=None)Bind this layer to an entity for automatic FOV updates.
-at(x, y) -> ColorGet the color at cell position (x, y).
clear_perspective()Remove the perspective binding from this layer.
-draw_fov(source, radius=None, fov=None, visible=None, discovered=None, unknown=None)Paint cells based on field-of-view visibility from source position. - -Note: Layer must be attached to a grid for FOV calculation.
-fill(color)Fill the entire layer with the specified color.
fill_rect(pos, size, color)Fill a rectangular region with a color.
-set(x, y, color)Set the color at cell position (x, y).
update_perspective()Redraw FOV based on the bound entity's current position. -Call this after the entity moves to update the visibility layer.
-visible_entities(fov=None, radius=None) -> list[Entity]Get list of other entities visible from this entity's position.
-Returns: List of Entity objects that are within field of view. Computes FOV from this entity's position and returns all other entities whose positions fall within the visible area.
-Inherits from: IntEnum
-as_integer_ratio(...)Return a pair of integers, whose ratio is equal to the original int. -The ratio is in lowest terms and has a positive denominator. ->>> (10).as_integer_ratio() -(10, 1) ->>> (-10).as_integer_ratio() -(-10, 1) ->>> (0).as_integer_ratio() -(0, 1)
-bit_count(...)Number of ones in the binary representation of the absolute value of self. -Also known as the population count. ->>> bin(13) -'0b1101' ->>> (13).bit_count() -3
-bit_length(...)Number of bits necessary to represent self in binary. ->>> bin(37) -'0b100101' ->>> (37).bit_length() -6
-conjugate(...)Returns self, the complex conjugate of any int.
-from_bytes(...)Return the integer represented by the given array of bytes. - bytes - Holds the array of bytes to convert. The argument must either - support the buffer protocol or be an iterable object producing bytes. - Bytes and bytearray are examples of built-in objects that support the - buffer protocol. - byteorder - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. - signed - Indicates whether two's complement is used to represent the integer.
-is_integer(...)Returns True. Exists for duck type compatibility with float.is_integer.
-to_bytes(...)Return an array of bytes representing an integer. - length - Length of bytes object to use. An OverflowError is raised if the - integer is not representable with the given number of bytes. Default - is length 1. - byteorder - The byte order used to represent the integer. If byteorder is 'big', - the most significant byte is at the beginning of the byte array. If - byteorder is 'little', the most significant byte is at the end of the - byte array. To request the native byte order of the host system, use - sys.byteorder as the byte order value. Default is to use 'big'. - signed - Determines whether two's complement is used to represent the integer. - If signed is False and a negative integer is given, an OverflowError - is raised.
-SFML Font Object
@@ -1220,17 +1084,6 @@ Attributes:entities_in_radius(x: float, y: float, radius: float) -> list[Entity]Query entities within radius using spatial hash (O(k) where k = nearby entities).
-Returns: List of Entity objects within the radius.
-find_path(x1: int, y1: int, x2: int, y2: int, diagonal_cost: float = 1.41) -> List[Tuple[int, int]]Find A* path between two points.
@@ -1348,7 +1201,7 @@ Args: color (Color, optional): Line color. Default: White Keyword Args: - on_click (callable): Click handler. Default: None + click (callable): Click handler. Default: None visible (bool): Visibility state. Default: True opacity (float): Opacity (0.0-1.0). Default: 1.0 z_index (int): Rendering order. Default: 0 @@ -1410,6 +1263,14 @@ Note:Returns: None Deactivates the current scene and activates this one. Scene transitions and lifecycle callbacks are triggered.
get_ui() -> UICollectionGet the UI element collection for this scene. + +Note:
+Returns: UICollection: Collection of UI elements (Frames, Captions, Sprites, Grids) in this scene Use to add, remove, or iterate over UI elements. Changes are reflected immediately.
+register_keyboard(callback: callable) -> NoneRegister a keyboard event handler function. @@ -1418,7 +1279,7 @@ Note:
Returns: None Alternative to setting on_key property. Handler is called for both key press and release events.
+Returns: None Alternative to overriding on_keypress() method. Handler is called for both key press and release events.
Fill the entire layer with the specified tile index.
-fill_rect(pos, size, index)Fill a rectangular region with a tile index.
-set(x, y, index)Set the tile index at cell position (x, y). Use -1 for no tile.
@@ -1779,6 +1635,19 @@ Note:FOV_BASIC (int): 0FOV_DIAMOND (int): 1FOV_PERMISSIVE_0 (int): 3FOV_PERMISSIVE_1 (int): 4FOV_PERMISSIVE_2 (int): 5FOV_PERMISSIVE_3 (int): 6FOV_PERMISSIVE_4 (int): 7FOV_PERMISSIVE_5 (int): 8FOV_PERMISSIVE_6 (int): 9FOV_PERMISSIVE_7 (int): 10FOV_PERMISSIVE_8 (int): 11FOV_RESTRICTIVE (int): 12FOV_SHADOW (int): 2