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>
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 forscene: 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 totransition: 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 timerhandler: Function called with (runtime: float) parameterinterval: 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 arccolor: Arc colorend_angle: Ending angle in degreesglobal_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 pixelsstart_angle: Starting angle in degreesthickness: Line thicknessvisible: 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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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 textfont_size: Font size (integer) in pointsglobal_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 elementson_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 borderoutline_color: Outline color of the textparent: 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) vectortext: The text displayedvisible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.x: X coordinate of top-left cornery: Y coordinate of top-left cornerz_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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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 circlefill_color: Fill color of the circleglobal_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 circleparent: 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 pixelsvisible: 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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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 towardst: 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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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 entityname: Name for finding elementsopacity: Opacity (0.0 = transparent, 1.0 = opaque)pos: Entity position (integer grid coordinates)sprite_index: Sprite index on the texture on the displaysprite_number: Sprite index (DEPRECATED: use sprite_index instead)visible: Visibility flagx: Entity x positiony: 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 pixelsdy: 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 coordinatey: 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 pixelsheight: 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 termsimag: the imaginary part of a complex numbernumerator: the numerator of a rational number in lowest termsreal: 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 performancechildren: UICollection of objects on top of this oneclip_children: Whether to clip children to frame boundsfill_color: Fill color of the rectangleglobal_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 rectanglehovered(read-only): Whether mouse is currently over this element (read-only). Updated automatically by the engine during mouse movement.name: Name for finding elementson_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 borderoutline_color: Outline color of the rectangleparent: 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 Vectorvisible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.w: width of the rectanglex: X coordinate of top-left cornery: Y coordinate of top-left cornerz_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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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-coordinatecenter_y: center of the view Y-coordinatechildren: UICollection of UIDrawable children (speech bubbles, effects, overlays)entities: EntityCollection of entities on this gridfill_color: Background fill color of the gridfov: 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 dimensiongrid_y: Grid y dimensionh: visible widget heighthovered(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_indexname: Name for finding elementson_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 Vectorposition: Position of the grid (x, y)size: Size of the grid (width, height)texture: Texture of the gridvisible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.w: visible widget widthx: top-left corner X-coordinatey: top-left corner Y-coordinatez_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: -1texture: 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 coordinatey1: Starting Y coordinatex2: Target X coordinatey2: Target Y coordinatediagonal_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/targetroot_y: Y coordinate of the root/targetdiagonal_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 viewery: Y coordinate of the viewerradius: Maximum view distance (0 = unlimited)light_walls: Whether walls are lit when visiblealgorithm: 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 coordinatey: Center Y coordinateradius: 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 coordinatey1: Starting Y coordinatex2: Target X coordinatey2: Target Y coordinatediagonal_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 queryy: 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 coordinatey: 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 checky: 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 pixelsdy: 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 pixelsheight: New height in pixels
GridPoint
UIGridPoint object
Properties:
entities(read-only): List of entities at this grid cell (read-only)transparent: Is the GridPoint transparentwalkable: Is the GridPoint walkable
Methods:
GridPointState
UIGridPointState object
Properties:
discovered: Has the GridPointState been discoveredpoint: 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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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 elementson_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 Vectorscale: Uniform size factorscale_x: Horizontal scale factorscale_y: Vertical scale factorsprite_index: Which sprite on the texture is shownsprite_number: Sprite index (DEPRECATED: use sprite_index instead)texture: Texture objectvisible: Whether the object is visible (bool). Invisible objects are not rendered or clickable.x: X coordinate of top-left cornery: Y coordinate of top-left cornerz_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 pixelsdy: Vertical offset in pixels
resize(width: float, height: float) -> None
Resize the element to new dimensions.
Note:
Arguments:
width: New width in pixelsheight: 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.