Skip to content

Scene

Handles all events and rendering for the engine.

Warning

Do not override __init__ in subclasses. Use on_init instead. All Scene objects/instances are managed and created internally by the Engine. At no point will any developer need to do anything more than define a subclass of Scene.

engine instance-attribute

engine: 'Engine' = engine

The engine running the scene.

screen instance-attribute

screen: pygame.Surface = self.engine.screen

The screen rendering all objects.

frame instance-attribute

frame: Frame = Frame(
    self, None, position=(0, 0), size=(1.0, 1.0)
)

The UI frame responsible for handling all scene UI objects natively - Rendered each frame after on_render automatically, unless disabled.

on_cleanup

on_cleanup() -> None

Code below should be executed when the scene is being switched/cleaned up

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_cleanup(self) -> None:
        ... # Terminate background threads, save data, etc.

on_first

on_first() -> None

Code below should be executed when the scene is about to start rendering

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_first(self) -> None:
        ... # Start game timers, etc.

on_fixed_update

on_fixed_update() -> None

Code below should be executed every configurable, elapsed duration before objects are rendered to provide updates to instance states.

Info

This only runs on a certain configured duration, by default 60 times/second. If you wish to run this every frame, use on_update.

Tip

If you wish to change the duration of the fixed update, use engine.set_update_interval.

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_fixed_update(self) -> None:
        ... # Update positions, text, etc.

on_init

on_init(*args, **kwargs) -> None

Code below should be executed after the instance has been initialized by the engine.

Info

This should be treated as any other __init__ method.

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        # Initialize variables, logic, etc.
        ...

on_joystick_axis_motion

on_joystick_axis_motion(
    stick: int, axis: int, position: float
) -> None

Code below should be executed when a joystick's axis moves

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_axis_motion(self, stick:int, axis:int, position:float) -> None:
        ...

on_joystick_button_down

on_joystick_button_down(stick: int, button: int) -> None

Code below should be executed when a joystick's button gets pressed

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_button_down(self, stick:int, button:int) -> None:
        ...

on_joystick_button_up

on_joystick_button_up(stick: int, button: int) -> None

Code below should be executed when a joystick's button gets released

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_button_up(self, stick:int, button:int) -> None:
        ...

on_joystick_device_added

on_joystick_device_added(device: int) -> None

Code below should be executed when a new joystick device is added

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_device_added(self, device:int) -> None:
        ...

on_joystick_device_removed

on_joystick_device_removed(device: int) -> None

Code below should be executed when an old joystick device is removed

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_device_removed(self, device:int) -> None:
        ...

on_joystick_hat_motion

on_joystick_hat_motion(
    stick: int, hat: int, position: IntVector2
) -> None

Code below should be executed when a joystick's hat/D-Pad moves

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_joystick_hat_motion(self, stick:int, hat:int, position:wame.IntVector2) -> None:
        ...

on_key_pressed

on_key_pressed(key: int, mods: int) -> None

Code below should be executed when a key is pressed

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_key_pressed(self, key:int, mods:int) -> None:
        ... # Pause game, display UI, etc.

on_key_pressing

on_key_pressing(key: int, mods: int) -> None

Code below should be executed when a key is being pressed

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_key_pressing(self, key:int, mods:int) -> None:
        ... # Move forward, honk horn, etc.

on_key_released

on_key_released(key: int, mods: int) -> None

Code below should be executed when a key is released

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_key_released(self, key:int, mods:int) -> None:
        ... # Stop moving forward, etc.

on_mouse_move

on_mouse_move(
    mouse_position: IntVector2, relative: IntVector2
) -> None

Code below should be executed when the mouse moves

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_mouse_move(self, mouse_position:wame.IntVector2, relative:wame.IntVector2) -> None:
        print(f"Mouse was moved {relative} amount @ {mouse_position}")

on_mouse_pressed

on_mouse_pressed(
    mouse_position: IntVector2, button: int
) -> None

Code below should be executed when a mouse button was pressed

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_mouse_pressed(self, mouse_position:wame.IntVector2, button:int) -> None:
        ... # Start shooting, rotate character, etc.

on_mouse_released

on_mouse_released(
    mouse_position: IntVector2, button: int
) -> None

Code below should be executed when a mouse button was released

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_mouse_released(self, mouse_position:wame.IntVector2, button:int) -> None:
        ... # Shoot arrow, stop shooting, etc.

on_mouse_wheel_scroll

on_mouse_wheel_scroll(
    mouse_position: IntVector2, amount: int
) -> None

Code below should be executed when the scroll wheel moves

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_mouse_wheel_scroll(self, mouse_position:wame.IntVector2, amount:int) -> None:
        if amount > 0:
            print(f"Scroll wheel moved up @ {mouse_position}!")
        else:
            print(f"Scroll wheel moved down @ {mouse_position}!")

on_user_event

on_user_event(event: pygame.event.Event) -> None

Code below should be executed when a custom user event is called

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_user_event(self, event:pygame.event.Event) -> None:
        ...

on_window_close

on_window_close() -> None

Code below should be executed when the window is requested to close

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_close(self) -> None:
        ...

on_window_display_changed

on_window_display_changed() -> None

Code below should be executed when the window's display/monitor changes

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_display_changed(self) -> None:
        ...

on_window_focus_gained

on_window_focus_gained() -> None

Code below should be executed when the window gains focus

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_focus_gained(self) -> None:
        ...

on_window_focus_lost

on_window_focus_lost() -> None

Code below should be executed when the window loses focus

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_focus_lost(self) -> None:
        ...

on_window_hidden

on_window_hidden() -> None

Code below should be executed when the window is hidden

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_hidden(self) -> None:
        ...

on_window_maximized

on_window_maximized() -> None

Code below should be executed when the window gets maximized

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_maximized(self) -> None:
        ...

on_window_minimized

on_window_minimized() -> None

Code below should be executed when the window gets minimized

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_minimized(self) -> None:
        ...

on_window_mouse_enter

on_window_mouse_enter() -> None

Code below should be executed when the mouse enters the window

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_mouse_enter(self) -> None:
        ...

on_window_mouse_leave

on_window_mouse_leave() -> None

Code below should be executed when the mouse leaves the window

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_mouse_leave(self) -> None:
        ...

on_window_moved

on_window_moved(position: IntVector2) -> None

Code below should be executed when the window moves

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_moved(self, position:wame.IntVector2) -> None:
        ...

on_window_resize

on_window_resize(size: IntVector2) -> None

Code below should be executed when the window is resized

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_resize(self, size:wame.IntVector2) -> None:
        ... # Edit OpenGL viewport, etc.

on_window_restored

on_window_restored() -> None

Code below should be executed when the window is restored from a minimized or maximized state

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_restored(self) -> None:
        ...

on_window_shown

on_window_shown() -> None

Code below should be executed when window becomes visible

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_window_shown(self) -> None:
        ...

on_render

on_render() -> None

Code below should be executed every frame to render all objects after being updated

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_render(self) -> None:
        ... # Render text, objects, etc.

on_update

on_update() -> None

Code below should be executed every frame before objects are rendered to provide updates to instance states

Example
class MyScene(wame.Scene):
    def on_init(self, *args, **kwargs) -> None:
        ...

    def on_update(self) -> None:
        ... # Update positions, text, etc.