Skip to content

Commit 9ed6a0a

Browse files
committed
[Core/ImagePack] CharacterSprite build: add error report for missing part instance belonging to declared expression tags for M/Y/K parts
1 parent e8d30c2 commit 9ed6a0a

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/preppipe/util/imagepack.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,6 +1838,9 @@ def try_add_combinations(parts_list : tuple[str, ...]):
18381838
parts_by_kind = parts_by_tag_kind[tag]
18391839
main_parts : list[list[str]] = [] # 眉毛、眼睛、嘴巴
18401840
d_parts : list[list[str]] = [] # 装饰
1841+
# 用于检查是否有某个部件没有对某个表情标签的差分(比如嘴巴没画)
1842+
# 宁可报错也不能悄悄生成没有嘴巴的表情
1843+
appeared_kinds : set[ImagePack.CharacterSpritePartsBased_PartKind] = set()
18411844
for kind in part_kinds.keys():
18421845
kind_enum = kinds_enum_map[kind]
18431846
if kind_enum == ImagePack.CharacterSpritePartsBased_PartKind.DECORATION:
@@ -1849,8 +1852,12 @@ def try_add_combinations(parts_list : tuple[str, ...]):
18491852
# 剩下的应该只有眉毛、眼睛、嘴巴
18501853
if kind_enum not in (ImagePack.CharacterSpritePartsBased_PartKind.EYEBROW, ImagePack.CharacterSpritePartsBased_PartKind.EYE, ImagePack.CharacterSpritePartsBased_PartKind.MOUTH):
18511854
raise PPNotImplementedError("Unknown part kind: " + kind)
1855+
appeared_kinds.add(kind_enum)
18521856
if cur_main_parts := parts_by_kind.get(kind):
18531857
main_parts.append(cur_main_parts)
1858+
for kind in (ImagePack.CharacterSpritePartsBased_PartKind.EYEBROW, ImagePack.CharacterSpritePartsBased_PartKind.EYE, ImagePack.CharacterSpritePartsBased_PartKind.MOUTH):
1859+
if kind in used_part_kinds and kind not in appeared_kinds:
1860+
raise PPInternalError("Missing part kind " + kind.name + " for tag " + tag)
18541861
# 生成所有可能的组合
18551862
for main_parts_combination in itertools.product(*main_parts):
18561863
try_add_combinations(main_parts_combination)

0 commit comments

Comments
 (0)