From 6ae098fa4e7e6e4e88ebc37c341285295cbf9584 Mon Sep 17 00:00:00 2001 From: Willy-JL <49810075+Willy-JL@users.noreply.github.com> Date: Sun, 17 Mar 2024 21:19:13 +0000 Subject: [PATCH] Asset packer bugfixes and improvements - Ignore hidden files - Fix .DS_Store - Check known extensions - Support precompiled anims - Fix FBT integration --- scripts/asset_packer.py | 13 +++++++++---- scripts/fbt_tools/fbt_assets.py | 24 +++++++++++++++--------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/scripts/asset_packer.py b/scripts/asset_packer.py index f6f9dacb5..7b20812f8 100755 --- a/scripts/asset_packer.py +++ b/scripts/asset_packer.py @@ -56,7 +56,10 @@ def pack_anim(src: pathlib.Path, dst: pathlib.Path): shutil.copyfile(src / "meta.txt", dst / "meta.txt") continue elif frame.name.startswith("frame_"): - (dst / frame.with_suffix(".bm").name).write_bytes(convert_bm(frame)) + if frame.suffix == ".bm": + shutil.copyfile(frame, dst / frame.name) + elif frame.suffix == ".png": + (dst / frame.with_suffix(".bm").name).write_bytes(convert_bm(frame)) def pack_icon_animated(src: pathlib.Path, dst: pathlib.Path): @@ -141,9 +144,11 @@ def pack( if (source / "Icons").is_dir(): for icons in (source / "Icons").iterdir(): - if not icons.is_dir(): + if not icons.is_dir() or icons.name.startswith("."): continue for icon in icons.iterdir(): + if icon.name.startswith("."): + continue if icon.is_dir(): logger( f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}" @@ -151,7 +156,7 @@ def pack( pack_icon_animated( icon, packed / "Icons" / icons.name / icon.name ) - elif icon.is_file(): + elif icon.is_file() and icon.suffix == ".png": logger( f"Compile: icon for pack '{source.name}': {icons.name}/{icon.name}" ) @@ -161,7 +166,7 @@ def pack( if (source / "Fonts").is_dir(): for font in (source / "Fonts").iterdir(): - if not font.is_file(): + if not font.is_file() or font.name.startswith(".") or font.suffix != ".c": continue logger(f"Compile: font for pack '{source.name}': {font.name}") pack_font(font, packed / "Fonts" / font.name) diff --git a/scripts/fbt_tools/fbt_assets.py b/scripts/fbt_tools/fbt_assets.py index 344e42625..7b5e09644 100644 --- a/scripts/fbt_tools/fbt_assets.py +++ b/scripts/fbt_tools/fbt_assets.py @@ -72,24 +72,30 @@ def _packs_emitter(target, source, env): target_dir = target[0] env.Replace(_PACKS_OUT_DIR=target_dir) env.Replace(_PACKS_SRC_DIR=source_dir) + target = set(); - target = [ - target_dir.File(source_dir.rel_path(node)) + target.update( + source_dir.rel_path(node) for node in env.GlobRecursive("*/Anims/manifest.txt", source_dir.srcnode()) - ] - target.extend( - target_dir.File(source_dir.rel_path(node).removesuffix(".png") + ".bm") + ) + target.update( + source_dir.rel_path(node) + for node in env.GlobRecursive("*/Anims/**/*.bm", source_dir.srcnode()) + ) + target.update( + source_dir.rel_path(node).removesuffix(".png") + ".bm" for node in env.GlobRecursive("*/Anims/**/*.png", source_dir.srcnode()) ) - target.extend( - target_dir.File(source_dir.rel_path(node).removesuffix(".png") + ".bmx") + target.update( + source_dir.rel_path(node).removesuffix(".png") + ".bmx" for node in env.GlobRecursive("*/Icons/**/*.png", source_dir.srcnode()) ) - target.extend( - target_dir.File(source_dir.rel_path(node).removesuffix(".c") + ".u8f") + target.update( + source_dir.rel_path(node).removesuffix(".c") + ".u8f" for node in env.GlobRecursive("*/Fonts/*.c", source_dir.srcnode()) ) + target = [target_dir.File(path) for path in target] return target, source