# Released under the MIT License. See LICENSE for details.
#
# AUTO-GENERATED by `tools/pcommand gen_base_asset_set_py`.
# DO NOT EDIT BY HAND.
#
# Generated from src/codegen/babasecodegen/base_assets.py.
"""Supplying base with the assets its classic-flavored art uses."""
from __future__ import annotations # Docs-generation hack.
from typing import TYPE_CHECKING
import _babase
if TYPE_CHECKING:
from bacommon.assetspec import (
CubeMapTextureSpec,
MeshSpec,
SoundSpec,
TextureSpec,
)
[docs]
class BaseAssetSet:
"""Assets for the classic-flavored art baked into base.
Base draws a few things whose *look* belongs to the classic
game -- explosion debris, smoke, the VR boxing-glove hands,
the reflection environment maps -- but whose draw code is
engine-level. An app-mode carries one of these on its
app-mode config and hands it to
:func:`babase.set_base_asset_set` when activating to supply
that art.
Slots hold asset *references* (any wrapper flavor works);
nothing loads until the set is applied. A slot left at
``None`` gets a neutral placeholder the engine provides
itself (white texture, black cube map, flat quad mesh,
silent sound), so a bare ``BaseAssetSet()`` renders a plain
but coherent world: white debris, no reflections (a black
cube map contributes nothing, since reflections are
additive).
"""
# One attr per slot is the whole point of this class; the
# complexity limits are aimed at hand-written code where
# this shape signals trouble.
# pylint: disable=too-many-instance-attributes
# -- Environment cube maps for object reflections. The black
# placeholder makes an unsupplied reflection a no-op (reflections are
# additive).
#: Reflection map for characters.
reflection_char: CubeMapTextureSpec | None
#: Reflection map for powerup boxes.
reflection_powerup: CubeMapTextureSpec | None
#: Soft reflection map.
reflection_soft: CubeMapTextureSpec | None
#: Sharp reflection map.
reflection_sharp: CubeMapTextureSpec | None
#: Sharper reflection map.
reflection_sharper: CubeMapTextureSpec | None
#: Sharpest reflection map.
reflection_sharpest: CubeMapTextureSpec | None
# -- Art for the engine-side effect systems -- bg_dynamics debris and
# the smoke component.
#: Smoke puff sheet.
smoke: TextureSpec | None
#: Spark streak.
sparks: TextureSpec | None
#: Bomb fuse.
fuse: TextureSpec | None
#: Rock shrapnel chunk color map.
shrapnel_rock_color: TextureSpec | None
#: Rock shrapnel chunk.
shrapnel_rock: MeshSpec | None
#: Wooden-board shrapnel chunk.
shrapnel_board: MeshSpec | None
#: Slime glob shrapnel chunk.
shrapnel_slime: MeshSpec | None
#: Light/shadow blotch (sharp).
light: TextureSpec | None
#: Light/shadow blotch (soft).
light_soft: TextureSpec | None
# -- Classic-look props base draws directly -- flag hardware and the
# VR boxing-glove hands.
#: Flag pole color map (bg_dynamics ropes).
flag_pole_color: TextureSpec | None
#: Flag base stand.
flag_stand: MeshSpec | None
#: Boxing glove (VR hands).
boxing_glove: MeshSpec | None
#: Boxing glove color map.
boxing_gloves_color: TextureSpec | None
#: Round mask for character icons.
character_icon_mask: TextureSpec | None
#: Standin character icon (while real art loads).
standin_icon: TextureSpec | None
#: Colorize mask for the standin icon.
standin_icon_color_mask: TextureSpec | None
#: Faded busy spinner shown while a depiction's art loads (spun in
#: place).
depiction_spinner: TextureSpec | None
# -- Art for the on-screen touch controls -- the game-verb button
# glyphs and movement arrows.
#: Bomb/punch/jump/pickup button glyph sheet.
action_buttons: TextureSpec | None
#: Movement arrows sheet.
touch_arrows: TextureSpec | None
#: Movement arrows sheet (action variant).
touch_arrows_actions: TextureSpec | None
#: Single directional arrow.
arrow: TextureSpec | None
#: Bottom action-button backing.
action_button_bottom: MeshSpec | None
#: Left action-button backing.
action_button_left: MeshSpec | None
#: Right action-button backing.
action_button_right: MeshSpec | None
#: Top action-button backing.
action_button_top: MeshSpec | None
#: Back-arrow mesh.
arrow_back: MeshSpec | None
#: Front-arrow mesh.
arrow_front: MeshSpec | None
# -- Connect/disconnect sounds for input devices and party members.
#: Device-disconnect / player-left jingle.
cork_pop: SoundSpec | None
#: Device-connect / player-joined jingle.
gun_cocking: SoundSpec | None
def __init__(self) -> None:
# All slots start unsupplied (engine placeholders).
self.reflection_char = None
self.reflection_powerup = None
self.reflection_soft = None
self.reflection_sharp = None
self.reflection_sharper = None
self.reflection_sharpest = None
self.smoke = None
self.sparks = None
self.fuse = None
self.shrapnel_rock_color = None
self.shrapnel_rock = None
self.shrapnel_board = None
self.shrapnel_slime = None
self.light = None
self.light_soft = None
self.flag_pole_color = None
self.flag_stand = None
self.boxing_glove = None
self.boxing_gloves_color = None
self.character_icon_mask = None
self.standin_icon = None
self.standin_icon_color_mask = None
self.depiction_spinner = None
self.action_buttons = None
self.touch_arrows = None
self.touch_arrows_actions = None
self.arrow = None
self.action_button_bottom = None
self.action_button_left = None
self.action_button_right = None
self.action_button_top = None
self.arrow_back = None
self.arrow_front = None
self.cork_pop = None
self.gun_cocking = None
[docs]
def set_base_asset_set(assets: BaseAssetSet) -> None:
"""Supply the art for base's classic-flavored draw paths.
Called by an app-mode during activation (normally from
:meth:`~babase.AppMode.on_activate`, with the
:class:`BaseAssetSet` carried by its app-mode config).
Loading happens native-side as the set is applied. Slots
left at ``None`` get engine placeholders. At every app-mode
switch the native set is *restored to placeholders* (not
cleared -- base draws between modes too), so a mode can
never inherit a previous mode's art.
"""
# Positional, in spec order -- the native side is generated
# from the same spec, so the two cannot drift.
_babase.set_base_asset_set_native(
assets.reflection_char,
assets.reflection_powerup,
assets.reflection_soft,
assets.reflection_sharp,
assets.reflection_sharper,
assets.reflection_sharpest,
assets.smoke,
assets.sparks,
assets.fuse,
assets.shrapnel_rock_color,
assets.shrapnel_rock,
assets.shrapnel_board,
assets.shrapnel_slime,
assets.light,
assets.light_soft,
assets.flag_pole_color,
assets.flag_stand,
assets.boxing_glove,
assets.boxing_gloves_color,
assets.character_icon_mask,
assets.standin_icon,
assets.standin_icon_color_mask,
assets.depiction_spinner,
assets.action_buttons,
assets.touch_arrows,
assets.touch_arrows_actions,
assets.arrow,
assets.action_button_bottom,
assets.action_button_left,
assets.action_button_right,
assets.action_button_top,
assets.arrow_back,
assets.arrow_front,
assets.cork_pop,
assets.gun_cocking,
)
# 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, TypeIs)
import asyncio
from concurrent.futures import Future
from pathlib import Path
from enum import Enum