From 5d448369ee21768997912ea2b6e11d34d540952e Mon Sep 17 00:00:00 2001 From: Faraphel Date: Wed, 20 Jul 2022 12:19:35 +0200 Subject: [PATCH] added color to prefix and suffix --- Pack/MKWFaraphel/mod_config.json | 104 +++++++++++++++---------------- source/mkw/MKWColor.py | 51 +++++++++++++++ source/mkw/ModConfig.py | 4 +- source/mkw/Track.py | 23 +++++-- source/mkw/__init__.py | 43 ------------- 5 files changed, 124 insertions(+), 101 deletions(-) create mode 100644 source/mkw/MKWColor.py diff --git a/Pack/MKWFaraphel/mod_config.json b/Pack/MKWFaraphel/mod_config.json index 18a34f9..c4069e4 100644 --- a/Pack/MKWFaraphel/mod_config.json +++ b/Pack/MKWFaraphel/mod_config.json @@ -5,60 +5,60 @@ "variant": "60", "tags_prefix": { - "MSRDS": "green", - "CTR": "YOR4", - "CTTR": "YOR5", - "CNR": "YOR5", - "DKR": "YOR6", - "LCP": "green", - "LEGO-R": "red2", - "MP9": "YOR0", - "MSUSA": "green", - "FZMV": "YOR2", - "KAR": "green", - "KO": "YOR5", - "FZ": "YOR2", - "RV": "white", - "SADX": "blue2", - "SCR": "YOR2", - "SH": "red", - "SM64": "red1", - "SMB1": "red2", - "SMB2": "red3", - "SSBB": "red4", - "SMS": "YOR6", - "SMO": "YOR7", - "VVVVVV": "blue", - "WF": "green", - "WP": "yellow", - "Zelda OoT": "green", - "Zelda TP": "green", - "Zelda WW": "green", - "PMWR": "yellow", - "SHR": "green", - "SK64": "green", - "SMG": "red2", - "Spyro 1": "blue", - "Switch": "red4", - "Wii": "blue", - "3DS": "YOR3", - "DS": "white", - "GCN": "blue2", - "GBA": "blue1", - "N64": "red", - "SNES": "green", - "RMX": "YOR4", - "MKT": "YOR5", - "GP": "YOR6", - "Wii Shop": "blue1", - "UT": "red3", - "GK2": "green", - "GK3": "green", - "GK7": "green", - "FGKR": "YOR5" + "MSRDS": "{{ bmg_color_text('green', TAG) }}", + "CTR": "{{ bmg_color_text('orange', TAG) }}", + "CTTR": "{{ bmg_color_text('dark orange', TAG) }}", + "CNR": "{{ bmg_color_text('orange', TAG) }}", + "DKR": "{{ bmg_color_text('dark red', TAG) }}", + "LCP": "{{ bmg_color_text('green', TAG) }}", + "LEGO-R": "{{ bmg_color_text('light red', TAG) }}", + "MP9": "{{ bmg_color_text('neon yellow', TAG) }}", + "MSUSA": "{{ bmg_color_text('green', TAG) }}", + "FZMV": "{{ bmg_color_text('yellow', TAG) }}", + "KAR": "{{ bmg_color_text('green', TAG) }}", + "KO": "{{ bmg_color_text('dark orange', TAG) }}", + "FZ": "{{ bmg_color_text('yellow', TAG) }}", + "RV": "{{ bmg_color_text('white', TAG) }}", + "SADX": "{{ bmg_color_text('dark blue', TAG) }}", + "SCR": "{{ bmg_color_text('yellow', TAG) }}", + "SH": "{{ bmg_color_text('pink', TAG) }}", + "SM64": "{{ bmg_color_text('pink', TAG) }}", + "SMB1": "{{ bmg_color_text('light red', TAG) }}", + "SMB2": "{{ bmg_color_text('red', TAG) }}", + "SSBB": "{{ bmg_color_text('vivid red', TAG) }}", + "SMS": "{{ bmg_color_text('dark red', TAG) }}", + "SMO": "{{ bmg_color_text('apple red', TAG) }}", + "VVVVVV": "{{ bmg_color_text('azure', TAG) }}", + "WF": "{{ bmg_color_text('green', TAG) }}", + "WP": "{{ bmg_color_text('neon yellow 2', TAG) }}", + "Zelda OoT": "{{ bmg_color_text('green', TAG) }}", + "Zelda TP": "{{ bmg_color_text('green', TAG) }}", + "Zelda WW": "{{ bmg_color_text('green', TAG) }}", + "PMWR": "{{ bmg_color_text('neon yellow 2', TAG) }}", + "SHR": "{{ bmg_color_text('green', TAG) }}", + "SK64": "{{ bmg_color_text('green', TAG) }}", + "SMG": "{{ bmg_color_text('light red', TAG) }}", + "Spyro 1": "{{ bmg_color_text('azure', TAG) }}", + "Switch": "{{ bmg_color_text('vivid red', TAG) }}", + "Wii": "{{ bmg_color_text('azure', TAG) }}", + "3DS": "{{ bmg_color_text('light orange', TAG) }}", + "DS": "{{ bmg_color_text('white', TAG) }}", + "GCN": "{{ bmg_color_text('azure', TAG) }}", + "GBA": "{{ bmg_color_text('dark blue', TAG) }}", + "N64": "{{ bmg_color_text('pink', TAG) }}", + "SNES": "{{ bmg_color_text('green', TAG) }}", + "RMX": "{{ bmg_color_text('orange', TAG) }}", + "MKT": "{{ bmg_color_text('dark orange', TAG) }}", + "GP": "{{ bmg_color_text('dark red', TAG) }}", + "Wii Shop": "{{ bmg_color_text('azure', TAG) }}", + "UT": "{{ bmg_color_text('red', TAG) }}", + "GK2": "{{ bmg_color_text('green', TAG) }}", + "GK3": "{{ bmg_color_text('green', TAG) }}", + "GK7": "{{ bmg_color_text('green', TAG) }}", + "FGKR": "{{ bmg_color_text('dark orange', TAG) }}" }, "tags_suffix": { - "Boost": "orange" + "Boost": "{{ bmg_color_text('orange', TAG) }}" }, "tags_cups": ["Switch", "3DS", "DS", "GCN", "GBA", "N64", "SNES", "MKT", "RMX", "DX", "GP"], diff --git a/source/mkw/MKWColor.py b/source/mkw/MKWColor.py new file mode 100644 index 0000000..7207a0c --- /dev/null +++ b/source/mkw/MKWColor.py @@ -0,0 +1,51 @@ + +class ColorNotFound(Exception): + def __init__(self, color_data: any): + super().__init__(f'Can\'t find color "{color_data}"') + + +class MKWColor: + """ + Represent a color that can be used inside MKW files + """ + + all_colors: list[dict] = [ + {"bmg": "yor7", "hex": 0xF5090B, "name": "apple red"}, + {"bmg": "yor6", "hex": 0xE82C09, "name": "dark red"}, + {"bmg": "yor5", "hex": 0xE65118, "name": "dark orange"}, # flame + {"bmg": "yor4", "hex": 0xFF760E, "name": "orange"}, # pumpkin + {"bmg": "yor3", "hex": 0xFFA61F, "name": "light orange"}, # bright yellow + {"bmg": "yor2", "hex": 0xFEBC1F, "name": "yellow"}, # ripe mango + {"bmg": "yor1", "hex": 0xFFE71F, "name": "light yellow"}, + {"bmg": "yor0", "hex": 0xFFFF22, "name": "neon yellow"}, + {"bmg": "blue2", "hex": 0x1170EC, "name": "dark blue"}, + {"bmg": "blue1", "hex": 0x75B5F6, "name": "azure"}, + {"bmg": "green", "hex": 0x0EB00A, "name": "green"}, + {"bmg": "yellow", "hex": 0xFFFD1E, "name": "neon yellow 2"}, + {"bmg": "red4", "hex": 0xEE0C10, "name": "vivid red"}, + {"bmg": "red3", "hex": 0xFF0308, "name": "red"}, + {"bmg": "red2", "hex": 0xF14A4E, "name": "light red"}, + {"bmg": "red1", "hex": 0xE46C74, "name": "pink"}, + {"bmg": "white", "hex": 0xFFFFFF, "name": "white"}, + {"bmg": "clear", "hex": 0x000000, "name": "clear"}, + {"bmg": "off", "hex": 0x998C86, "name": "off"}, + ] + + __slots__ = ("bmg", "hex", "name") + + def __init__(self, color_data: any, color_key: str = "name"): + colors = list(filter(lambda color: color[color_key] == color_data, self.all_colors)) + if len(colors) == 0: raise ColorNotFound(color_data) + + for key, value in colors[0].items(): + setattr(self, key, value) + + +def bmg_color_text(color_name: str, text: str) -> str: + """ + Useful shortcut to color a text + :param color_name: name of the color + :param text: text to color + :return: return the formatted text with the color + """ + return r"\c{" + MKWColor(color_name).bmg + "}" + text + r"\c{" + MKWColor('off').bmg + "}" diff --git a/source/mkw/ModConfig.py b/source/mkw/ModConfig.py index 976a76d..f3c5044 100644 --- a/source/mkw/ModConfig.py +++ b/source/mkw/ModConfig.py @@ -4,7 +4,7 @@ from typing import Generator from PIL import Image from source import threaded -from source.mkw import Tag, Color +from source.mkw import Tag, MKWColor from source.mkw.Cup import Cup from source.mkw.Track import Track import json @@ -26,7 +26,7 @@ class ModConfig: "keep_original_track", "enable_random_cup", "tags_cups", "track_file_template") def __init__(self, path: Path | str, name: str, nickname: str = None, version: str = None, variant: str = None, - tags_prefix: dict[Tag, Color] = None, tags_suffix: dict[Tag, Color] = 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, diff --git a/source/mkw/Track.py b/source/mkw/Track.py index a989edb..7609621 100644 --- a/source/mkw/Track.py +++ b/source/mkw/Track.py @@ -1,6 +1,7 @@ from typing import Generator from source.mkw import Tag, Slot +from source.mkw.MKWColor import bmg_color_text from source.safe_eval import multiple_safe_eval @@ -60,6 +61,22 @@ class Track: return multiple_safe_eval(template, extra_token_map, {"track": self}) + def get_tag_template(self, templates: dict[str, str], default: any = None) -> any: + """ + Return the tag template found in templates. If not found, return default + :param templates: template with all the tags and its replacement + :param default: default value if no tag template is found + :return: formatted representation of the tag + """ + for tag in filter(lambda tag: tag in templates, self.tags): + template: str = templates[tag] + return multiple_safe_eval( + template, + extra_token_map={"TAG": "TAG", "bmg_color_text": "bmg_color_text"}, + env={"TAG": tag, "bmg_color_text": bmg_color_text} + ) + return default + def get_prefix(self, mod_config: "ModConfig", default: any = None) -> any: """ return the prefix of the track @@ -67,8 +84,7 @@ class Track: :param mod_config: mod configuration :return: formatted representation of the track prefix """ - for tag in filter(lambda tag: tag in mod_config.tags_prefix, self.tags): return tag - return default + return self.get_tag_template(mod_config.tags_prefix, default) def get_suffix(self, mod_config: "ModConfig", default: any = None) -> any: """ @@ -77,8 +93,7 @@ class Track: :param mod_config: mod configuration :return: formatted representation of the track suffix """ - for tag in filter(lambda tag: tag in mod_config.tags_suffix, self.tags): return tag - return default + return self.get_tag_template(mod_config.tags_suffix, default) def is_highlight(self, mod_config: "ModConfig", default: any = None) -> bool: ... diff --git a/source/mkw/__init__.py b/source/mkw/__init__.py index 3532555..2534beb 100644 --- a/source/mkw/__init__.py +++ b/source/mkw/__init__.py @@ -1,45 +1,2 @@ Tag = str Slot = str - - -class ColorNotFound(Exception): - def __init__(self, color_data: any): - super().__init__(f'Can\'t find color "{color_data}"') - - -class MKWColor: - """ - Represent a color that can be used inside MKW files - """ - - all_colors: list[dict] = [ - {"bmg": "yor7", "hex": 0xF5090B, "name": "apple red"}, - {"bmg": "yor6", "hex": 0xE82C09, "name": "dark red"}, - {"bmg": "yor5", "hex": 0xE65118, "name": "dark orange"}, # flame - {"bmg": "yor4", "hex": 0xFF760E, "name": "orange"}, # pumpkin - {"bmg": "yor3", "hex": 0xFFA61F, "name": "light orange"}, # bright yellow - {"bmg": "yor2", "hex": 0xFEBC1F, "name": "yellow"}, # ripe mango - {"bmg": "yor1", "hex": 0xFFE71F, "name": "light yellow"}, - {"bmg": "yor0", "hex": 0xFFFF22, "name": "neon yellow"}, - {"bmg": "blue2", "hex": 0x1170EC, "name": "dark blue"}, - {"bmg": "blue1", "hex": 0x75B5F6, "name": "azure"}, - {"bmg": "green", "hex": 0x0EB00A, "name": "green"}, - {"bmg": "yellow", "hex": 0xFFFD1E, "name": "neon yellow 2"}, - {"bmg": "red4", "hex": 0xEE0C10, "name": "vivid red"}, - {"bmg": "red3", "hex": 0xFF0308, "name": "red"}, - {"bmg": "red2", "hex": 0xF14A4E, "name": "light red"}, - {"bmg": "red1", "hex": 0xE46C74, "name": "pink"}, - {"bmg": "white", "hex": 0xFFFFFF, "name": "white"}, - {"bmg": "clear", "hex": 0x000000, "name": "clear"}, - {"bmg": "off", "hex": 0x998C86, "name": "off"}, - ] - - __slots__ = ("bmg", "hex", "name") - - def __init__(self, color_data: any, color_key: str = "name"): - colors = list(filter(lambda color: color[color_key] == color_data, self.all_colors)) - if len(colors) == 0: raise ColorNotFound(color_data) - - for key, value in colors[0].items(): - setattr(self, key, value) -