OriginalTrack is now a dataclass for better readability

This commit is contained in:
Faraphel 2022-08-18 22:22:12 +02:00
parent 025d985316
commit 3bfcfe53e4
3 changed files with 79 additions and 61 deletions

View file

@ -11,7 +11,7 @@ from source.mkw.Cup import Cup
from source.mkw.MKWColor import bmg_color_text, bmg_color_raw from source.mkw.MKWColor import bmg_color_text, bmg_color_raw
from source.mkw.ModSettings import AbstractModSettings from source.mkw.ModSettings import AbstractModSettings
from source.mkw.Track import CustomTrack, DefaultTrack, Arena from source.mkw.Track import CustomTrack, DefaultTrack, Arena
from source.mkw.OriginalTrack import OriginalTrack from source.mkw import OriginalTrack
from source.progress import Progress from source.progress import Progress
from source.safe_eval import safe_eval, multiple_safe_eval from source.safe_eval import safe_eval, multiple_safe_eval
from source.wt.szs import SZSPath from source.wt.szs import SZSPath
@ -450,7 +450,7 @@ class ModConfig:
# if the track should use the default track instead in multiplayer, # if the track should use the default track instead in multiplayer,
# copy the default track to the same file but with a _d at the end # copy the default track to the same file but with a _d at the end
shutil.copy( shutil.copy(
original_tracks_path / f"{OriginalTrack(track_data=track.special, track_key='slot').name}_d.szs", original_tracks_path / f"{OriginalTrack.get(slot=track.special).name}_d.szs",
destination_path / f"{track_file.stem}_d.szs" destination_path / f"{track_file.stem}_d.szs"
) )

View file

@ -1,3 +1,6 @@
from dataclasses import dataclass
from source.mkw import Slot
from source.translation import translate as _ from source.translation import translate as _
@ -6,70 +9,85 @@ class OriginalTrackNotFound(Exception):
super().__init__(_("CANNOT_FIND_ORIGINAL_TRACK", ' "', track_data, '" ')) super().__init__(_("CANNOT_FIND_ORIGINAL_TRACK", ' "', track_data, '" '))
@dataclass(init=True, slots=True, frozen=True)
class OriginalTrack: class OriginalTrack:
all_original_tracks: list[dict] = [ """
# wii tracks An object representing one of the original track / arena of the game
{"name": "beginner_course", "slot": "T11", "nickname": "LC"}, """
{"name": "farm_course", "slot": "T12", "nickname": "MMM"},
{"name": "kinoko_course", "slot": "T13", "nickname": "MG"},
{"name": "factory_course", "slot": "T14", "nickname": "TF"},
{"name": "castle_course", "slot": "T21", "nickname": "MC"}, name: str
{"name": "shopping_course", "slot": "T22", "nickname": "CM"}, slot: Slot
{"name": "boardcross_course", "slot": "T23", "nickname": "DKS"}, nickname: str
{"name": "truck_course", "slot": "T24", "nickname": "WGM"},
{"name": "senior_course", "slot": "T31", "nickname": "DC"},
{"name": "water_course", "slot": "T32", "nickname": "KC"},
{"name": "treehouse_course", "slot": "T33", "nickname": "MT"},
{"name": "volcano_course", "slot": "T34", "nickname": "GV"},
{"name": "desert_course", "slot": "T41", "nickname": "DDR"}, all_original_tracks: list[OriginalTrack] = [
{"name": "ridgehighway_course", "slot": "T42", "nickname": "MH"}, OriginalTrack(name="beginner_course", slot="T11", nickname="LC"),
{"name": "koopa_course", "slot": "T43", "nickname": "BC"}, OriginalTrack(name="farm_course", slot="T12", nickname="MMM"),
{"name": "rainbow_course", "slot": "T44", "nickname": "RR"}, OriginalTrack(name="kinoko_course", slot="T13", nickname="MG"),
OriginalTrack(name="factory_course", slot="T14", nickname="TF"),
# retro tracks OriginalTrack(name="castle_course", slot="T21", nickname="MC"),
{"name": "old_peach_gc", "slot": "T51", "nickname": "gPB"}, OriginalTrack(name="shopping_course", slot="T22", nickname="CM"),
{"name": "old_falls_ds", "slot": "T52", "nickname": "dYF"}, OriginalTrack(name="boardcross_course", slot="T23", nickname="DKS"),
{"name": "old_obake_sfc", "slot": "T53", "nickname": "sGV2"}, OriginalTrack(name="truck_course", slot="T24", nickname="WGM"),
{"name": "old_mario_64", "slot": "T54", "nickname": "nMR"},
{"name": "old_sherbet_64", "slot": "T61", "nickname": "nSL"}, OriginalTrack(name="senior_course", slot="T31", nickname="DC"),
{"name": "old_heyho_gba", "slot": "T62", "nickname": "gSGB"}, OriginalTrack(name="water_course", slot="T32", nickname="KC"),
{"name": "old_town_ds", "slot": "T63", "nickname": "dDS"}, OriginalTrack(name="treehouse_course", slot="T33", nickname="MT"),
{"name": "old_waluigi_gc", "slot": "T64", "nickname": "gWS"}, OriginalTrack(name="volcano_course", slot="T34", nickname="GV"),
{"name": "old_desert_ds", "slot": "T71", "nickname": "dDH"}, OriginalTrack(name="desert_course", slot="T41", nickname="DDR"),
{"name": "old_koopa_gba", "slot": "T72", "nickname": "gBC3"}, OriginalTrack(name="ridgehighway_course", slot="T42", nickname="MH"),
{"name": "old_donkey_64", "slot": "T73", "nickname": "nDKJP"}, OriginalTrack(name="koopa_course", slot="T43", nickname="BC"),
{"name": "old_mario_gc", "slot": "T74", "nickname": "gMC"}, OriginalTrack(name="rainbow_course", slot="T44", nickname="RR"),
{"name": "old_mario_sfc", "slot": "T81", "nickname": "sMC3"}, # retro tracks
{"name": "old_garden_ds", "slot": "T82", "nickname": "dPG"}, OriginalTrack(name="old_peach_gc", slot="T51", nickname="gPB"),
{"name": "old_donkey_gc", "slot": "T83", "nickname": "gDKM"}, OriginalTrack(name="old_falls_ds", slot="T52", nickname="dYF"),
{"name": "old_koopa_64", "slot": "T84", "nickname": "nBC"}, OriginalTrack(name="old_obake_sfc", slot="T53", nickname="sGV2"),
OriginalTrack(name="old_mario_64", slot="T54", nickname="nMR"),
# wii arena OriginalTrack(name="old_sherbet_64", slot="T61", nickname="nSL"),
{"name": "block_battle", "slot": "A11", "nickname": "aBP"}, OriginalTrack(name="old_heyho_gba", slot="T62", nickname="gSGB"),
{"name": "venice_battle", "slot": "A12", "nickname": "aDP"}, OriginalTrack(name="old_town_ds", slot="T63", nickname="dDS"),
{"name": "skate_battle", "slot": "A13", "nickname": "aFS"}, OriginalTrack(name="old_waluigi_gc", slot="T64", nickname="gWS"),
{"name": "casino_battle", "slot": "A14", "nickname": "aCCW"},
{"name": "sand_battle", "slot": "A15", "nickname": "aTD"},
# retro arena OriginalTrack(name="old_desert_ds", slot="T71", nickname="dDH"),
{"name": "old_battle4_sfc", "slot": "A21", "nickname": "asBC4"}, OriginalTrack(name="old_koopa_gba", slot="T72", nickname="gBC3"),
{"name": "old_battle3_gba", "slot": "A22", "nickname": "agBC3"}, OriginalTrack(name="old_donkey_64", slot="T73", nickname="nDKJP"),
{"name": "old_matenro_64", "slot": "A23", "nickname": "anSS"}, OriginalTrack(name="old_mario_gc", slot="T74", nickname="gMC"),
{"name": "old_CookieLand_gc", "slot": "A24", "nickname": "agCL"},
{"name": "old_House_ds", "slot": "A25", "nickname": "adTH"},
]
__slots__ = ("name", "slot", "nickname") OriginalTrack(name="old_mario_sfc", slot="T81", nickname="sMC3"),
OriginalTrack(name="old_garden_ds", slot="T82", nickname="dPG"),
OriginalTrack(name="old_donkey_gc", slot="T83", nickname="gDKM"),
OriginalTrack(name="old_koopa_64", slot="T84", nickname="nBC"),
def __init__(self, track_data: any, track_key: str = "slot"): # wii arena
colors = list(filter(lambda color: color[track_key] == track_data, self.all_original_tracks)) OriginalTrack(name="block_battle", slot="A11", nickname="aBP"),
if len(colors) == 0: raise OriginalTrackNotFound(track_data) OriginalTrack(name="venice_battle", slot="A12", nickname="aDP"),
OriginalTrack(name="skate_battle", slot="A13", nickname="aFS"),
OriginalTrack(name="casino_battle", slot="A14", nickname="aCCW"),
OriginalTrack(name="sand_battle", slot="A15", nickname="aTD"),
# retro arena
OriginalTrack(name="old_battle4_sfc", slot="A21", nickname="asBC4"),
OriginalTrack(name="old_battle3_gba", slot="A22", nickname="agBC3"),
OriginalTrack(name="old_matenro_64", slot="A23", nickname="anSS"),
OriginalTrack(name="old_CookieLand_gc", slot="A24", nickname="agCL"),
OriginalTrack(name="old_House_ds", slot="A25", nickname="adTH"),
]
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)
for key, value in colors[0].items():
setattr(self, key, value)

View file

@ -1,4 +1,4 @@
from source.mkw.OriginalTrack import OriginalTrack from source.mkw import OriginalTrack
from source.wt import * from source.wt import *
import re import re
@ -24,7 +24,7 @@ def bmg_ctfile(ctfile: "Path | str") -> str:
# this command will generate unwanted definition for the originals tracks / arena. Delete them if # this command will generate unwanted definition for the originals tracks / arena. Delete them if
# they are not custom # they are not custom
original_tracks_texts: list[str] = list(map(lambda data: data["name"], OriginalTrack.all_original_tracks)) original_tracks_texts: list[str] = list(map(lambda og_track: og_track.name, OriginalTrack.all_original_tracks))
def remove_unwanted_definition(match: re.Match) -> str: def remove_unwanted_definition(match: re.Match) -> str:
def_id = int(match.group("id"), 16) def_id = int(match.group("id"), 16)