From 42a96db471f77b45e646f2085d910550e4ccd14a Mon Sep 17 00:00:00 2001 From: raphael60650 Date: Fri, 16 Jul 2021 11:29:44 +0200 Subject: [PATCH] added ctfile creation for CT_Config, Cup, Track --- source/CT_Config.py | 29 +++++++++++++++++++++++++---- source/Cup.py | 29 ++++++++++++++++++----------- source/Track.py | 27 ++++++++++++++++++++++++--- 3 files changed, 67 insertions(+), 18 deletions(-) diff --git a/source/CT_Config.py b/source/CT_Config.py index cbe7768..c2dc030 100644 --- a/source/CT_Config.py +++ b/source/CT_Config.py @@ -37,7 +37,7 @@ class CT_Config: def add_ordered_cup(self, cup: Cup): self.ordered_cups.append(cup) - for track in cup.get_tracks(): + for track in cup.tracks: self.all_version.add(track.since_version) def add_unordered_track(self, track: Track): @@ -63,8 +63,29 @@ class CT_Config: def get_total_tracks_count(self): return (len(self.ordered_cups) * 4) + len(self.unordered_tracks) - def create_ctfile(self): - pass + def create_ctfile(self, directory="./file/"): + with open(directory+"CTFILE.txt", "w", encoding="utf-8") as ctfile, \ + open(directory+"RCTFILE.txt", "w", encoding="utf-8") as rctfile: + header = ( + "#CT-CODE\n" + "[RACING-TRACK-LIST]\n" + "%LE-FLAGS=1\n" + "%WIIMM-CUP=1\n" + "N N$SWAP | N$F_WII\n\n") + ctfile.write(header); rctfile.write(header) + + # generate cup for undefined track + unordered_cups = [] + for i, track in enumerate(self.unordered_tracks): + if i % 4 == 0: + _actual_cup = Cup(name=f"TL{i // 4}") + unordered_cups.append(_actual_cup) + _actual_cup.tracks[i % 4] = track + + # all cups + for cup in self.ordered_cups + unordered_cups: + ctfile.write(cup.get_ctfile_cup(race=False)) + rctfile.write(cup.get_ctfile_cup(race=True)) def get_cticon(self): """ @@ -84,4 +105,4 @@ class CT_Config: cup_icon = get_cup_icon(i) ct_icon.paste(cup_icon, (0, i * CT_ICON_WIDTH)) - return ct_icon #ct_icon.save("./file/ct_icons.tpl.png") + return ct_icon # ct_icon.save("./file/ct_icons.tpl.png") diff --git a/source/Cup.py b/source/Cup.py index 90744c8..b93e6e8 100644 --- a/source/Cup.py +++ b/source/Cup.py @@ -4,7 +4,7 @@ from .patch_ct_icon import get_cup_icon class Cup: - def __init__(self, name: str, id: int, + def __init__(self, name: str, track1: Track = EMPTY_TRACK, track2: Track = EMPTY_TRACK, track3: Track = EMPTY_TRACK, @@ -12,15 +12,22 @@ class Cup: icon: Image = None): self.name = name - self.track1 = track1 - self.track2 = track2 - self.track3 = track3 - self.track4 = track4 - self.icon = icon if icon else create_cup_icon(id) - self.id = id # cup number + self.tracks = [track1, track2, track3, track4] + self.icon = icon - def get_ctfile_cup(self): - pass + def get_ctfile_cup(self, race=False): + """ + :param race: is it a text used for Race_*.szs ? + :return: ctfile definition for the cup + """ + ctfile_cup = f'\nC "{self.name}"\n' + for track in self.tracks: + ctfile_cup += track.get_ctfile_track(race) + return ctfile_cup - def get_tracks(self): - return self.track1, self.track2, self.track3, self.track4 + def get_icon(self, id: int): + """ + :param id: cup number + :return: icon of the cup + """ + return self.icon if self.icon else get_cup_icon(id) diff --git a/source/Track.py b/source/Track.py index b0a99d7..3c58ca1 100644 --- a/source/Track.py +++ b/source/Track.py @@ -1,5 +1,4 @@ from .definition import * -import subprocess import source.wszst @@ -43,7 +42,7 @@ class Track: if self.score: if 0 < self.score <= 3: - star_text = "★" * track["score"] + "☆" * (3 - track["score"]) + star_text = "★" * self.score + "☆" * (3 - self.score) star_text = trackname_color[star_text] + " " if self.since_version == highlight_track_from_version: @@ -67,7 +66,29 @@ class Track: if source.wszst.sha1(self.file_wu8) == self.sha1: return 0 else: return -1 - def get_ct_file_track(self): pass + def get_ctfile_track(self, race=False): + """ + :param race: is it a text used for Race_*.szs ? + :return: ctfile definition for the track + """ + ctfile_text = ( + f' T {self.music}; ' + f'{self.special}; ' + f'{"0x01" if self.new else "0x00"}; ' + ) + if not race: + ctfile_text += ( + f'"{self.get_track_name()}"; ' # track path + f'"{self.get_track_formatted_name()}"; ' # track text shown ig + f'"-"\n') # sha1, useless for now. + else: + ctfile_text += ( + f'"-"; ' # track path, not used in Race_*.szs, save a bit of space + f'"{self.get_track_formatted_name()}\\n{self.author}"; ' # only in race show author's name + f'"-"\n' # sha1, useless for now. + ) + + return ctfile_text EMPTY_TRACK = Track("_")