Source code for bascenev1._settings

# Released under the MIT License. See LICENSE for details.
#
"""Functionality for user-controllable settings."""

from __future__ import annotations

from typing import TYPE_CHECKING
from dataclasses import dataclass

if TYPE_CHECKING:
    from typing import Any


[docs] @dataclass class Setting: """Defines a user-controllable setting for a game or other entity.""" name: str default: Any
[docs] @dataclass class BoolSetting(Setting): """A boolean game setting.""" default: bool
[docs] @dataclass class IntSetting(Setting): """An integer game setting.""" default: int min_value: int = 0 max_value: int = 9999 increment: int = 1
[docs] @dataclass class FloatSetting(Setting): """A floating point game setting.""" default: float min_value: float = 0.0 max_value: float = 9999.0 increment: float = 1.0
[docs] @dataclass class ChoiceSetting(Setting): """A setting with multiple choices.""" choices: list[tuple[str, Any]]
[docs] @dataclass class IntChoiceSetting(ChoiceSetting): """An int setting with multiple choices.""" default: int choices: list[tuple[str, int]]
[docs] @dataclass class FloatChoiceSetting(ChoiceSetting): """A float setting with multiple choices.""" default: float choices: list[tuple[str, float]]
# 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