mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-03 03:08:29 +02:00
95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
from dataclasses import dataclass
|
|
|
|
from source.mkw import Slot
|
|
from source.translation import translate as _
|
|
|
|
|
|
class OriginalTrackNotFound(Exception):
|
|
def __init__(self, track_data: any):
|
|
super().__init__(_("CANNOT_FIND_ORIGINAL_TRACK", ' "', track_data, '" '))
|
|
|
|
|
|
@dataclass(init=True, slots=True)
|
|
class OriginalTrack:
|
|
"""
|
|
An object representing one of the original track / arena of the game
|
|
"""
|
|
|
|
name: str
|
|
slot: Slot
|
|
|
|
def __post_init__(self):
|
|
if isinstance(self.slot, str): self.slot = Slot.get(normal=self.slot)
|
|
|
|
|
|
all_original_tracks: list[OriginalTrack] = [
|
|
OriginalTrack(name="beginner_course", slot=Slot.get(normal="T11")),
|
|
OriginalTrack(name="farm_course", slot="T12"),
|
|
OriginalTrack(name="kinoko_course", slot="T13"),
|
|
OriginalTrack(name="factory_course", slot="T14"),
|
|
|
|
OriginalTrack(name="castle_course", slot="T21"),
|
|
OriginalTrack(name="shopping_course", slot="T22"),
|
|
OriginalTrack(name="boardcross_course", slot="T23"),
|
|
OriginalTrack(name="truck_course", slot="T24"),
|
|
|
|
OriginalTrack(name="senior_course", slot="T31"),
|
|
OriginalTrack(name="water_course", slot="T32"),
|
|
OriginalTrack(name="treehouse_course", slot="T33"),
|
|
OriginalTrack(name="volcano_course", slot="T34"),
|
|
|
|
OriginalTrack(name="desert_course", slot="T41"),
|
|
OriginalTrack(name="ridgehighway_course", slot="T42"),
|
|
OriginalTrack(name="koopa_course", slot="T43"),
|
|
OriginalTrack(name="rainbow_course", slot="T44"),
|
|
|
|
# retro tracks
|
|
OriginalTrack(name="old_peach_gc", slot="T51"),
|
|
OriginalTrack(name="old_falls_ds", slot="T52"),
|
|
OriginalTrack(name="old_obake_sfc", slot="T53"),
|
|
OriginalTrack(name="old_mario_64", slot="T54"),
|
|
|
|
OriginalTrack(name="old_sherbet_64", slot="T61"),
|
|
OriginalTrack(name="old_heyho_gba", slot="T62"),
|
|
OriginalTrack(name="old_town_ds", slot="T63"),
|
|
OriginalTrack(name="old_waluigi_gc", slot="T64"),
|
|
|
|
OriginalTrack(name="old_desert_ds", slot="T71"),
|
|
OriginalTrack(name="old_koopa_gba", slot="T72"),
|
|
OriginalTrack(name="old_donkey_64", slot="T73"),
|
|
OriginalTrack(name="old_mario_gc", slot="T74"),
|
|
|
|
OriginalTrack(name="old_mario_sfc", slot="T81"),
|
|
OriginalTrack(name="old_garden_ds", slot="T82"),
|
|
OriginalTrack(name="old_donkey_gc", slot="T83"),
|
|
OriginalTrack(name="old_koopa_64", slot="T84"),
|
|
|
|
# wii arena
|
|
OriginalTrack(name="block_battle", slot="A11"),
|
|
OriginalTrack(name="venice_battle", slot="A12"),
|
|
OriginalTrack(name="skate_battle", slot="A13"),
|
|
OriginalTrack(name="casino_battle", slot="A14"),
|
|
OriginalTrack(name="sand_battle", slot="A15"),
|
|
|
|
# retro arena
|
|
OriginalTrack(name="old_battle4_sfc", slot="A21"),
|
|
OriginalTrack(name="old_battle3_gba", slot="A22"),
|
|
OriginalTrack(name="old_matenro_64", slot="A23"),
|
|
OriginalTrack(name="old_CookieLand_gc", slot="A24"),
|
|
OriginalTrack(name="old_House_ds", slot="A25"),
|
|
]
|
|
|
|
|
|
def get(**track_datas) -> OriginalTrack:
|
|
"""
|
|
Get a original track object from keys and its value
|
|
:param track_datas: dictionary of track key and their value
|
|
:return: the corresponding original track
|
|
"""
|
|
try:
|
|
return next(filter(
|
|
lambda og_track: all(getattr(og_track, key) == value for key, value in track_datas.items()),
|
|
all_original_tracks
|
|
))
|
|
except StopIteration: raise OriginalTrackNotFound(track_datas)
|
|
|