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
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
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()
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
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