def generate_character(cls, img_str): last_word = img_str.split(" ")[-1] position = PositionMapping.get(last_word) if position: return Image(img_str.replace(last_word, "").strip(), "show", position) else: return Image(img_str.replace(last_word, "").strip(), ImageCmdMapping.get(last_word, "hide"))
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 _converter_character(self): # 立绘 character_str = self.row[ElementColNumMapping.get('character')].strip() if not character_str: return [] characters = [] # 新立绘出现时回收旧立绘 for character in self.converter.characters: characters.append(Image(character.name, 'hide')) new_characters = [Converter.generate_character(ch) for ch in character_str.split(";")] self.converter.characters = new_characters characters.extend(new_characters) return characters
def _converter_background(self): # 背景 background = self.row[ElementColNumMapping.get('background')] if not background: return None return Image(background, "scene")