Source code for bascenev1._powerup
# Released under the MIT License. See LICENSE for details.
#
"""Powerup related functionality."""
from __future__ import annotations
from typing import TYPE_CHECKING
from dataclasses import dataclass
if TYPE_CHECKING:
from typing import Sequence
import bascenev1
[docs]
@dataclass
class PowerupMessage:
"""A message telling an object to accept a powerup.
This message is normally received by touching a
bascenev1.PowerupBox.
"""
poweruptype: str
"""The type of powerup to be granted (a string).
See bascenev1.Powerup.poweruptype for available type values."""
sourcenode: bascenev1.Node | None = None
"""The node the powerup game from, or None otherwise.
If a powerup is accepted, a bascenev1.PowerupAcceptMessage should be
sent back to the sourcenode to inform it of the fact. This will
generally cause the powerup box to make a sound and disappear or
whatnot."""
[docs]
@dataclass
class PowerupAcceptMessage:
"""A message informing a bascenev1.Powerup that it was accepted.
This is generally sent in response to a bascenev1.PowerupMessage to
inform the box (or whoever granted it) that it can go away.
"""
[docs]
def get_default_powerup_distribution() -> Sequence[tuple[str, int]]:
"""Standard set of powerups."""
return (
('triple_bombs', 3),
('ice_bombs', 3),
('punch', 3),
('impact_bombs', 3),
('land_mines', 2),
('sticky_bombs', 3),
('shield', 2),
('health', 1),
('curse', 1),
)
# Docs-generation hack; import some stuff that we likely only forward-declared
# in our actual source code so that docs tools can find it.
from typing import (Coroutine, Any, Literal, Callable,
Generator, Awaitable, Sequence, Self)
import asyncio
from concurrent.futures import Future
from pathlib import Path
from enum import Enum