Refactor asset packs to build properly with fbt

This commit is contained in:
Willy-JL
2023-11-12 05:30:22 +00:00
parent 748932151d
commit 94efe04132
5 changed files with 76 additions and 25 deletions

14
.gitignore vendored
View File

@@ -68,17 +68,3 @@ PVS-Studio.log
.gdbinit
/fbt_options_local.py
# XFW-specific:
# Automate files, etc
automate.py
deployments/
commitnotes.md
fbt_options.py
# Asset packs
assets/asset_packs/*
!assets/asset_packs/WatchDogs/
!assets/asset_packs/ReadMe.md
assets/resources/asset_packs/

View File

@@ -79,4 +79,17 @@ if assetsenv["IS_BASE_FIRMWARE"]:
env.Replace(DOLPHIN_EXTERNAL_OUT_DIR=dolphin_external_out_dir)
asset_packs_out_dir = assetsenv["ASSETS_WORK_DIR"].Dir("asset_packs")
# Default asset packs
asset_packs = assetsenv.AssetPacksBuilder(
asset_packs_out_dir,
assetsenv["ASSETS_SRC_DIR"].Dir("packs"),
)
if assetsenv["FORCE"]:
assetsenv.AlwaysBuild(asset_packs)
assetsenv.Alias("asset_packs", asset_packs)
assetsenv.Clean(asset_packs, asset_packs_out_dir)
env.Replace(ASSET_PACKS_OUT_DIR=asset_packs_out_dir)
Return("assetslib")

View File

@@ -152,7 +152,7 @@ if env["IS_BASE_FIRMWARE"]:
manifest = fwenv.ManifestBuilder(
"${RESOURCES_ROOT}/Manifest",
GIT_UNIX_TIMESTAMP=get_git_commit_unix_timestamp(),
_EXTRA_DIST=[fwenv["DOLPHIN_EXTERNAL_OUT_DIR"]],
_EXTRA_DIST=[fwenv["DOLPHIN_EXTERNAL_OUT_DIR"], fwenv["ASSET_PACKS_OUT_DIR"]],
)
fwenv.Replace(FW_RESOURCES_MANIFEST=manifest)
fwenv.Alias("resources", manifest)

View File

@@ -2,9 +2,7 @@
import os
import shutil
import pathlib
import asset_packer
from flipper.app import App
from flipper.assets.icon import file2image
@@ -103,6 +101,17 @@ class Main(App):
)
self.parser_dolphin.set_defaults(func=self.dolphin)
self.parser_packs = self.subparsers.add_parser(
"packs", help="Assemble asset packs"
)
self.parser_packs.add_argument(
"input_directory", help="Packs source directory"
)
self.parser_packs.add_argument(
"output_directory", help="Packs output directory"
)
self.parser_packs.set_defaults(func=self.packs)
def _icon2header(self, file):
image = file2image(file)
return image.width, image.height, image.data_as_carray()
@@ -284,14 +293,6 @@ extern const size_t ICON_PATHS_COUNT;
else:
self.logger.info("Manifest is up-to-date!")
self.logger.info("Packing custom asset packs")
root_dir = pathlib.Path(__file__).absolute().parent.parent
asset_packer.pack(
root_dir / "assets/packs",
root_dir / f"assets/resources/asset_packs",
self.logger.info,
)
self.logger.info("Complete")
return 0
@@ -331,6 +332,19 @@ extern const size_t ICON_PATHS_COUNT;
return 0
def packs(self):
import asset_packer
self.logger.info("Packing custom asset packs")
asset_packer.pack(
self.args.input_directory,
self.args.output_directory,
self.logger.info,
)
self.logger.info("Finished custom asset packs")
return 0
if __name__ == "__main__":
Main()()

View File

@@ -67,6 +67,28 @@ def _dolphin_emitter(target, source, env):
return target, source
def _packs_emitter(target, source, env):
source_dir = source[0]
target_dir = target[0]
env.Replace(_PACKS_OUT_DIR=target_dir)
env.Replace(_PACKS_SRC_DIR=source_dir)
target = [
target_dir.File(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")
for node in env.GlobRecursive("*/Anims/**/*.png", source_dir.srcnode())
)
target.extend(
target_dir.File(source_dir.rel_path(node).removesuffix(".png") + ".bmx")
for node in env.GlobRecursive("*/Icons/**/*.png", source_dir.srcnode())
)
return target, source
def __invoke_git(args, source_dir):
cmd = ["git"]
cmd.extend(args)
@@ -146,6 +168,7 @@ def generate(env):
ICONSCOMSTR="\tICONS\t${TARGET}",
PROTOCOMSTR="\tPROTO\t${SOURCE}",
DOLPHINCOMSTR="\tDOLPHIN\t${DOLPHIN_RES_TYPE}",
PACKSCOMSTR="\tPACKS\t${SOURCE}",
PBVERCOMSTR="\tPBVER\t${TARGET}",
)
@@ -218,6 +241,21 @@ def generate(env):
),
emitter=_dolphin_emitter,
),
"AssetPacksBuilder": Builder(
action=Action(
[
[
"${PYTHON3}",
"${ASSETS_COMPILER}",
"packs",
"${_PACKS_SRC_DIR}",
"${_PACKS_OUT_DIR}",
],
],
"${PACKSCOMSTR}",
),
emitter=_packs_emitter,
),
"ProtoVerBuilder": Builder(
action=Action(
_proto_ver_generator,