add typing to config file

This commit is contained in:
Anthony Samms
2025-11-01 13:51:44 -04:00
parent c917095315
commit e477c86c6a
3 changed files with 80 additions and 3 deletions

View File

@@ -18,6 +18,7 @@ Download for OS of choice on releases page
How to run: How to run:
Windows: Windows:
Install VC redistributable package from Microsoft
``` ```
Run PyTaiko.exe Run PyTaiko.exe
``` ```

View File

@@ -2,6 +2,8 @@ from dataclasses import dataclass, field
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from libs.utils import Config
@dataclass @dataclass
class Modifiers: class Modifiers:
""" """
@@ -66,7 +68,7 @@ class GlobalData:
session_data (list[SessionData]): Session data for both players. session_data (list[SessionData]): Session data for both players.
""" """
songs_played: int = 0 songs_played: int = 0
config: dict[str, Any] = field(default_factory=lambda: dict()) config: Config = field(default_factory=lambda: dict())
song_hashes: dict[str, list[dict]] = field(default_factory=lambda: dict()) #Hash to path song_hashes: dict[str, list[dict]] = field(default_factory=lambda: dict()) #Hash to path
song_paths: dict[Path, str] = field(default_factory=lambda: dict()) #path to hash song_paths: dict[Path, str] = field(default_factory=lambda: dict()) #path to hash
song_progress: float = 0.0 song_progress: float = 0.0

View File

@@ -8,7 +8,7 @@ import json
from libs.global_data import global_data from libs.global_data import global_data
from functools import lru_cache from functools import lru_cache
from pathlib import Path from pathlib import Path
from typing import Any, Optional from typing import Any, Optional, TypedDict
import pyray as ray import pyray as ray
import tomlkit import tomlkit
@@ -22,6 +22,80 @@ from libs.texture import TextureWrapper
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class GeneralConfig(TypedDict):
fps_counter: bool
audio_offset: int
visual_offset: int
language: str
hard_judge: int
touch_enabled: bool
timer_frozen: bool
judge_counter: bool
nijiiro_notes: bool
log_level: int
class NameplateConfig(TypedDict):
name: str
title: str
title_bg: int
dan: int
gold: bool
class PathsConfig(TypedDict):
tja_path: list[str]
video_path: list[str]
class Keys1PConfig(TypedDict):
exit_key: str
left_kat: list[str]
left_don: list[str]
right_don: list[str]
right_kat: list[str]
class Keys2PConfig(TypedDict):
left_kat: list[str]
left_don: list[str]
right_don: list[str]
right_kat: list[str]
class GamepadConfig(TypedDict):
left_kat: list[int]
left_don: list[int]
right_don: list[int]
right_kat: list[int]
class AudioConfig(TypedDict):
device_type: int
sample_rate: int
buffer_size: int
exclusive: bool
class VolumeConfig(TypedDict):
sound: float
music: float
voice: float
hitsound: float
class VideoConfig(TypedDict):
screen_width: int
screen_height: int
fullscreen: bool
borderless: bool
target_fps: int
vsync: bool
class Config(TypedDict):
general: GeneralConfig
nameplate_1p: NameplateConfig
nameplate_2p: NameplateConfig
paths: PathsConfig
keys_1p: Keys1PConfig
keys_2p: Keys2PConfig
gamepad: GamepadConfig
audio: AudioConfig
volume: VolumeConfig
video: VideoConfig
def force_dedicated_gpu(): def force_dedicated_gpu():
"""Force Windows to use dedicated GPU for this application""" """Force Windows to use dedicated GPU for this application"""
if sys.platform == "win32": if sys.platform == "win32":
@@ -75,7 +149,7 @@ def get_pixels_per_frame(bpm: float, time_signature: float, distance: float) ->
total_frames = 60 * total_time total_frames = 60 * total_time
return (distance / total_frames) return (distance / total_frames)
def get_config() -> dict[str, Any]: def get_config() -> Config:
"""Get the configuration from the TOML file""" """Get the configuration from the TOML file"""
config_path = Path('dev-config.toml') if Path('dev-config.toml').exists() else Path('config.toml') config_path = Path('dev-config.toml') if Path('dev-config.toml').exists() else Path('config.toml')