McRogueFace/docs/API_REFERENCE_DYNAMIC.md
John McCardle e64c5c147f docs: Fix property extraction and add Scene documentation
Doc generator fixes (tools/generate_dynamic_docs.py):
- Add types.GetSetDescriptorType detection for C++ extension properties
- All 22 classes with properties now have documented Properties sections
- Read-only detection via "read-only" docstring convention

Scene class documentation (src/PySceneObject.h):
- Expanded tp_doc with constructor, properties, lifecycle callbacks
- Documents key advantage: on_key works on ANY scene
- Includes usage examples for basic and subclass patterns

CLAUDE.md additions:
- New section "Adding Documentation for New Python Types"
- Step-by-step guide for tp_doc, PyMethodDef, PyGetSetDef
- Documentation extraction details and troubleshooting

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-29 19:48:21 -05:00

66 KiB

McRogueFace API Reference

Generated on 2025-12-29 14:24:58

This documentation was dynamically generated from the compiled module.

Table of Contents

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

Properties:

  • duration (read-only): Animation duration in seconds (float, read-only). Total time for the animation to complete.
  • elapsed (read-only): Elapsed time in seconds (float, read-only). Time since the animation started.
  • is_complete (read-only): Whether animation is complete (bool, read-only). True when elapsed >= duration or complete() was called.
  • is_delta (read-only): Whether animation uses delta mode (bool, read-only). In delta mode, the target value is added to the starting value.
  • property (read-only): Target property name (str, read-only). The property being animated (e.g., 'pos', 'opacity', 'sprite_index').

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • center: Center position of the arc
  • color: Arc color
  • end_angle: Ending angle in degrees
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding this element.
  • on_click: Callable executed when arc is clicked.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: Position as a Vector (same as center).
  • radius: Arc radius in pixels
  • start_angle: Starting angle in degrees
  • thickness: Line thickness
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • z_index: Z-order for rendering (lower values rendered first).

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • fill_color: Fill color of the text
  • font_size: Font size (integer) in points
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding elements
  • on_click: Callable executed when object is clicked. Function receives (x, y) coordinates of click.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • outline: Thickness of the border
  • outline_color: Outline color of the text
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: (x, y) vector
  • text: The text displayed
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • x: X coordinate of top-left corner
  • y: Y coordinate of top-left corner
  • z_index: Z-order for rendering (lower values rendered first). Automatically triggers scene resort when changed.

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • center: Center position of the circle
  • fill_color: Fill color of the circle
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding this element.
  • on_click: Callable executed when circle is clicked.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • outline: Outline thickness (0 for no outline)
  • outline_color: Outline color of the circle
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: Position as a Vector (same as center).
  • radius: Circle radius in pixels
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • z_index: Z-order for rendering (lower values rendered first).

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

Properties:

  • a: Alpha component (0-255, where 0=transparent, 255=opaque). Automatically clamped to valid range.
  • b: Blue component (0-255). Automatically clamped to valid range.
  • g: Green component (0-255). Automatically clamped to valid range.
  • r: Red component (0-255). Automatically clamped to valid range.

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

Properties:

  • grid_size: Layer dimensions as (width, height) tuple.
  • visible: Whether the layer is rendered.
  • z_index: Layer z-order. Negative values render below entities.

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

Properties:

  • on_click: Callable executed when object is clicked. Function receives (x, y) coordinates of click.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • z_index: Z-order for rendering (lower values rendered first). Automatically triggers scene resort when changed.

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

Properties:

  • draw_pos: Entity position (graphically)
  • grid: Grid this entity belongs to. Get: Returns the Grid or None. Set: Assign a Grid to move entity, or None to remove from grid.
  • gridstate: Grid point states for the entity
  • name: Name for finding elements
  • opacity: Opacity (0.0 = transparent, 1.0 = opaque)
  • pos: Entity position (integer grid coordinates)
  • sprite_index: Sprite index on the texture on the display
  • sprite_number: Sprite index (DEPRECATED: use sprite_index instead)
  • visible: Visibility flag
  • x: Entity x position
  • y: Entity y position

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

Properties:

  • denominator: the denominator of a rational number in lowest terms
  • imag: the imaginary part of a complex number
  • numerator: the numerator of a rational number in lowest terms
  • real: the real part of a complex number

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

Properties:

  • family (read-only): Font family name (str, read-only). Retrieved from font metadata.
  • source (read-only): Source filename path (str, read-only). The path used to load this font.

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • cache_subtree: #144: Cache subtree rendering to texture for performance
  • children: UICollection of objects on top of this one
  • clip_children: Whether to clip children to frame bounds
  • fill_color: Fill color of the rectangle
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • h: height of the rectangle
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding elements
  • on_click: Callable executed when object is clicked. Function receives (x, y) coordinates of click.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • outline: Thickness of the border
  • outline_color: Outline color of the rectangle
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: Position as a Vector
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • w: width of the rectangle
  • x: X coordinate of top-left corner
  • y: Y coordinate of top-left corner
  • z_index: Z-order for rendering (lower values rendered first). Automatically triggers scene resort when changed.

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • center: Grid coordinate at the center of the Grid's view (pan)
  • center_x: center of the view X-coordinate
  • center_y: center of the view Y-coordinate
  • children: UICollection of UIDrawable children (speech bubbles, effects, overlays)
  • entities: EntityCollection of entities on this grid
  • fill_color: Background fill color of the grid
  • fov: FOV algorithm for this grid (mcrfpy.FOV enum). Used by entity.updateVisibility() and layer methods when fov=None.
  • fov_radius: Default FOV radius for this grid. Used when radius not specified.
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • grid_size: Grid dimensions (grid_x, grid_y)
  • grid_x: Grid x dimension
  • grid_y: Grid y dimension
  • h: visible widget height
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • hovered_cell: Currently hovered cell as (x, y) tuple, or None if not hovering.
  • layers: List of grid layers (ColorLayer, TileLayer) sorted by z_index
  • name: Name for finding elements
  • on_cell_click: Callback when a grid cell is clicked. Called with (cell_x, cell_y).
  • on_cell_enter: Callback when mouse enters a grid cell. Called with (cell_x, cell_y).
  • on_cell_exit: Callback when mouse exits a grid cell. Called with (cell_x, cell_y).
  • on_click: Callable executed when object is clicked. Function receives (x, y) coordinates of click.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • perspective: Entity whose perspective to use for FOV rendering (None for omniscient view). Setting an entity automatically enables perspective mode.
  • perspective_enabled: Whether to use perspective-based FOV rendering. When True with no valid entity, all cells appear undiscovered.
  • pos: Position of the grid as Vector
  • position: Position of the grid (x, y)
  • size: Size of the grid (width, height)
  • texture: Texture of the grid
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • w: visible widget width
  • x: top-left corner X-coordinate
  • y: top-left corner Y-coordinate
  • z_index: Z-order for rendering (lower values rendered first). Automatically triggers scene resort when changed.
  • zoom: zoom factor for displaying the Grid

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

Properties:

  • entities (read-only): List of entities at this grid cell (read-only)
  • transparent: Is the GridPoint transparent
  • walkable: Is the GridPoint walkable

Methods:

GridPointState

UIGridPointState object

Properties:

  • discovered: Has the GridPointState been discovered
  • point: GridPoint at this position (None if not discovered)
  • visible: Is the GridPointState visible

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • color: Line color as a Color object.
  • end: Ending point of the line as a Vector.
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding this element.
  • on_click: Callable executed when line is clicked.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: Position as a Vector (midpoint of line).
  • start: Starting point of the line as a Vector.
  • thickness: Line thickness in pixels.
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • z_index: Z-order for rendering (lower values rendered first).

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

Scene(name: str)

Object-oriented scene management with lifecycle callbacks.

This is the recommended approach for scene management, replacing module-level functions like createScene(), setScene(), and sceneUI(). Key advantage: you can set on_key handlers on ANY scene, not just the currently active one.

Args: name: Unique identifier for this scene. Used for scene transitions.

Properties: name (str, read-only): Scene's unique identifier. active (bool, read-only): Whether this scene is currently displayed. children (UICollection, read-only): UI elements in this scene. Modify to add/remove elements. on_key (callable): Keyboard handler. Set on ANY scene, regardless of which is active! pos (Vector): Position offset for all UI elements. visible (bool): Whether the scene renders. opacity (float): Scene transparency (0.0-1.0).

Lifecycle Callbacks (override in subclass): on_enter(): Called when scene becomes active via activate(). on_exit(): Called when scene is deactivated (another scene activates). on_keypress(key: str, action: str): Called for keyboard events. Alternative to on_key property. update(dt: float): Called every frame with delta time in seconds. on_resize(width: int, height: int): Called when window is resized.

Example: # Basic usage (replacing module functions): scene = mcrfpy.Scene('main_menu') scene.children.append(mcrfpy.Caption(text='Welcome', pos=(100, 100))) scene.on_key = lambda key, action: print(f'Key: {key}') scene.activate() # Switch to this scene

# Subclassing for lifecycle:
class GameScene(mcrfpy.Scene):
    def on_enter(self):
        print('Game started!')
    def update(self, dt):
        self.player.move(dt)

Properties:

  • active (read-only): Whether this scene is currently active (bool, read-only). Only one scene can be active at a time.
  • children (read-only): UI element collection for this scene (UICollection, read-only). Use to add, remove, or iterate over UI elements. Changes are reflected immediately.
  • name (read-only): Scene name (str, read-only). Unique identifier for this scene.
  • on_key: Keyboard event handler (callable or None). Function receives (key: str, action: str) for keyboard events. Set to None to remove the handler.
  • opacity: Scene opacity (0.0-1.0). Applied to all UI elements during rendering.
  • pos: Scene position offset (Vector). Applied to all UI elements during rendering.
  • visible: Scene visibility (bool). If False, scene is not rendered.

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

Properties:

  • bounds: Bounding rectangle (x, y, width, height) in local coordinates.
  • global_bounds: Bounding rectangle (x, y, width, height) in screen coordinates.
  • global_position (read-only): Global screen position (read-only). Calculates absolute position by walking up the parent chain.
  • hovered (read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.
  • name: Name for finding elements
  • on_click: Callable executed when object is clicked. Function receives (x, y) coordinates of click.
  • on_enter: Callback for mouse enter events. Called with (x, y, button, action) when mouse enters this element's bounds.
  • on_exit: Callback for mouse exit events. Called with (x, y, button, action) when mouse leaves this element's bounds.
  • on_move: Callback for mouse movement within bounds. Called with (x, y, button, action) for each mouse movement while inside. Performance note: Called frequently during movement - keep handlers fast.
  • opacity: Opacity level (0.0 = transparent, 1.0 = opaque). Automatically clamped to valid range [0.0, 1.0].
  • parent: Parent drawable. Get: Returns the parent Frame/Grid if nested, or None if at scene level. Set: Assign a Frame/Grid to reparent, or None to remove from parent.
  • pos: Position as a Vector
  • scale: Uniform size factor
  • scale_x: Horizontal scale factor
  • scale_y: Vertical scale factor
  • sprite_index: Which sprite on the texture is shown
  • sprite_number: Sprite index (DEPRECATED: use sprite_index instead)
  • texture: Texture object
  • visible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.
  • x: X coordinate of top-left corner
  • y: Y coordinate of top-left corner
  • z_index: Z-order for rendering (lower values rendered first). Automatically triggers scene resort when changed.

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

Properties:

  • sheet_height (read-only): Number of sprite rows in the texture sheet (int, read-only). Calculated as texture_height / sprite_height.
  • sheet_width (read-only): Number of sprite columns in the texture sheet (int, read-only). Calculated as texture_width / sprite_width.
  • source (read-only): Source filename path (str, read-only). The path used to load this texture.
  • sprite_count (read-only): Total number of sprites in the texture sheet (int, read-only). Equals sheet_width * sheet_height.
  • sprite_height (read-only): Height of each sprite in pixels (int, read-only). Specified during texture initialization.
  • sprite_width (read-only): Width of each sprite in pixels (int, read-only). Specified during texture initialization.

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

Properties:

  • grid_size: Layer dimensions as (width, height) tuple.
  • texture: Texture atlas for tile sprites.
  • visible: Whether the layer is rendered.
  • z_index: Layer z-order. Negative values render below entities.

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

Properties:

  • active (read-only): Whether the timer is active and not paused (bool, read-only). False if cancelled or paused.
  • callback: The callback function to be called when timer fires (callable). Can be changed while timer is running.
  • interval: Timer interval in milliseconds (int). Must be positive. Can be changed while timer is running.
  • name (read-only): Timer name (str, read-only). Unique identifier for this timer.
  • once: Whether the timer stops after firing once (bool). If False, timer repeats indefinitely.
  • paused (read-only): Whether the timer is paused (bool, read-only). Paused timers preserve their remaining time.
  • remaining (read-only): Time remaining until next trigger in milliseconds (int, read-only). Preserved when timer is paused.

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

Properties:

  • int (read-only): Integer tuple (floor of x and y) for use as dict keys. Read-only.
  • x: X coordinate of the vector (float)
  • y: Y coordinate of the vector (float)

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

Properties:

  • framerate_limit: Frame rate limit in FPS (int, 0 for unlimited). Caps maximum frame rate.
  • fullscreen: Window fullscreen state (bool). Setting this recreates the window.
  • game_resolution: Fixed game resolution as (width, height) tuple. Enables resolution-independent rendering with scaling.
  • resolution: Window resolution as (width, height) tuple. Setting this recreates the window.
  • scaling_mode: Viewport scaling mode (str): 'center' (no scaling), 'stretch' (fill window), or 'fit' (maintain aspect ratio).
  • title: Window title string (str). Displayed in the window title bar.
  • visible: Window visibility state (bool). Hidden windows still process events.
  • vsync: Vertical sync enabled state (bool). Prevents screen tearing but may limit framerate.

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