1157 lines
23 KiB
Markdown
1157 lines
23 KiB
Markdown
# McRogueFace API Reference
|
|
|
|
## Overview
|
|
|
|
McRogueFace Python API
|
|
|
|
Core game engine interface for creating roguelike games with Python.
|
|
|
|
This module provides:
|
|
- Scene management (createScene, setScene, currentScene)
|
|
- UI components (Frame, Caption, Sprite, Grid)
|
|
- Entity system for game objects
|
|
- Audio playback (sound effects and music)
|
|
- Timer system for scheduled events
|
|
- Input handling
|
|
- Performance metrics
|
|
|
|
Example:
|
|
import mcrfpy
|
|
|
|
# Create a new scene
|
|
mcrfpy.createScene('game')
|
|
mcrfpy.setScene('game')
|
|
|
|
# Add UI elements
|
|
frame = mcrfpy.Frame(10, 10, 200, 100)
|
|
caption = mcrfpy.Caption('Hello World', 50, 50)
|
|
mcrfpy.sceneUI().extend([frame, caption])
|
|
|
|
|
|
## Table of Contents
|
|
|
|
- [Functions](#functions)
|
|
- [Scene Management](#scene-management)
|
|
- [Audio](#audio)
|
|
- [UI Utilities](#ui-utilities)
|
|
- [System](#system)
|
|
- [Classes](#classes)
|
|
- [UI Components](#ui-components)
|
|
- [Collections](#collections)
|
|
- [System Types](#system-types)
|
|
- [Other Classes](#other-classes)
|
|
- [Automation Module](#automation-module)
|
|
|
|
## Functions
|
|
|
|
### Scene Management
|
|
|
|
### `createScene(name: str) -> None`
|
|
|
|
Create a new empty scene with the given name.
|
|
|
|
**Arguments:**
|
|
- `name` (*str*): Unique name for the new scene
|
|
|
|
**Raises:** ValueError: If a scene with this name already exists
|
|
|
|
**Note:** The scene is created but not made active. Use setScene() to switch to it.
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.createScene("game_over")
|
|
```
|
|
|
|
---
|
|
|
|
### `setScene(scene: str, transition: str = None, duration: float = 0.0) -> None`
|
|
|
|
Switch to a different scene with optional transition effect.
|
|
|
|
**Arguments:**
|
|
- `scene` (*str*): Name of the scene to switch to
|
|
- `transition` (*str*): Transition type: "fade", "slide_left", "slide_right", "slide_up", "slide_down"
|
|
- `duration` (*float*): Transition duration in seconds (default: 0.0 for instant)
|
|
|
|
**Raises:** KeyError: If the scene doesn't exist
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.setScene("game", "fade", 0.5)
|
|
```
|
|
|
|
---
|
|
|
|
### `currentScene() -> str`
|
|
|
|
Get the name of the currently active scene.
|
|
|
|
**Returns:** str: Name of the current scene
|
|
|
|
**Example:**
|
|
```python
|
|
scene_name = mcrfpy.currentScene()
|
|
```
|
|
|
|
---
|
|
|
|
### `sceneUI(scene: str = None) -> UICollection`
|
|
|
|
Get all UI elements for a scene.
|
|
|
|
**Arguments:**
|
|
- `scene` (*str*): Scene name. If None, uses current scene
|
|
|
|
**Returns:** UICollection: All UI elements in the scene
|
|
|
|
**Raises:** KeyError: If the specified scene doesn't exist
|
|
|
|
**Example:**
|
|
```python
|
|
ui_elements = mcrfpy.sceneUI("game")
|
|
```
|
|
|
|
---
|
|
|
|
### `keypressScene(handler: callable) -> None`
|
|
|
|
Set the keyboard event handler for the current scene.
|
|
|
|
**Arguments:**
|
|
- `handler` (*callable*): Function that receives (key_name: str, is_pressed: bool)
|
|
|
|
**Example:**
|
|
```python
|
|
def on_key(key, pressed):
|
|
if key == "SPACE" and pressed:
|
|
player.jump()
|
|
mcrfpy.keypressScene(on_key)
|
|
```
|
|
|
|
---
|
|
|
|
### Audio
|
|
|
|
### `createSoundBuffer(filename: str) -> int`
|
|
|
|
Load a sound effect from a file and return its buffer ID.
|
|
|
|
**Arguments:**
|
|
- `filename` (*str*): Path to the sound file (WAV, OGG, FLAC)
|
|
|
|
**Returns:** int: Buffer ID for use with playSound()
|
|
|
|
**Raises:** RuntimeError: If the file cannot be loaded
|
|
|
|
**Example:**
|
|
```python
|
|
jump_sound = mcrfpy.createSoundBuffer("assets/jump.wav")
|
|
```
|
|
|
|
---
|
|
|
|
### `loadMusic(filename: str, loop: bool = True) -> None`
|
|
|
|
Load and immediately play background music from a file.
|
|
|
|
**Arguments:**
|
|
- `filename` (*str*): Path to the music file (WAV, OGG, FLAC)
|
|
- `loop` (*bool*): Whether to loop the music (default: True)
|
|
|
|
**Note:** Only one music track can play at a time. Loading new music stops the current track.
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.loadMusic("assets/background.ogg", True)
|
|
```
|
|
|
|
---
|
|
|
|
### `playSound(buffer_id: int) -> None`
|
|
|
|
Play a sound effect using a previously loaded buffer.
|
|
|
|
**Arguments:**
|
|
- `buffer_id` (*int*): Sound buffer ID returned by createSoundBuffer()
|
|
|
|
**Raises:** RuntimeError: If the buffer ID is invalid
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.playSound(jump_sound)
|
|
```
|
|
|
|
---
|
|
|
|
### `getMusicVolume() -> int`
|
|
|
|
Get the current music volume level.
|
|
|
|
**Returns:** int: Current volume (0-100)
|
|
|
|
**Example:**
|
|
```python
|
|
current_volume = mcrfpy.getMusicVolume()
|
|
```
|
|
|
|
---
|
|
|
|
### `getSoundVolume() -> int`
|
|
|
|
Get the current sound effects volume level.
|
|
|
|
**Returns:** int: Current volume (0-100)
|
|
|
|
**Example:**
|
|
```python
|
|
current_volume = mcrfpy.getSoundVolume()
|
|
```
|
|
|
|
---
|
|
|
|
### `setMusicVolume(volume: int) -> None`
|
|
|
|
Set the global music volume.
|
|
|
|
**Arguments:**
|
|
- `volume` (*int*): Volume level from 0 (silent) to 100 (full volume)
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.setMusicVolume(50) # Set to 50% volume
|
|
```
|
|
|
|
---
|
|
|
|
### `setSoundVolume(volume: int) -> None`
|
|
|
|
Set the global sound effects volume.
|
|
|
|
**Arguments:**
|
|
- `volume` (*int*): Volume level from 0 (silent) to 100 (full volume)
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.setSoundVolume(75) # Set to 75% volume
|
|
```
|
|
|
|
---
|
|
|
|
### UI Utilities
|
|
|
|
### `find(name: str, scene: str = None) -> UIDrawable | None`
|
|
|
|
Find the first UI element with the specified name.
|
|
|
|
**Arguments:**
|
|
- `name` (*str*): Exact name to search for
|
|
- `scene` (*str*): Scene to search in (default: current scene)
|
|
|
|
**Returns:** UIDrawable or None: The found element, or None if not found
|
|
|
|
**Note:** Searches scene UI elements and entities within grids.
|
|
|
|
**Example:**
|
|
```python
|
|
button = mcrfpy.find("start_button")
|
|
```
|
|
|
|
---
|
|
|
|
### `findAll(pattern: str, scene: str = None) -> list`
|
|
|
|
Find all UI elements matching a name pattern.
|
|
|
|
**Arguments:**
|
|
- `pattern` (*str*): Name pattern with optional wildcards (* matches any characters)
|
|
- `scene` (*str*): Scene to search in (default: current scene)
|
|
|
|
**Returns:** list: All matching UI elements and entities
|
|
|
|
**Example:**
|
|
```python
|
|
enemies = mcrfpy.findAll("enemy_*")
|
|
```
|
|
|
|
---
|
|
|
|
### System
|
|
|
|
### `exit() -> None`
|
|
|
|
Cleanly shut down the game engine and exit the application.
|
|
|
|
**Note:** This immediately closes the window and terminates the program.
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.exit()
|
|
```
|
|
|
|
---
|
|
|
|
### `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
|
|
|
|
**Example:**
|
|
```python
|
|
metrics = mcrfpy.getMetrics()
|
|
```
|
|
|
|
---
|
|
|
|
### `setTimer(name: str, handler: callable, interval: int) -> None`
|
|
|
|
Create or update a recurring timer.
|
|
|
|
**Arguments:**
|
|
- `name` (*str*): Unique identifier for the timer
|
|
- `handler` (*callable*): Function called with (runtime: float) parameter
|
|
- `interval` (*int*): Time between calls in milliseconds
|
|
|
|
**Note:** If a timer with this name exists, it will be replaced.
|
|
|
|
**Example:**
|
|
```python
|
|
def update_score(runtime):
|
|
score += 1
|
|
mcrfpy.setTimer("score_update", update_score, 1000)
|
|
```
|
|
|
|
---
|
|
|
|
### `delTimer(name: str) -> None`
|
|
|
|
Stop and remove a timer.
|
|
|
|
**Arguments:**
|
|
- `name` (*str*): Timer identifier to remove
|
|
|
|
**Note:** No error is raised if the timer doesn't exist.
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.delTimer("score_update")
|
|
```
|
|
|
|
---
|
|
|
|
### `setScale(multiplier: float) -> None`
|
|
|
|
Scale the game window size.
|
|
|
|
**Arguments:**
|
|
- `multiplier` (*float*): Scale factor (e.g., 2.0 for double size)
|
|
|
|
**Note:** The internal resolution remains 1024x768, but the window is scaled.
|
|
|
|
**Example:**
|
|
```python
|
|
mcrfpy.setScale(2.0) # Double the window size
|
|
```
|
|
|
|
---
|
|
|
|
## Classes
|
|
|
|
### UI Components
|
|
|
|
### class `Frame`
|
|
|
|
A rectangular frame UI element that can contain other drawable elements.
|
|
|
|
#### Methods
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
---
|
|
|
|
### class `Caption`
|
|
|
|
A text display UI element with customizable font and styling.
|
|
|
|
#### Methods
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
---
|
|
|
|
### class `Sprite`
|
|
|
|
A sprite UI element that displays a texture or portion of a texture atlas.
|
|
|
|
#### Methods
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
---
|
|
|
|
### class `Grid`
|
|
|
|
A grid-based tilemap UI element for rendering tile-based levels and game worlds.
|
|
|
|
#### Methods
|
|
|
|
#### `at(x, y)`
|
|
|
|
Get the GridPoint at the specified grid coordinates.
|
|
|
|
**Arguments:**
|
|
- `x` (*int*): Grid x coordinate
|
|
- `y` (*int*): Grid y coordinate
|
|
|
|
**Returns:** GridPoint or None: The grid point at (x, y), or None if out of bounds
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
---
|
|
|
|
### class `Entity`
|
|
|
|
Game entity that can be placed in a Grid.
|
|
|
|
#### Methods
|
|
|
|
#### `die()`
|
|
|
|
Remove this entity from its parent grid.
|
|
|
|
**Note:** The entity object remains valid but is no longer rendered or updated.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
#### `at(x, y)`
|
|
|
|
Check if this entity is at the specified grid coordinates.
|
|
|
|
**Arguments:**
|
|
- `x` (*int*): Grid x coordinate to check
|
|
- `y` (*int*): Grid y coordinate to check
|
|
|
|
**Returns:** bool: True if entity is at position (x, y), False otherwise
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `index()`
|
|
|
|
Get the index of this entity in its parent grid's entity list.
|
|
|
|
**Returns:** int: Index position, or -1 if not in a grid
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
---
|
|
|
|
### Collections
|
|
|
|
### class `EntityCollection`
|
|
|
|
Container for Entity objects in a Grid. Supports iteration and indexing.
|
|
|
|
#### Methods
|
|
|
|
#### `append(entity)`
|
|
|
|
Add an entity to the end of the collection.
|
|
|
|
**Arguments:**
|
|
- `entity` (*Entity*): The entity to add
|
|
|
|
#### `remove(entity)`
|
|
|
|
Remove the first occurrence of an entity from the collection.
|
|
|
|
**Arguments:**
|
|
- `entity` (*Entity*): The entity to remove
|
|
|
|
**Raises:** ValueError: If entity is not in collection
|
|
|
|
#### `count(entity)`
|
|
|
|
Count the number of occurrences of an entity in the collection.
|
|
|
|
**Arguments:**
|
|
- `entity` (*Entity*): The entity to count
|
|
|
|
**Returns:** int: Number of times entity appears in collection
|
|
|
|
#### `index(entity)`
|
|
|
|
Find the index of the first occurrence of an entity.
|
|
|
|
**Arguments:**
|
|
- `entity` (*Entity*): The entity to find
|
|
|
|
**Returns:** int: Index of entity in collection
|
|
|
|
**Raises:** ValueError: If entity is not in collection
|
|
|
|
#### `extend(iterable)`
|
|
|
|
Add all entities from an iterable to the collection.
|
|
|
|
**Arguments:**
|
|
- `iterable` (*Iterable[Entity]*): Entities to add
|
|
|
|
---
|
|
|
|
### class `UICollection`
|
|
|
|
Container for UI drawable elements. Supports iteration and indexing.
|
|
|
|
#### Methods
|
|
|
|
#### `append(drawable)`
|
|
|
|
Add a drawable element to the end of the collection.
|
|
|
|
**Arguments:**
|
|
- `drawable` (*UIDrawable*): The drawable element to add
|
|
|
|
#### `remove(drawable)`
|
|
|
|
Remove the first occurrence of a drawable from the collection.
|
|
|
|
**Arguments:**
|
|
- `drawable` (*UIDrawable*): The drawable to remove
|
|
|
|
**Raises:** ValueError: If drawable is not in collection
|
|
|
|
#### `count(drawable)`
|
|
|
|
Count the number of occurrences of a drawable in the collection.
|
|
|
|
**Arguments:**
|
|
- `drawable` (*UIDrawable*): The drawable to count
|
|
|
|
**Returns:** int: Number of times drawable appears in collection
|
|
|
|
#### `index(drawable)`
|
|
|
|
Find the index of the first occurrence of a drawable.
|
|
|
|
**Arguments:**
|
|
- `drawable` (*UIDrawable*): The drawable to find
|
|
|
|
**Returns:** int: Index of drawable in collection
|
|
|
|
**Raises:** ValueError: If drawable is not in collection
|
|
|
|
#### `extend(iterable)`
|
|
|
|
Add all drawables from an iterable to the collection.
|
|
|
|
**Arguments:**
|
|
- `iterable` (*Iterable[UIDrawable]*): Drawables to add
|
|
|
|
---
|
|
|
|
### class `UICollectionIter`
|
|
|
|
Iterator for UICollection. Automatically created when iterating over a UICollection.
|
|
|
|
---
|
|
|
|
### class `UIEntityCollectionIter`
|
|
|
|
Iterator for EntityCollection. Automatically created when iterating over an EntityCollection.
|
|
|
|
---
|
|
|
|
### System Types
|
|
|
|
### class `Color`
|
|
|
|
RGBA color representation.
|
|
|
|
#### Methods
|
|
|
|
#### `from_hex(hex_string)`
|
|
|
|
Create a Color from a hexadecimal color string.
|
|
|
|
**Arguments:**
|
|
- `hex_string` (*str*): Hex color string (e.g., "#FF0000" or "FF0000")
|
|
|
|
**Returns:** Color: New Color object from hex string
|
|
|
|
**Example:**
|
|
```python
|
|
red = Color.from_hex("#FF0000")
|
|
```
|
|
|
|
#### `to_hex()`
|
|
|
|
Convert this Color to a hexadecimal string.
|
|
|
|
**Returns:** str: Hex color string in format "#RRGGBB"
|
|
|
|
**Example:**
|
|
```python
|
|
hex_str = color.to_hex() # Returns "#FF0000"
|
|
```
|
|
|
|
#### `lerp(other, t)`
|
|
|
|
Linearly interpolate between this color and another.
|
|
|
|
**Arguments:**
|
|
- `other` (*Color*): The color to interpolate towards
|
|
- `t` (*float*): Interpolation factor from 0.0 to 1.0
|
|
|
|
**Returns:** Color: New interpolated Color object
|
|
|
|
**Example:**
|
|
```python
|
|
mixed = red.lerp(blue, 0.5) # 50% between red and blue
|
|
```
|
|
|
|
---
|
|
|
|
### class `Vector`
|
|
|
|
2D vector for positions and directions.
|
|
|
|
#### Methods
|
|
|
|
#### `magnitude()`
|
|
|
|
Calculate the length/magnitude of this vector.
|
|
|
|
**Returns:** float: The magnitude of the vector
|
|
|
|
#### `distance_to(other)`
|
|
|
|
Calculate the distance to another vector.
|
|
|
|
**Arguments:**
|
|
- `other` (*Vector*): The other vector
|
|
|
|
**Returns:** float: Distance between the two vectors
|
|
|
|
#### `dot(other)`
|
|
|
|
Calculate the dot product with another vector.
|
|
|
|
**Arguments:**
|
|
- `other` (*Vector*): The other vector
|
|
|
|
**Returns:** float: Dot product of the two vectors
|
|
|
|
#### `angle()`
|
|
|
|
Get the angle of this vector in radians.
|
|
|
|
**Returns:** float: Angle in radians from positive x-axis
|
|
|
|
#### `magnitude_squared()`
|
|
|
|
Calculate the squared magnitude of this vector.
|
|
|
|
**Returns:** float: The squared magnitude (faster than magnitude())
|
|
|
|
**Note:** Use this for comparisons to avoid expensive square root calculation.
|
|
|
|
#### `copy()`
|
|
|
|
Create a copy of this vector.
|
|
|
|
**Returns:** Vector: New Vector object with same x and y values
|
|
|
|
#### `normalize()`
|
|
|
|
Return a unit vector in the same direction.
|
|
|
|
**Returns:** Vector: New normalized vector with magnitude 1.0
|
|
|
|
**Raises:** ValueError: If vector has zero magnitude
|
|
|
|
---
|
|
|
|
### class `Texture`
|
|
|
|
Texture object for image data.
|
|
|
|
---
|
|
|
|
### class `Font`
|
|
|
|
Font object for text rendering.
|
|
|
|
---
|
|
|
|
### Other Classes
|
|
|
|
### class `Animation`
|
|
|
|
Animate UI element properties over time.
|
|
|
|
#### Properties
|
|
|
|
- **`property`**: str: Name of the property being animated (e.g., "x", "y", "scale")
|
|
- **`duration`**: float: Total duration of the animation in seconds
|
|
- **`elapsed_time`**: float: Time elapsed since animation started (read-only)
|
|
- **`current_value`**: float: Current interpolated value of the animation (read-only)
|
|
- **`is_running`**: bool: True if animation is currently running (read-only)
|
|
- **`is_finished`**: bool: True if animation has completed (read-only)
|
|
|
|
#### Methods
|
|
|
|
#### `update(delta_time)`
|
|
|
|
Update the animation by the given time delta.
|
|
|
|
**Arguments:**
|
|
- `delta_time` (*float*): Time elapsed since last update in seconds
|
|
|
|
**Returns:** bool: True if animation is still running, False if finished
|
|
|
|
#### `start(target)`
|
|
|
|
Start the animation on a target UI element.
|
|
|
|
**Arguments:**
|
|
- `target` (*UIDrawable*): The UI element to animate
|
|
|
|
**Note:** The target must have the property specified in the animation constructor.
|
|
|
|
#### `get_current_value()`
|
|
|
|
Get the current interpolated value of the animation.
|
|
|
|
**Returns:** float: Current animation value between start and end
|
|
|
|
---
|
|
|
|
### class `Drawable`
|
|
|
|
Base class for all drawable UI elements.
|
|
|
|
#### Methods
|
|
|
|
#### `get_bounds()`
|
|
|
|
Get the bounding rectangle of this drawable element.
|
|
|
|
**Returns:** tuple: (x, y, width, height) representing the element's bounds
|
|
|
|
**Note:** The bounds are in screen coordinates and account for current position and size.
|
|
|
|
#### `resize(width, height)`
|
|
|
|
Resize the element to new dimensions.
|
|
|
|
**Arguments:**
|
|
- `width` (*float*): New width in pixels
|
|
- `height` (*float*): New height in pixels
|
|
|
|
**Note:** For Caption and Sprite, this may not change actual size if determined by content.
|
|
|
|
#### `move(dx, dy)`
|
|
|
|
Move the element by a relative offset.
|
|
|
|
**Arguments:**
|
|
- `dx` (*float*): Horizontal offset in pixels
|
|
- `dy` (*float*): Vertical offset in pixels
|
|
|
|
**Note:** This modifies the x and y position properties by the given amounts.
|
|
|
|
---
|
|
|
|
### class `GridPoint`
|
|
|
|
Represents a single tile in a Grid.
|
|
|
|
#### Properties
|
|
|
|
- **`x`**: int: Grid x coordinate of this point
|
|
- **`y`**: int: Grid y coordinate of this point
|
|
- **`texture_index`**: int: Index of the texture/sprite to display at this point
|
|
- **`solid`**: bool: Whether this point blocks movement
|
|
- **`transparent`**: bool: Whether this point allows light/vision through
|
|
- **`color`**: Color: Color tint applied to the texture at this point
|
|
|
|
---
|
|
|
|
### class `GridPointState`
|
|
|
|
State information for a GridPoint.
|
|
|
|
#### Properties
|
|
|
|
- **`visible`**: bool: Whether this point is currently visible to the player
|
|
- **`discovered`**: bool: Whether this point has been discovered/explored
|
|
- **`custom_flags`**: int: Bitfield for custom game-specific flags
|
|
|
|
---
|
|
|
|
### class `Scene`
|
|
|
|
Base class for object-oriented scenes.
|
|
|
|
#### Methods
|
|
|
|
#### `register_keyboard(callable)`
|
|
|
|
Register a keyboard event handler function for the scene.
|
|
|
|
**Arguments:**
|
|
- `callable` (*callable*): Function that takes (key: str, action: str) parameters
|
|
|
|
**Note:** Alternative to overriding the on_keypress method when subclassing Scene objects.
|
|
|
|
**Example:**
|
|
```python
|
|
def handle_keyboard(key, action):
|
|
print(f"Key '{key}' was {action}")
|
|
scene.register_keyboard(handle_keyboard)
|
|
```
|
|
|
|
#### `activate()`
|
|
|
|
Make this scene the active scene.
|
|
|
|
**Note:** Equivalent to calling setScene() with this scene's name.
|
|
|
|
#### `get_ui()`
|
|
|
|
Get the UI element collection for this scene.
|
|
|
|
**Returns:** UICollection: Collection of all UI elements in this scene
|
|
|
|
#### `keypress(handler)`
|
|
|
|
Register a keyboard handler function for this scene.
|
|
|
|
**Arguments:**
|
|
- `handler` (*callable*): Function that takes (key_name: str, is_pressed: bool)
|
|
|
|
**Note:** Alternative to overriding the on_keypress method.
|
|
|
|
---
|
|
|
|
### class `Timer`
|
|
|
|
Timer object for scheduled callbacks.
|
|
|
|
#### Methods
|
|
|
|
#### `restart()`
|
|
|
|
Restart the timer from the beginning.
|
|
|
|
**Note:** Resets the timer's internal clock to zero.
|
|
|
|
#### `cancel()`
|
|
|
|
Cancel the timer and remove it from the system.
|
|
|
|
**Note:** After cancelling, the timer object cannot be reused.
|
|
|
|
#### `pause()`
|
|
|
|
Pause the timer, stopping its callback execution.
|
|
|
|
**Note:** Use resume() to continue the timer from where it was paused.
|
|
|
|
#### `resume()`
|
|
|
|
Resume a paused timer.
|
|
|
|
**Note:** Has no effect if timer is not paused.
|
|
|
|
---
|
|
|
|
### class `Window`
|
|
|
|
Window singleton for accessing and modifying the game window properties.
|
|
|
|
#### Methods
|
|
|
|
#### `get()`
|
|
|
|
Get the Window singleton instance.
|
|
|
|
**Returns:** Window: The singleton window object
|
|
|
|
**Note:** This is a static method that returns the same instance every time.
|
|
|
|
#### `screenshot(filename)`
|
|
|
|
Take a screenshot and save it to a file.
|
|
|
|
**Arguments:**
|
|
- `filename` (*str*): Path where to save the screenshot
|
|
|
|
**Note:** Supports PNG, JPG, and BMP formats based on file extension.
|
|
|
|
#### `center()`
|
|
|
|
Center the window on the screen.
|
|
|
|
**Note:** Only works if the window is not fullscreen.
|
|
|
|
---
|
|
|
|
## Automation Module
|
|
|
|
The `mcrfpy.automation` module provides testing and automation capabilities.
|
|
|
|
### `automation.click`
|
|
|
|
Click at position
|
|
|
|
---
|
|
|
|
### `automation.doubleClick`
|
|
|
|
Double click at position
|
|
|
|
---
|
|
|
|
### `automation.dragRel`
|
|
|
|
Drag mouse relative to current position
|
|
|
|
---
|
|
|
|
### `automation.dragTo`
|
|
|
|
Drag mouse to position
|
|
|
|
---
|
|
|
|
### `automation.hotkey`
|
|
|
|
Press a hotkey combination (e.g., hotkey('ctrl', 'c'))
|
|
|
|
---
|
|
|
|
### `automation.keyDown`
|
|
|
|
Press and hold a key
|
|
|
|
---
|
|
|
|
### `automation.keyUp`
|
|
|
|
Release a key
|
|
|
|
---
|
|
|
|
### `automation.middleClick`
|
|
|
|
Middle click at position
|
|
|
|
---
|
|
|
|
### `automation.mouseDown`
|
|
|
|
Press mouse button
|
|
|
|
---
|
|
|
|
### `automation.mouseUp`
|
|
|
|
Release mouse button
|
|
|
|
---
|
|
|
|
### `automation.moveRel`
|
|
|
|
Move mouse relative to current position
|
|
|
|
---
|
|
|
|
### `automation.moveTo`
|
|
|
|
Move mouse to absolute position
|
|
|
|
---
|
|
|
|
### `automation.onScreen`
|
|
|
|
Check if coordinates are within screen bounds
|
|
|
|
---
|
|
|
|
### `automation.position`
|
|
|
|
Get current mouse position as (x, y) tuple
|
|
|
|
---
|
|
|
|
### `automation.rightClick`
|
|
|
|
Right click at position
|
|
|
|
---
|
|
|
|
### `automation.screenshot`
|
|
|
|
Save a screenshot to the specified file
|
|
|
|
---
|
|
|
|
### `automation.scroll`
|
|
|
|
Scroll wheel at position
|
|
|
|
---
|
|
|
|
### `automation.size`
|
|
|
|
Get screen size as (width, height) tuple
|
|
|
|
---
|
|
|
|
### `automation.tripleClick`
|
|
|
|
Triple click at position
|
|
|
|
---
|
|
|
|
### `automation.typewrite`
|
|
|
|
Type text with optional interval between keystrokes
|
|
|
|
---
|