@@ -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