Exemple #1
0
    def parse_by_row(self, last_role, last_mode, row_data):
        # 当前角色、对话文本
        current_role_name, text = row_data[0], row_data[1]
        # 音乐、立绘、换页、背景、备注、模式、音效、转场、特殊效果
        music, character, change_page, background, remark, mode, sound, transition, _ = row_data[
            18:]
        # nvl模式
        if mode == 'nvl':
            current_mode = 'nvl'
        elif mode == 'adv':
            current_mode = 'adv'
        else:
            current_mode = last_mode
        # 角色信息
        if last_role and current_role_name == "":
            current_role = last_role
        elif current_role_name not in ["", "旁白"]:
            current_role = self.add_role(current_role_name)
        elif current_mode == 'adv':
            current_role = Role("narrator_adv", "None")
        elif current_mode == 'nvl':
            current_role = Role("narrator_nvl", "None")
        else:
            current_role = None

        text = Text(text, current_role)
        text.add_triggers(Mode(current_mode))
        # 音乐信息
        if music:
            cmd = "stop" if music == "none" else "play"
            text.add_triggers(Audio(music, cmd))
        # 背景信息
        if background:
            text.add_triggers(Image(background, "scene"))
        # 立绘信息
        if character:
            characters = [
                Converter.generate_character(ch) for ch in character.split(";")
            ]
            text.add_triggers(*characters)
        # 音效
        if sound:
            if sound.startswith('循环'):
                text.add_triggers(Audio(sound.replace('循环', ''), 'loop'))
            else:
                cmd = "stop" if sound == "stop" else "sound"
                text.add_triggers(Audio(sound, cmd))
        # 转场
        if transition:
            t_style = TransitionMapping.get(transition, "")
            text.add_triggers(Transition(t_style))
        # 换页
        if change_page:
            text.add_triggers(Command("nvl clear"))
        return current_mode, current_role, text
Exemple #2
0
 def add_role(self, name):
     role = self.role_name_mapping.get(name)
     if not role:
         role = Role(
             "role{}".format(len(self.role_name_mapping.keys()) + 1), name)
         self.role_name_mapping[name] = role
     return role
Exemple #3
0
 def __init__(self, parser):
     self.parser = parser
     self.roles = list()
     self.role_name_mapping = dict()
     self.current_mode = 'nvl'
     self.current_role = Role("narrator_nvl", "None")
     self.characters = list()
Exemple #4
0
 def _converter_role(self):
     # 角色
     role_name = self.row[ElementColNumMapping.get('role_name')]
     if role_name not in ["", "旁白"]:
         self.converter.current_role = self.converter.add_role(role_name)
     elif role_name == '' and self.converter.current_role:
         return self.converter.current_role
     else:
         self.converter.current_role = Role("narrator_{}".format(self.converter.current_mode), "None")
     return self.converter.current_role
Exemple #5
0
 def _converter_role(self):
     # 角色
     role_name = self.row[ElementColNumMapping.get('role_name')]
     if role_name not in ["", "旁白"]:
         # 当其他角色出现时,重置模式为nvl
         self.converter.current_role = self.converter.add_role(role_name)
     elif role_name == "" and self.converter.current_mode == "":
         return self.converter.current_role
     else:
         self.converter.current_role = Role(
             "narrator_{}".format(self.converter.current_mode), "None")
     # elif role_name != "":
     #     # 当其他角色出现时,重置模式为nvl
     #     self.converter.current_role = self.converter.add_role(role_name)
     #     self.converter.current_mode = "nvl"
     return self.converter.current_role