rott/kf_sources/KFEmojiPack/Converter.py
2026-07-14 20:27:09 +07:00

150 lines
4.4 KiB
Python

import os
from pathlib import Path
try:
from PIL import Image
except Exception as e:
print(str(e))
input("Install Pillow to continue `pip install Pillow`...")
# what format we want for output files?
FILE_FORMAT: str = "TGA"
# must be in degrees of 2
RESIZE_DIMENSIONS: tuple[int, int] = [32, 32]
EXEC_DIRECTIVE: str = (
r"#exec TEXTURE IMPORT FILE=Output\{tmp}.TGA NAME={tmp} MIPS=0 MASKED=1 DXT=3"
)
SERVERPERKS_TEMPLATE: str = (
"""SmileyTags=(iconTexture="{texure_ref}",IconTag="{tag}",bCaseInsensitive=False)"""
)
formats_list: list[str] = [
".BMP",
".DIB",
".EPS",
".GIF",
".ICNS",
".ICO",
".IM",
".JPG",
".JPEG",
".J2K",
".J2P",
".JPX",
".MSP",
".PCX",
".PNG",
".PPM",
".SGI",
".SPIDER",
".TGA",
".TIFF",
".WebP",
".XBM",
]
def parse_input_files(input_path: Path, output_path: Path) -> list[str]:
"""Check `Input` folder and convert files to `Output`.
Returns list of files for further use."""
file_list: list[str] = []
lancoz: Image.Resampling = Image.Resampling(1)
for path_object in input_path.rglob("*"):
if path_object.is_file():
if path_object.suffix.upper() not in formats_list:
continue
base_name: str = "{}.{}".format(path_object.stem, FILE_FORMAT)
opath: Path = output_path.joinpath(base_name)
try:
with Image.open(path_object) as image:
resized_image: Image = image.resize(
RESIZE_DIMENSIONS, resample=lancoz
)
resized_image.save(opath)
file_list.append(path_object.stem)
except OSError as err:
print("cannot convert", path_object, str(err))
return file_list
def add_files_to_generator(input_path: Path, file_list: list[str]) -> None:
"""Add converted and processed files to `GenerateTexture.uc`"""
generator_class: Path = input_path.joinpath("GenerateTexture.uc")
if not generator_class.exists():
generator_class.touch(exist_ok=True)
try:
with open(generator_class, "w") as f:
f.writelines("class GenerateTexture extends Actor;" + "\n")
f.writelines("\n")
for file in file_list:
f.writelines(EXEC_DIRECTIVE.format(tmp=file) + "\n")
except Exception as err:
print(str(err))
def create_config_template(input_path: Path, file_list: list[str]) -> None:
template_config: Path = input_path.joinpath("ServerPerks_Template.ini")
if not template_config.exists():
template_config.touch(exist_ok=True)
package_name: str = input_path.parent.name
try:
with open(template_config, "w") as f:
f.writelines("[ServerPerksMut.ServerPerksMut]" + "\n")
for file in file_list:
f.writelines(
SERVERPERKS_TEMPLATE.format(
texure_ref=package_name + "." + file, tag=file
)
+ "\n"
)
except Exception as err:
print(str(err))
def main() -> None:
absolute_path: Path = Path(os.path.dirname(__file__))
path_input: Path = absolute_path.joinpath("Input")
path_output: Path = absolute_path.joinpath("Output")
path_classes: Path = absolute_path.joinpath("Classes")
path_configs: Path = absolute_path.joinpath("Configs")
if not path_input.exists():
path_input.mkdir(parents=True, exist_ok=True)
print(
"You did not have `Input` folder. We fixed it for you, no go and put some files to there!"
)
exit()
if not path_classes.exists():
path_classes.mkdir(parents=True, exist_ok=True)
if not path_output.exists():
path_output.mkdir(parents=True, exist_ok=True)
if not path_configs.exists():
path_configs.mkdir(parents=True, exist_ok=True)
file_list: list[str] = parse_input_files(path_input, path_output)
if len(file_list) == 0:
print("There were no files in Input folder! Exiting!")
exit()
add_files_to_generator(path_classes, file_list)
create_config_template(path_configs, file_list)
input("Script did the magic! Now compile your emoji pack!")
if __name__ == "__main__":
main()