mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-24 03:29:57 -07:00
Refactor asset packs to build properly with fbt
This commit is contained in:
14
.gitignore
vendored
14
.gitignore
vendored
@@ -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/
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()()
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user