From ae5e9976e52f9ad42040c9b626e967a026085f2f Mon Sep 17 00:00:00 2001 From: Faraphel Date: Wed, 27 Jul 2022 20:32:25 +0200 Subject: [PATCH] implemented track_new_if to select track that should be selected by "Random: New tracks" --- source/mkw/ModConfig.py | 14 ++++++++------ source/mkw/Track.py | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/source/mkw/ModConfig.py b/source/mkw/ModConfig.py index d0bf4ee..af223b8 100644 --- a/source/mkw/ModConfig.py +++ b/source/mkw/ModConfig.py @@ -28,20 +28,21 @@ class ModConfig: __slots__ = ("name", "path", "nickname", "variant", "tags_prefix", "tags_suffix", "default_track", "_tracks", "version", "original_track_prefix", "swap_original_order", "keep_original_track", "enable_random_cup", "tags_cups", "track_file_template", - "multiplayer_disable_if", "macros", "messages") + "multiplayer_disable_if", "track_new_if", "macros", "messages", "settings") def __init__(self, path: Path | str, name: str, nickname: str = None, version: str = None, variant: str = None, tags_prefix: dict[Tag, str] = None, tags_suffix: dict[Tag, str] = None, - tags_cups: list[Tag] = None, - default_track: "Track | TrackGroup" = None, tracks: list["Track | TrackGroup"] = None, - original_track_prefix: bool = None, swap_original_order: bool = None, - keep_original_track: bool = None, enable_random_cup: bool = None, + tags_cups: list[Tag] = None, default_track: "Track | TrackGroup" = None, + tracks: list["Track | TrackGroup"] = None, original_track_prefix: bool = None, + swap_original_order: bool = None, keep_original_track: bool = None, enable_random_cup: bool = None, track_file_template: str = None, multiplayer_disable_if: str = None, macros: dict[str, str] = None, - messages: dict[str, dict[str, str]] = None): + track_new_if: str = None, messages: dict[str, dict[str, str]] = None, + settings: dict[str, dict[str, str]] = None): self.path = Path(path) self.macros: dict = macros if macros is not None else {} self.messages: dict = messages if messages is not None else {} + self.settings: dict = settings if settings is not None else {} self.name: str = name self.nickname: str = nickname if nickname is not None else name @@ -57,6 +58,7 @@ class ModConfig: self.track_file_template: str = track_file_template \ if track_file_template is not None else "{{ getattr(track, 'sha1', '_') }}" self.multiplayer_disable_if: str = multiplayer_disable_if if multiplayer_disable_if is not None else "False" + self.track_new_if: str = track_new_if if track_new_if is not None else "True" self.original_track_prefix: bool = original_track_prefix if original_track_prefix is not None else True self.swap_original_order: bool = swap_original_order if swap_original_order is not None else True diff --git a/source/mkw/Track.py b/source/mkw/Track.py index 27d3596..f90d65b 100644 --- a/source/mkw/Track.py +++ b/source/mkw/Track.py @@ -92,11 +92,13 @@ class Track: """ return self.get_tag_template(mod_config, mod_config.tags_suffix, default) - def is_highlight(self, mod_config: "ModConfig", default: any = None) -> bool: - ... - - def is_new(self, mod_config: "ModConfig", default: any = None) -> bool: - ... + def is_new(self, mod_config: "ModConfig") -> bool: + """ + Return if the track should be considered as new for random selection + :param mod_config: mod configuration + :return: is the track new + """ + return mod_config.safe_eval(mod_config.track_new_if, multiple=False, env={"track": self}) == "True" def get_ctfile(self, mod_config: "ModConfig", template: str, hidden: bool = False) -> str: """ @@ -110,7 +112,7 @@ class Track: return ( f'{"H" if hidden else "T"} {self.music}; ' # track type - f'{self.special}; {(0x04 if hidden else 0) | (0x01 if self.is_new(mod_config, False) else 0):#04x}; ' # lecode flags + f'{self.special}; {(0x04 if hidden else 0) | (0x01 if self.is_new(mod_config) else 0):#04x}; ' # lecode flags f'{file_name}; ' # filename f'{name}; ' # name of the track in the menu f'{file_name}\n' # unique identifier for each track