Full API Documentation#
rubato is a modern 2D game engine for python. Accurate fixed-step physics simulations, robust scene and game object management, event listener system and more all come prepackaged.
Fundamentally, rubato is built developer-focused. From intricate rigidbody simulations to 2D games, rubato streamlines development for beginners and the poweruser. And all that finally with some legible documentation.
- init(options={})[source]#
Initializes rubato.
- Parameters:
options (
dict
) – A game config. Defaults to the Game defaults.
- begin()[source]#
Starts the main game loop.
- Raises:
RuntimeError – rubato has not been initialized before calling.
Game#
The main game module. It controls everything in the game.
- class GameProperties[source]#
Bases:
type
Defines static property methods for Game.
Warning
This is only a metaclass for the class below it, so you wont be able to access this class. To use the property methods here, simply access them as you would any other Game property.
- property state: int#
The state of the game.
The game states are:
Game.RUNNING Game.STOPPED Game.PAUSED
- Return type:
int
- property camera: Camera#
A shortcut getter allowing easy access to the current camera. This is a get-only property.
Note
Returns a pointer to the current camera object. This is so you can access/change the current camera properties faster, but you’d still need to use
Game.scenes.current.camera
to access the camera directly.- Returns:
The current scene’s camera
- Return type:
- class Game[source]#
Bases:
object
The main game class.
- name#
The title of the game window.
- Type:
str
- scenes#
The global scene manager.
- Type:
SceneManager
- background_color#
The background color of the window.
- Type:
Color
- border_color#
The color of the borders of the window.
- Type:
Color
- debug#
Turn on debug rendering for everything in the game.
- Type:
bool
- classmethod constant_loop()[source]#
The constant game loop. Should only be called by
rubato.begin()
.
Scenes and Their Management#
Scenes
hold a collection of Game Objects and Groups. It also manages a
Camera
. Scenes are used to compartmentalize code. For example,
you could have each level of your game on a different scene. Then to switch levels you would switch scenes.
Every game has a Scene Manager
which helps you switch between scenes
easily.
Groups
also hold a collection of Game Objects and other Groups. Their main purpose is to
further compartmentalize items. For example, items in 2 different groups won’t collide with each other. In this tutorial,
we won’t be using Groups as we don’t need this functionality here.
SceneManager#
The Scene Manager houses a collection of scenes and allows switching between scenes. It also handles drawing and updating the current scene.
- class SceneManager[source]#
Bases:
object
The Scene Manager contains and handle multiple scenes.
- scenes#
The collection of scenes in the manager. Accessed by scene id.
- Type:
Dict[str, Scene]
- classmethod is_empty()[source]#
Checks if the scene manager contains no scene.
- Returns:
True if the scene is empty. False otherwise.
- Return type:
bool
- classmethod add(scene, scene_id)[source]#
Add a scene to the current scene manager. If the manager is empty the current scene will be updated.
- Parameters:
scene (
Scene
) – The scene to add to the manager.scene_id (
str
) – The id of the scene.
- Raises:
IdError – The given scene id is already used.
Scene#
The Scene class which is a collection of groups. It also houses the current scene camera. Scenes are built with a root group that everything is added to.
- class Scene(name='default')[source]#
Bases:
object
A scene is a collection of groups.
- Parameters:
name (
str
) – The name of the scene. This is used to reference the scene from the scene manager. Defaults to “default”.
- root#
The base group of game objects in the scene.
- Type:
Group
- ui#
The ui elements of this scene. These are drawn on top of everything else and do not interact with the other game objects.
- Type:
Group
- camera#
The camera of this scene.
- Type:
Camera
- id#
The id of this scene.
- Type:
str
- add(*items)[source]#
Adds an item to the root group.
- Parameters:
*items – The items to add to the scene.
- add_ui(*items)[source]#
Adds Game Objects as UI to the scene. When a game object is added as a UI, they draw as they normally would, but they don’t collide with other game objects, they draw on top of everything else, and they are unaffected by the camera.
- Parameters:
*items – The items to add to the scene.
- delete(item)[source]#
Removes an item from the root group.
- Parameters:
item (
UnionType
[GameObject
,Group
]) – The item to remove.
- delete_ui(item)[source]#
Removes an item from the ui group.
- Parameters:
item (
GameObject
) – The item to remove.
- setup()[source]#
The start loop for this scene. It is run before the first frame. Is empty be default and can be overriden.
- draw()[source]#
The draw loop for this scene. It is run once every frame. Is empty by default an can beoverridden.
- update()[source]#
The update loop for this scene. It is run once every frame, before
draw()
. Is empty by default an can be overridden.
Camera#
The Camera module handles where things are drawn. A camera can zoom, pan, and travel along the z-index. Items only render if their z-index is not more than that of the camera’s.
The current scene’s camera can be accessed through Game.camera
.
- class Camera(pos=Vector(), zoom=1, z_index=100)[source]#
Bases:
object
The camera class.
- Parameters:
pos (
Vector
) – The position of the camera.zoom (
float
) – The zoom of the camera.z_index (
int
) – The z-index of the camera.
- pos#
The current position of the camera.
- Type:
Vector
- z_index#
The current z_index of the camera.
- Type:
int
- property zoom: float#
The zoom value of the camera.
- Return type:
float
Group#
Groups contain game objects or other groups and allow separation between game objects.
- class Group(options={})[source]#
Bases:
object
The group class implementation.
- Parameters:
options (
dict
) – A group object config. Defaults to the Group defaults.
- add(*items)[source]#
Adds an item to the group.
- Parameters:
items (
UnionType
[GameObject
,Group
]) – The item(s) you wish to add to the group- Raises:
Error – The item being added is the group itself. A group cannot be added to itself.
ValueError – The group can only hold game objects or other groups.
- delete(item)[source]#
Removes an item from the group.
- Parameters:
item (
UnionType
[GameObject
,Group
]) – The item to remove from the group.- Raises:
ValueError – The item is not in the group and cannot be deleted.
Game Object and Components#
Game Objects
are the main item in a game. They hold Components, have a position, and
have a z-index. By themselves, they have very little functionality.
Components
are how Game Objects get their functionality. Each component adds or
changes something about the Game Object. For example, an Image component draws an image from your filesystem to the game at the
Game Object’s position.
Game Object#
A game object is a basic element that holds components, postion, and z_index.
- class GameObject(options={})[source]#
Bases:
object
The base game object class.
- Parameters:
options (
dict
) – A game object config. Defaults to the Game Object defaults.
- name#
The name of the game object. Will default to: “Game Object {number in group}”
- Type:
str
- pos#
The current position of the game object.
- Type:
Vector
- z_index#
The z_index of the game object.
- Type:
int
- components#
All the components attached to this game object.
- Type:
List[Component]
- rotation#
The rotation of the game object in degrees.
- Type:
float
- add(component)[source]#
Add a component to the game object.
- Parameters:
component (
Component
) – The component to add.- Raises:
DuplicateComponentError – Raised when there is already a component of the same type on the game object.
- Returns:
The current game object
- Return type:
- remove(comp_type)[source]#
Removes a component from the game object.
- Parameters:
comp_type (
type
) – The type of the component to remove.- Raises:
Warning – The component was not in the game object and nothing was removed.
- remove_all(comp_type)[source]#
Removes all components of a type from the game object.
- Parameters:
comp_type (
type
) – The type of the component to remove.- Raises:
Warning – The components were not in the game object and nothing was removed.
- get(comp_type)[source]#
Gets a component from the game object.
- Parameters:
comp_type (
type
) – The type of the component to search for.- Returns:
The component if it was found or None if it wasn’t.
- Return type:
Optional[Component]
Components#
The default Component class.
The component module that represents the template for all components.
Attention
Each component can only be attached to one game object. To add one component to multiple game objects, use the
clone()
method.
- class Component(options={})[source]#
Bases:
object
A component adds functionality to the game object it is attached to. Note that this is a template class and should not be used directly. Instead create another class and extend from this one.
- Parameters:
options (
dict
) – A Component config. Defaults to the Component defaults.
- gameobj#
The game object this component is attached to.
- Type:
GameObject
- singular#
Whether multiple components of the same type are allowed on a game object.
- Type:
bool
- offset#
The offset from the center of the game object that the hitbox should be placed.
- Type:
Vector
- rotation_offset#
The rotational offset from the game object’s rotation.
- Type:
float
Image#
The image component that renders an image from the filesystem.
- class Image(options={})[source]#
Bases:
Component
A component that handles Images.
- Parameters:
options (
dict
) – A Image config. Defaults to the Image defaults.
- visible#
Whether or not the image is visible.
- Type:
bool
- property image: sdl2.SDL_Surface#
The SDL Surface of the image.
- Return type:
SDL_Surface
- property rotation_offset: float#
The rotation offset of the image.
- Return type:
float
- property flipx: bool#
Whether or not the image is flipped horizontally.
- Return type:
bool
- property flipy: bool#
Whether or not the image is flipped vertically.
- Return type:
bool
- property aa: bool#
Whether or not the image is anti-aliased.
- Return type:
bool
- get_size_original()[source]#
Gets the original size of the image.
- Returns:
The original size of the image.
- Return type:
Text#
A text component.
- class Text(options={})[source]#
Bases:
Component
A text component subclass. Add this to game objects or UI elements to give them text.
- Parameters:
options (
dict
) – A Text config. Defaults to the Text defaults.
- property text: str#
The text of the Text.
- Return type:
str
- property justify: str#
The justification of the text.
Can be one of:
"left"
,"center"
,"right"
.- Return type:
str
- property anchor: Vector#
The anchor vector of the text.
This controls the position of the text relative to the game object. Is a vector where the x value controls the x anchor and the y value controls the y anchor. The values for each can be either -1, 0 or 1. This offset the text around the game object center.
Example
An anchor of
Vector(0, 0)
will center the text on the game object. An anchor ofVector(1, 1)
will move the text so that it’s top left corner is at the game object’s center.Warning
Previously was called align.
- Return type:
- property width: int#
The maximum width of the text. Will automatically wrap the text. Use -1 to disable wrapping.
- Return type:
int
- property font_size: int#
The font size.
Warning
Don’t set this too high or font smoothing may misbehave on some systems.
- Return type:
int
Animation#
This is the animation component module for game objects.
- class Animation(options={})[source]#
Bases:
Component
Animations are a series of images that update automatically in accordance with parameters.
- Parameters:
options (
dict
) – A Animation config. Defaults to the Animation defaults.
- default_state#
The key of the default state. Defaults to None.
- Type:
Optional[str]
- current_state#
The key of the current state. Defaults to “”.
- Type:
str
- animation_frames_left#
The number of animation frames left.
- Type:
int
- loop#
Whether the animation should loop. Defaults to False.
- Type:
bool
- aa#
Whether or not to enable anti aliasing.
- Type:
bool
- flipx#
Whether or not to flip the animation along the x axis.
- Type:
bool
- flipy#
Whether or not to flip the animation along the y axis.
- Type:
bool
- visible#
Whether or not the animation is visible.
- Type:
bool
- property fps#
The fps of the animation.
- property current_frame: int#
The current frame that the animation is on.
- Return type:
int
- property image: sdl2.surface.SDL_Surface#
The current SDL Surface holding the image.
- Return type:
SDL_Surface
- set_current_state(new_state, loop=False, freeze=-1)[source]#
Set the current animation state.
- Parameters:
new_state (
str
) – The key of the new current state.loop (
bool
) – Whether to loop the state. Defaults to False.freeze (
int
) – Freezes the animation once the specified frame is reached (No animation). Use -1 to never freeze. Defaults to -1.
- Raises:
KeyError – The new_state key is not in the initialized states.
- resize(new_size)[source]#
Resize the Animation to a given size in pixels.
- Parameters:
new_size (
Vector
) – The new size of the Animation in pixels.
- add(state_name, images)[source]#
Adds a state to the animation.
- Parameters:
state_name (
str
) – The key used to reference this state.images (
List
[Image
]) – A list of images to use as the animation.
- add_folder(state_name, rel_path)[source]#
Adds a state from a folder of images. Directory must be solely comprised of images.
- Parameters:
state_name (
str
) – The key used to reference this state.rel_path (
str
) – The relative path to the folder you wish to import
- add_spritesheet(state_name, spritesheet, from_coord=Vector(), to_coord=Vector())[source]#
Adds a state from a spritesheet. Will include all sprites from the from_coord to the to_coord.
- Parameters:
state_name (
str
) – The key used to reference this state.spritesheet (
Spritesheet
) – The spritesheet to use.from_coord (
Vector
) – The grid coordinate of the first frame. Defaults to Vector().to_coord (
Vector
) – The grid coordinate of the last coord. Defaults to Vector().
Example
animation.add_spritesheet("idle", spritesheet, Vector(0, 0), Vector(1, 3)) # This will add the frames (0, 0) to (0, size) and (1, 0) to (1, 3) inclusive to the animation # with the state name "idle". animation.add_spritesheet("idle", spritesheet, to_coord=spritesheet.end) # This will just load from the start to the end of the spritesheet.
Spritesheet#
A module to load, manage, and interact with spritesheets.
- class Spritesheet(options={})[source]#
Bases:
object
A spritesheet from the filesystem.
- Parameters:
options (
dict
) – A Spritesheet config. Defaults to the Spritesheet defaults.- Raises:
IndexError – If user does not load the entire sheet.
- property sprites: List[List[Image]]#
The list of all the sprites as images (readonly).
- Return type:
List
[List
[Image
]]
- property end#
The end indexes of the Spritesheet as a vector.
Example
You can use
spritesheet.get(*spritesheet.end)
to get the final image
- get(x, y)[source]#
Gets the Image at the coorsponding grid coordinate of the spritesheet.
- Parameters:
x (
int
) – The x grid coordinate.y (
int
) – The y grid coordinate.
- Raises:
IndexError – One or both of the coordinates are out of range of the spritesheet’s size.
- Returns:
The image of the cooresponding sprite.
- Return type:
- static from_folder(rel_path, sprite_size, default_state=None)[source]#
Creates an Animation from a folder of spritesheets. Directory must be comprised solely of spritesheets. Added alphabetically. Default is the first sheet loaded.
- Parameters:
rel_path (
str
) – The relative path to the folder you wish to importsprite_size (
Vector
) – The size of a single sprite in your spritesheet, should be the same in all imported sheets.default_state – Sets the default state of the animation.
- Returns:
the animation loaded from the folder of spritesheets
- Return type:
Hitbox#
Various hitbox components that enable collisions
- class Hitbox(options={})[source]#
Bases:
Component
A hitbox superclass. Do not use this class to attach hitboxes to your game objects. Instead, use Polygon, Rectangle, or Circle, which inherit Hitbox properties.
- Parameters:
options (
dict
) – A Hitbox config. Defaults to the Hitbox defaults.
- debug#
Whether to draw a green outline around the hitbox or not.
- Type:
bool
- trigger#
Whether this hitbox is just a trigger or not.
- Type:
bool
- scale#
The scale of the hitbox
- Type:
int
- on_collide#
The on_collide function to call when a collision happens with this hitbox.
- Type:
Callable
- on_exit#
The on_exit function to call when a collision ends with this hitbox.
- Type:
Callable
- color#
- Type:
Color
- tag#
The tag of the hitbox (can be used to identify hitboxes in collision callbacks)
- Type:
str
- colliding#
An unordered set of hitboxes that the Hitbox is currently colliding with.
- Type:
Set[Hitbox]
- get_aabb()[source]#
Gets top left and bottom right corners of the axis-aligned bounding box of the hitbox in world coordinates.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- get_obb()[source]#
Gets top left and bottom right corners of the oriented bounding box of the hitbox in world coordinates. This bounding box takes into account hitbox rotation.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
Rectangle#
- class Rectangle(options)[source]#
Bases:
Hitbox
A rectangle implementation of the Hitbox subclass.
- width#
The width of the rectangle
- Type:
int
- height#
The height of the rectangle
- Type:
int
- property top_left#
The top left corner of the rectangle.
Note
This can only be accessed and set after the Rectangle has been added to a Game Object.
- property bottom_left#
The bottom left corner of the rectangle.
Note
This can only be accessed and set after the Rectangle has been added to a Game Object.
- property top_right#
The top right corner of the rectangle.
Note
This can only be accessed and set after the Rectangle has been added to a Game Object.
- property bottom_right#
The bottom right corner of the rectangle.
Note
This can only be accessed and set after the Rectangle has been added to a Game Object.
- property bottom#
The bottom side of the rectangle.
Note
This can only be accessed and set after the Rectangle has been added to a Game Object.
- get_aabb()[source]#
Gets top left and bottom right corners of the axis-aligned bounding box of the hitbox in world coordinates.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- get_obb()[source]#
Gets top left and bottom right corners of the oriented bounding box of the hitbox in world coordinates. This bounding box takes into account hitbox rotation.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- vertices()[source]#
Generates a list of the rectangle’s vertices with no transformations applied.
- Returns:
The list of vertices
- Return type:
List[Vector]
- translated_verts()[source]#
Offsets each vertex with the Polygon’s offset.
- Returns:
The list of vertices
- Return type:
List[Vector]
- transformed_verts()[source]#
Generates a list of the rectangle’s vertices, scaled and rotated.
- Returns:
The list of vertices
- Return type:
List[Vector]
Polygon#
- class Polygon(options={})[source]#
Bases:
Hitbox
A polygon Hitbox implementation. Supports an arbitrary number of custom vertices, as long as the polygon is convex.
Danger
If generating vertices by hand, make sure you generate them in a counter-clockwise direction. Otherwise, polygons will neither behave nor draw properly.
Warning
rubato does not currently support concave polygons explicitly. Creating concave polygons will result in undesired collision behavior. However, you can still use concave polygons in your projects: Simply break them up into multiple convex Polygon hitboxes and add them individually to a gameobject.
- verts#
A list of the vertices in the Polygon, in anticlockwise direction.
- Type:
List[Vector]
- get_aabb()[source]#
Gets top left and bottom right corners of the axis-aligned bounding box of the hitbox in world coordinates.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- get_obb()[source]#
Gets top left and bottom right corners of the oriented bounding box of the hitbox in world coordinates. This bounding box takes into account hitbox rotation.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- transformed_verts()[source]#
Maps each vertex with the Polygon’s scale and rotation
- Return type:
List
[Vector
]
- classmethod generate_polygon(num_sides, radius=1, options=None)[source]#
Generates the vertices of a regular polygon with a specified number of sides and a radius. You can use this as the verts option in the Polygon constructor if you wish to generate a regular polygon.
- Parameters:
num_sides (
int
) – The number of sides of the polygon.radius (
UnionType
[float
,int
]) – The radius of the polygon. Defaults to 1.option – A Polygon config. If set, will return a Polygon object. Otherwise it will return a list of vertices. Defaults to the None.
- Raises:
SideError – Raised when the number of sides is less than 3.
- Return type:
- Returns:
The vertices of the polygon or the Polygon object (depending on whether options is set).
Circle#
- class Circle(options={})[source]#
Bases:
Hitbox
A circle Hitbox subclass defined by a position, radius, and scale.
- radius#
The radius of the circle.
- Type:
int
- get_aabb()[source]#
Gets top left and bottom right corners of the axis-aligned bounding box of the hitbox in world coordinates.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
- get_obb()[source]#
Gets top left and bottom right corners of the oriented bounding box of the hitbox in world coordinates. This bounding box takes into account hitbox rotation.
- Return type:
List
[Vector
]- Returns:
The top left and bottom right corners of the bounding box as Vectors. [top left, bottom right]
RigidBody#
The Rigidbody component contains an implementation of rigidbody physics. They have hitboxes and can collide and interact with other rigidbodies.
- class RigidBody(options={})[source]#
Bases:
Component
A RigidBody implementation with built in physics and collisions. Rigidbodies require hitboxes.
- Parameters:
options (
dict
) – A rigidbody config. Defaults to the Rigidbody defaults.
- static#
Whether or not the rigidbody is static (as in, it does not move).
- Type:
bool
- gravity#
The acceleration of the gravity that should be applied.
- Type:
Vector
- friction#
The friction coefficient of the Rigidbody (usually a a value between 0 and 1).
- Type:
float
- max_speed#
The maximum speed of the Rigidbody.
- Type:
Vector
- min_speed#
The minimum speed of the Rigidbody.
- Type:
Vector
- velocity#
The current velocity of the Rigidbody.
- Type:
Vector
- ang_vel#
The current angular velocity of the Rigidbody.
- Type:
float
- bounciness#
How bouncy the rigidbody is (usually a value between 0 and 1).
- Type:
float
- advanced#
Whether to use rotational collision resolution (not desired in basic platformers, for instance).
- Type:
bool
- property inv_mass: float#
The inverse mass of the Rigidbody.
- Return type:
float
- property mass: float#
The mass of the Rigidbody.
- Return type:
float
- property inv_moment: float#
The inverse moment of the Rigidbody.
- Return type:
float
- property moment: float#
The moment of inertia of the Rigidbody.
- Return type:
float
- calc_mass_and_moment()[source]#
Calculates the mass and the moment of interia from the density if it hasn’t already been calculate this frame.
- add_force(force)[source]#
Applies a force to the Rigidbody.
- Parameters:
force (
Vector
) – The force to add.
- add_impulse(impulse)[source]#
Applies an impulse to the rigidbody.
- Parameters:
impulse (
Vector
) – _description_
- add_cont_force(force, time)[source]#
Add a continuous force to the Rigidbody. A continuous force is a force that is continuously applied over a time period. (the force is added every frame for a specific duration).
- Parameters:
force (
Vector
) – The force to add.time (
int
) – The time in seconds that the force should be added.
- add_cont_impulse(impulse, time)[source]#
Add a continuous impulse to the Rigidbody. A continuous impulse is a impulse that is continuously applied over a time period. (the impulse is added every frame for a specific duration).
- Parameters:
impulse (
Vector
) – The impulse to add.time (
int
) – The time in seconds that the impulse should be added.
Physics#
The Engine and Manifold classes comprise rubato’s collision engine. Collision and overlap tests inside groups are automatically handled by rubato, so these classes are here mainly for reference.
In general, it is recommended that you define callback functions for Hitbox objects instead of calling Engine functions yourself.
Engine#
- class Engine[source]#
Bases:
object
rubato’s physics engine. Handles overlap tests for Hitboxes and resolves Rigidbody collisions.
- static resolve(col)[source]#
Resolve the collision between two rigidbodies.
- Parameters:
col (
Manifold
) – The collision information.
- static overlap(hitbox_a, hitbox_b)[source]#
Determines if there is overlap between two hitboxes. Returns a Manifold manifold if a collision occurs but does not resolve.
- static collide(hitbox_a, hitbox_b)[source]#
Collides two hitboxes (if they overlap), calling their callbacks if they exist. Resolves the collision using Rigidbody impulse resolution if applicable.
- static circle_circle_test(circle_a, circle_b)[source]#
Checks for overlap between two circles
- Return type:
Optional
[Manifold
]
- static circle_polygon_test(circle, polygon)[source]#
Checks for overlap between a circle and a polygon
- Return type:
Optional
[Manifold
]
- static polygon_polygon_test(shape_a, shape_b)[source]#
Checks for overlap between two polygons
- Return type:
Optional
[Manifold
]
- static axis_least_penetration(a, b)[source]#
Finds the axis of least penetration between two possibly colliding polygons.
- Return type:
float
- static incident_face(ref_poly, inc_poly, ref_index)[source]#
Finds the incident face of the incident polygon that clips into the reference polygon.
- Return type:
List
[Vector
]
Manifold#
- class Manifold(shape_a, shape_b, penetration=0, normal=Vector(), contacts=[])[source]#
Bases:
object
A class that represents information returned in a successful collision.
- Parameters:
shape_a (
Optional
[Hitbox
]) – The first shape involved in the collision.shape_b (
Optional
[Hitbox
]) – The second shape involved in the collision.penetration (
float
) – The amount of penetration between the two shapes.normal (
Vector
) – The normal of the collision.contacts (
List
[Vector
]) – The points of contact between the two shapes.
- shape_a#
A reference to the first shape.
- Type:
Optional[Hitbox]
- shape_b#
A reference to the second shape.
- Type:
Optional[Hitbox]
- penetration#
The amount by which the colliders are intersecting.
- Type:
float
- normal#
The direction that would most quickly separate the two colliders.
- Type:
Vector
Hardware Interaction#
All of these static classes let you interact with the hardware. Either by checking for user input, drawing to the screen or playing a sound.
Display#
Global display class that allows for easy screen and window management.
- class DisplayProperties[source]#
Bases:
type
Defines static property methods for Display.
Attention
This is only a metaclass for the class below it, so you wont be able to access this class. To use the property methods here, simply access them as you would any other
Display
property.- property window_size: Vector#
The pixel size of the physical window.
Warning
Using this value to determine the placement of your game objects may lead to unexpected results. You should instead use
Display.res
- Return type:
- property res: Vector#
The pixel resolution of the game. This is the number of virtual pixels on the window.
Example
The window (
Display.window_size
) could be rendered at 500x500 while the resolution is at 1000x1000. This would mean that you can place game objects at 900, 900 and still see them despite the window not being 900 pixels tall.Warning
While this value can be changed, it is recommended that you do not alter it after initialization as it will scale your entire project in unexpected ways. If you wish to achieve scaling across an entire scene, simply utilize the
camera zoom
property in your scene’s camera.- Return type:
- property window_pos: Vector#
The current position of the window in terms of screen pixels
- Return type:
- property display_ratio: Vector#
The ratio of the renderer resolution to the window size. This is a read-only property.
- Returns:
The ratio of the renderer resolution to the window size seperated by x and y.
- Return type:
- property border_size: int#
The size of the black border on either side of the drawing area when the aspect ratios don’t match.
- Return type:
int
- class Display[source]#
Bases:
object
A static class that houses all of the display information
- window#
The pysdl2 window element.
- Type:
sdl2.Window
- renderer#
The pysdl2 renderer element.
- Type:
sdl2.Renderer
- format#
The pysdl2 pixel format element.
- Type:
sdl2.PixelFormat
- classmethod set_window_icon(path)[source]#
Set the icon of the window.
- Parameters:
path (
str
) – The path to the icon.
- classmethod update(tx, pos)[source]#
Update the current screen.
- Parameters:
tx (
Texture
) – The texture to draw on the screen.pos (
Vector
) – The position to draw the texture on.
- classmethod clone_surface(surface)[source]#
Clones an SDL surface.
- Parameters:
surface (
SDL_Surface
) – The surface to clone.- Returns:
The cloned surface.
- Return type:
sdl2.SDL_Surface
- classmethod save_screenshot(filename, path='./', extension='png', save_to_temp_path=False, quality=100)[source]#
Save the current screen to a file.
- Parameters:
filename (
str
) – The name of the file to save to.path (
str
) – Path to output folder.extension (
str
) – The extension to save the file as. (png, jpg, bmp supported)save_to_temp_path (
bool
) – Whether to save the file to a temporary path (i.e. MEIPASS used in exe).quality (
int
) – The quality of the jpg 0-100 (only used for jpgs).
- Return type:
bool
- Returns:
If save was successful.
- class property top: int#
The position of the top of the window.
- Return type:
int
- class property right: int#
The position of the right of the window.
- Return type:
int
- class property left: int#
The position of the left of the window.
- Return type:
int
- class property bottom: int#
The position of the bottom of the window.
- Return type:
int
Input#
Sound#
A fully functional, multi-channel sound system.
- class Sound(rel_path, sound_name=None)[source]#
Bases:
object
A sound class that is used to manage the sounds throughout the project.
- Parameters:
rel_path (
str
) – The relative path to the sound file you wish to import.sound_name (
Optional
[str
]) – The name of the sound. Defaults to the name of the file.
- loaded_sounds#
A dictionary housing all the loaded sounds, stored by their name.
- Type:
Dict[str, Sound]
- property state: int#
The current state of the sound.
The possible states are:
Sound.STOPPED Sound.PLAYING Sound.PAUSED
- Returns:
The current state of the sound.
- Return type:
int
- play(loops=0)[source]#
Plays a sound.
- Parameters:
sound_name – The name of the sound to play.
loops (
int
) – The number of times to loop a sound after the first play through. Use -1 to loop forever. Defaults to 0.
- classmethod import_sound_folder(rel_path, duplicate_names=False)[source]#
Imports a folder of sounds, saving each one in the loaded_sounds dictionary by filename.
- Parameters:
rel_path (
str
) – The relative path to the folder you wish to import.duplicate_names – if you wish to have duplicate names to your sounds,
name (it will use the relative and the sound path for the sounds) –
Utilities#
These classes are utility classes that are used to make certain tasks easier.
Draw#
A static draw class for drawing things directly to the renderer.
- class Draw[source]#
Bases:
object
Draws things to the renderer. Should not instantiate this class.
- static rect(center, width, height, border, border_thickness=1, fill=None, angle=0)[source]#
Draws a rectangle onto the renderer.
- Parameters:
center (
Vector
) – The center of the rectangle.width (
int
) – The width of the rectangle.height (
int
) – The height of the rectangle.border (
Color
) – The border color.border_thickness (
int
) – The border thickness. Defaults to 1.fill (
Optional
[Color
]) – The fill color. Defaults to None.angle (
float
) – The angle in degrees. Defaults to 0.
- static circle(center, radius, border, border_thickness=1, fill=None)[source]#
Draws a circle onto the renderer.
- static poly(points, border, border_thickness=1, fill=None)[source]#
Draws a polygon onto the renderer.
- static text(text, font, pos=Vector(), justify=Defaults.text_defaults['justify'], align=Defaults.text_defaults['anchor'], width=Defaults.text_defaults['width'])[source]#
Draws some text onto the renderer.
- Parameters:
text (
str
) – The text to draw.font (
Font
) – The Font object to use.pos (
Vector
) – The position of the text. Defaults to Vector(0, 0).justify (
str
) – The justification of the text. (left, center, right). Defaults to “left”.align (
Vector
) – The alignment of the text. Defaults to Vector(0, 0).width (
int
) – The maximum width of the text. Will automatically wrap the text. Defaults to -1.
Vector#
A vector implementation.
- class Vector(x=0, y=0)[source]#
Bases:
object
A Vector object that defines a 2D point in space
- Parameters:
x (
UnionType
[float
,int
]) – The x coordinate. Defaults to 0.y (
UnionType
[float
,int
]) – The y coordinate. Defaults to 0.
- x#
The x coordinate.
- Type:
float | int
- y#
The y coordinate.
- Type:
float | int
- property magnitude: float#
The magnitude of the vector. You can set to this value.
- Return type:
float
- property mag_sq: float#
The squared magnitude of the vector (readonly).
- Return type:
float
- property angle: float#
The angle of the vector in radians (readonly).
- Return type:
float
- property rationalized_mag: str#
Returns a string representation of a rationalized vector magnitude as you would use in math class.
Example
>>> Vector(8, 8).rationalized_mag 4√8
Warning
Should only be used on vectors with integer components.
- Return type:
str
- property rationalized_mag_vector: Vector#
Returns a vector with the rationalized magnitude.
Example
>>> Vector(8, 8).rationalized_mag <4, 8>
Warning
Should only be used on vectors with integer components.
- Return type:
- property rationalized_unit: str#
Returns a string representation of a rationalized unit vector as you would use in math class.
Warning
Should only be used on vectors with integer components.
- Return type:
str
- unit(out=None)[source]#
Determines the unit vector of this vector.
- Parameters:
out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.- Returns:
The vector output of the operation.
- Return type:
- dot(other)[source]#
Takes the dot product of two vectors.
- Parameters:
other (
Vector
) – The other vector.- Return type:
UnionType
[float
,int
]- Returns:
The resulting dot product.
- cross(other)[source]#
Takes the cross product of two vectors.
- Parameters:
other (
Vector
) – The other vector.- Return type:
UnionType
[float
,int
]- Returns:
The resultant scalar magnitude of the orthogonal vector along an imaginary z-axis.
- perpendicular(scalar=1, out=None)[source]#
Computes a scaled 90 degree clockwise rotation on a given vector.
- Parameters:
scalar (
UnionType
[float
,int
]) – The scalar value.out (
Optional
[Vector
]) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.
- Return type:
- Returns:
The resultant vector when transformed.
- clamp(lower, upper, absolute=False, out=None)[source]#
Clamps x and y between the two values given.
- Parameters:
lower (
UnionType
[Vector
,float
,int
]) – The lower bound. If a vector is specified, its x coord is used to clamp the x coordinate and same for y.upper (
UnionType
[Vector
,float
,int
]) – The upper bound. If a vector is specified, its x coord is used to clamp the x coordinate and same for y.absolute (
bool
) – Whether to clamp the absolute value of the vector instead of the actual value. Defaults to False.out (
Optional
[Vector
]) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.
- rotate(angle, out=None)[source]#
Rotates the vector by a given number of degees.
- Parameters:
angle (
float | int
) – The counterclockwise rotation amount in degrees.out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.
- Returns:
The resultant Vector.
- Return type:
- lerp(target, t, out=None)[source]#
Lerps the current vector to target by a factor of t.
- Parameters:
target (
Vector
) – The target Vector.t (
float
) – The lerping amount (between 0 and 1).out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.
- Returns:
The resulting vector.
- Return type:
- round(decimal_places=0, out=None)[source]#
Returns a new vector with the coordinates rounded.
- Parameters:
decimal_places (
int
) – The amount of decimal places rounded to. Defaults to 0.out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.
- Returns:
The resultant Vector.
- Return type:
- ceil(out=None)[source]#
Returns a new vector with the coordinates ciel-ed.
- Parameters:
out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.- Returns:
The resultant Vector.
- Return type:
- floor(out=None)[source]#
Returns a new vector with the coordinates floored.
- Parameters:
out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.- Returns:
The resultant Vector.
- Return type:
- abs(out=None)[source]#
Returns a new vector with the absolute value of the original coordinates.
- Parameters:
out (
Vector, optional
) – The output vector to set to. Defaults to a new vector. If you want the function to act on itself, set this value to the reference of the vector.- Returns:
The resultant Vector.
- Return type:
- static from_radial(magnitude, angle)[source]#
Generates a Vector from the given angle and magnitude.
- Parameters:
magnitude (
float
) – Length of vector.angle (
float
) – Direction of vector in radians.
- Returns:
Vector from the given direction and distance
- Return type:
- static from_x(x_length, angle)[source]#
Generates a Vector from the given angle and x length.
- Parameters:
x_length (
float
) – Length of x component of vector.angle (
float
) – Direction of vector in radians.
- Returns:
Vector from the given direction and distance
- Return type:
- static from_y(y_length, angle)[source]#
Generates a Vector from the given angle and y length.
- Parameters:
y_length (
float
) – Length of y component of vector.angle (
float
) – Direction of vector in radians.
- Returns:
Vector from the given direction and distance
- Return type:
- static clamp_magnitude(vector, max_magnitude, min_magnitude=0)[source]#
Clamps the magnitude of the vector to the given range.
Math#
Noise#
A utility for generating simple smooth noise in your projects.
- class Noise[source]#
Bases:
object
A modified implementation of the OpenSimplex2 algorithm.
- seed#
The seed for the random noise. Setting to a fixed value will result in the same noise every time.
- Type:
int
- classmethod noise(x)[source]#
Creates noise from 1 dimensional input. This is identical to
noise2(x, 0)
.- Parameters:
x (
float
) – the x coordinate of noise.- Returns:
the random noise value.
- Return type:
float
- classmethod noise2(x, y)[source]#
Creates noise from 2 dimensional input.
- Parameters:
x (
float
) – the x coordinate of noise.y (
float
) – the y coordinate of noise.
- Returns:
the random noise value.
- Return type:
float
Time#
A static time class to monitor time and to call functions in the future.
- class TimeProperties[source]#
Bases:
type
Defines static property methods for Time.
Warning
This is only a metaclass for the class below it, so you wont be able to access this class. To use the property methods here, simply access them as you would any other Time property.
- property smooth_fps: float#
The average fps over the past 250 frames. This is a get-only property.
- Return type:
float
- property now: int#
The time since the start of the game, in milliseconds. This is a get-only property.
- Return type:
int
- class Time[source]#
Bases:
object
The time class
- frames#
The total number of elapsed frames since the start of the game.
- Type:
int
- fps#
The current fps of this frame.
- Type:
float
- target_fps#
The fps that the game should try to run at. 0 means that the game’s fps will not be capped. Defaults to 0.
- Type:
float
- physics_fps#
The fps that the physics should run at. Defaults to 60.
- Type:
float
- delta_time#
The number of milliseconds since the last frame.
- Type:
int
- fixed_delta#
The number of milliseconds since the last fixed update.
- Type:
int
- classmethod delayed_call(time_delta, func)[source]#
Calls the function func at a later time.
- Parameters:
time_delta (
int
) – The time from now (in milliseconds) to run the function at.func (
Callable
) – The function to call.
- classmethod delayed_frames(frames_delta, func)[source]#
Calls the function func at a later frame.
- Parameters:
frames_delta (
int
) – The number of frames to wait.func (
Callable
) – The function to call
- classmethod milli_to_sec(milli)[source]#
Converts milliseconds to seconds.
- Parameters:
milli (
int
) – A number in milliseconds.- Returns:
The converted number in seconds.
- Return type:
float
Color#
This color module contains the Color class, which is used to represent colors in the game.
- class Color(r=0, g=0, b=0, a=255)[source]#
Bases:
object
An RGBA color.
- Parameters:
r (
int
) – The red value. Defaults to 0.g (
int
) – The green value. Defaults to 0.b (
int
) – The blue value. Defaults to 0.a (
int
) – The alpha value. Defaults to 255.
- r#
The red value.
- Type:
int
- g#
The green value.
- Type:
int
- b#
The blue value.
- Type:
int
- a#
The alpha value.
- Type:
int
- property rgba32#
The RGBA32 representation of the color.
- darker(amount=20)[source]#
Returns a darker copy of the color. It subtracts
amount
from the RGB values.- Parameters:
amount (
int
) – How much darker. Defaults to 20.- Returns:
The resultant color.
- Return type:
- lighter(amount=20)[source]#
Returns a lighter copy of the color. It adds
amount
to the RGB values.- Parameters:
amount (
int
) – How much lighter. Defaults to 20.- Returns:
The resultant color.
- Return type:
- mix(other, t=0.5, mode='mix')[source]#
Mix two colors together.
- Parameters:
other (
Color
) – The other color.t (
float
) – The interpolation amount (0 to 1). Defaults to 0.5.mode (
str
) – The blending mode (“linear”, “mix”, “blend”). Linear is the linear interpolation between the two colors. Mix and Blend are 2 different algorithms to mix colors. They tend to look better then linear. Defaults to “mix”.
- Returns:
The resultant color.
- Return type:
- to_tuple()[source]#
Converts the Color to a tuple.
- Returns:
The tuple representing the color.
- Return type:
tuple(int, int, int, int)
- to_hex()[source]#
Converts the Color to a hexadecimal string.
- Returns:
The hexadecimal output in lowercase. (i.e. ffffffff)
- Return type:
str
- to_hsv()[source]#
Converts the Color to a tuple containing its HSV values.
- Returns:
The Color values as HSV in the form of a tuple.
- Return type:
tuple[int]
- classmethod from_rgba32(rgba32)[source]#
Creates a Color object from an RGBA32 representation.
- Parameters:
rgba32 (
int
) – The RGBA32 representation as an int.- Returns:
The color object from the RGBA32.
- Return type:
- classmethod from_hex(h)[source]#
Creates a Color object from a hex string.
- Parameters:
h (
str
) – The hexadecimal value in the format “RRGGBBAA”.- Returns:
The Color object.
- Return type:
- classmethod from_hsv(h, s, v)[source]#
Creates a Color object from HSV values.
- Parameters:
h (
float
) – The hue degree (0 to 360).s (
float
) – The saturation proportion (0 to 1).v (
float
) – The value proportion (0 to 1).
- Returns:
The Color object.
- Return type:
- class property black: Color[source]#
The default black color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property white: Color[source]#
The default white color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property night: Color[source]#
The default night color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property darkgray: Color[source]#
The default darkgray color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property gray: Color[source]#
The default gray color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property lightgray: Color[source]#
The default lightgray color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property snow: Color[source]#
The default snow color. To see the RGB values, check out the Grayscale defaults.
- Return type:
- class property yellow: Color[source]#
The default yellow color. To see the RGB values, check out the Color defaults.
- Return type:
- class property orange: Color[source]#
The default orange color. To see the RGB values, check out the Color defaults.
- Return type:
- class property red: Color[source]#
The default red color. To see the RGB values, check out the Color defaults.
- Return type:
- class property scarlet: Color[source]#
The default scarlet color. To see the RGB values, check out the Color defaults.
- Return type:
- class property magenta: Color[source]#
The default magenta color. To see the RGB values, check out the Color defaults.
- Return type:
- class property purple: Color[source]#
The default purple color. To see the RGB values, check out the Color defaults.
- Return type:
- class property violet: Color[source]#
The default violet color. To see the RGB values, check out the Color defaults.
- Return type:
- class property blue: Color[source]#
The default blue color. To see the RGB values, check out the Color defaults.
- Return type:
- class property cyan: Color[source]#
The default cyan color. To see the RGB values, check out the Color defaults.
- Return type:
- class property turquoize: Color[source]#
The default turquoize color. To see the RGB values, check out the Color defaults.
- Return type:
- class property green: Color[source]#
The default green color. To see the RGB values, check out the Color defaults.
- Return type:
- class property lime: Color[source]#
The default lime color. To see the RGB values, check out the Color defaults.
- Return type:
Font#
The font module for text rendering
- class Font(options={})[source]#
Bases:
object
This is the font object that is used to render text.
- Parameters:
options (
dict
) – A Font config. Defaults to the Font defaults.
- property size: int#
The size of the text in points.
- Return type:
int
- generate_surface(text, align=Defaults.text_defaults['anchor'], width=Defaults.text_defaults['width'], rot=0)[source]#
Generate the surface containing the text.
- Parameters:
text (
str
) – The text to render.align (
str
) – The alignment to use. Defaults to Vector(0, 0).width (
int
) – The maximum width to use. Defaults to -1.rot (
int
) – The rotation of the text in degrees. Defaults to 0.
- Raises:
ValueError – The width is too small for the text.
ValueError – The size of the text is too large for the font.
- Returns:
The surface containing the text.
- Return type:
sdl2.SDL_Surface
- add_style(style)[source]#
Adds a style to the font.
- Parameters:
style (
str
) – The style to add. Can be one of the following: bold, italic, underline, strikethrough.
Radio#
The Radio module is a system used to communicate to all parts of the game. This is similar to event systems in other game engines.
To use this, first you need to listen for a specific key using the
Radio.listen()
function. Then from anywhere else in the code, you can
broadcast that event key using Radio.broadcast()
.
Go here to see all the events that can be broadcast.
- class Radio[source]#
Bases:
object
Broadcast system manages all events and inter-class communication. Handles event callbacks during the beginning of each
Game.update()
call.- listeners#
A dictionary with all of the active listeners.
- Type:
dict[str, Callable]
- classmethod listen(event, func)[source]#
Creates an event listener and registers it.
- Parameters:
event (
str
) – The event key to listen for.func (
Callable
) – The function to run once the event is broadcast. It may take in a params dictionary argument.
- class Listener(event, callback)[source]#
Bases:
object
The actual listener object itself. A backend class for the Radio.
- Parameters:
event (
str
) – The event key to listen for.callback (
Callable
) – The function to run once the event is broadcast.
- event#
The event descriptor
- Type:
str
- callback#
The function called when the event occurs
- Type:
Callable
- registered#
Describes whether the listener is registered
- Type:
bool
Errors#
Some custom errors
- exception SideError[source]#
Bases:
Exception
An error that is raised when the number of sides is invalid
- exception DuplicateComponentError[source]#
Bases:
Exception
An error that is raised when you try to add a component to a game object that already has a component of the same type
- exception ComponentNotAllowed[source]#
Bases:
Exception
An error that is raised when you try to add a component on a game object that is not allowed by another component on that game object.
- exception RemovalWarning[source]#
Bases:
DeprecationWarning
A warning that is raised when you try to use a removed function.