Source code for mini_arcade.modules.game_runner.commands

"""
Game Runner Command: Implements the "run" command to start a Mini Arcade game or example.
"""

from __future__ import annotations

from mini_arcade.cli.argument_type import ArgumentType
from mini_arcade.cli.base_command import BaseCommand
from mini_arcade.cli.registry import CommandRegistry

from .processors import ExamplesTourProcessor, GameRunnerProcessor


[docs] @CommandRegistry.implementation("run") class GameRunnerCommand(BaseCommand): name = "run" args = [ ArgumentType( "game", str, "Game id/folder name (e.g. deja-bounce). Mutually exclusive with --example.", required=False, default=None, ), ArgumentType( "example", str, ( "Example id/folder path (e.g. config/engine_config_basics). " "Mutually exclusive with --game.", ), required=False, default=None, ), ArgumentType( "from_source", str, "Parent folder where games live (defaults to ./games in dev)", required=False, default=None, ), ArgumentType( "examples_dir", str, "Parent folder where examples live (defaults to ./examples in dev)", required=False, default=None, ), ArgumentType( "pass_through", str, "Args to forward to the target entrypoint. Use: --pass-through <args...>", required=False, nargs="...", default=[], ), ] __doc__ = """ Run a game or an example. Usage: mini-arcade run --game deja-bounce [--from-source <games_parent>] [--pass-through <args...>] mini-arcade run --example config/engine_config_basics [--examples-dir <examples_parent>] [--pass-through <args...>] mini-arcade run tour [tour options...] Description: This command starts a Mini Arcade game or example. You can specify the game/example by its id or folder name. By default, it looks for games in the ./games directory and examples in the ./examples directory (relative to the current working directory). You can override these defaults with the --from-source and --examples-dir options. It also supports the compatibility form `mini-arcade run tour`, which routes to the tutorial tour command. """ def _execute(self, **kwargs): self.set_processor(GameRunnerProcessor) self._run(**kwargs)
[docs] @CommandRegistry.implementation("tour") class TourCommand(BaseCommand): name = "tour" args = [ ArgumentType( "examples_dir", str, "Parent folder where examples live (defaults to ./examples/catalog in dev)", required=False, default=None, ), ArgumentType( "group", str, "Optional group prefix filter (e.g. config, scene, window).", required=False, default=None, ), ArgumentType( "from_example", str, "Optional starting example id (inclusive).", required=False, default=None, ), ArgumentType( "to_example", str, "Optional ending example id (inclusive).", required=False, default=None, ), ArgumentType( "stop_on_fail", bool, "Stop at first failing example (default: keep going).", required=False, default=False, ), ArgumentType( "list_only", bool, "List resolved example order and exit.", required=False, default=False, ), ArgumentType( "pass_through", str, "Args forwarded to each example entrypoint. Use: --pass-through <args...>", required=False, nargs="...", default=[], ), ] __doc__ = """ Run catalog examples sequentially. Usage: mini-arcade run tour mini-arcade run tour --group scene mini-arcade run tour --from-example scene/minimal_scene --to-example scene/pause_overlay_policy mini-arcade run tour --pass-through --backend native Description: This command orchestrates a full "run-all" tutorial session by launching examples one-by-one in subprocesses. When one example window closes, the next example starts automatically. Press Ctrl+C to stop the tour at any time. """ def _execute(self, **kwargs): self.set_processor(ExamplesTourProcessor) self._run(**kwargs)