def draw(self): """ 绘制对象 """ scene_position = cache.character_data[0].position scene_position_str = map_handle.get_map_system_path_str_for_list( scene_position) scene_name = cache.scene_data[scene_position_str].scene_name title_draw = draw.TitleLineDraw(scene_name, self.width) food_type_list = [_("主食"), _("零食"), _("饮品"), _("水果"), _("食材"), _("调料")] self.handle_panel = panel.PageHandlePanel([], SeeFoodListByFoodNameDraw, 10, 5, self.width, 1, 1, 0) while 1: py_cmd.clr_cmd() food_name_list = list( cooking.get_restaurant_food_type_list_buy_food_type( self.now_panel).items()) self.handle_panel.text_list = food_name_list self.handle_panel.update() title_draw.draw() return_list = [] for food_type in food_type_list: if food_type == self.now_panel: now_draw = draw.CenterDraw() now_draw.text = f"{food_type}]" now_draw.style = "onbutton" now_draw.width = self.width / len(food_type_list) now_draw.draw() else: now_draw = draw.CenterButton( f"[{food_type}]", food_type, self.width / len(food_type_list), cmd_func=self.change_panel, args=(food_type, ), ) now_draw.draw() return_list.append(now_draw.return_text) line_feed.draw() line = draw.LineDraw("+", self.width) line.draw() self.handle_panel.draw() return_list.extend(self.handle_panel.return_list) back_draw = draw.CenterButton(_("[返回]"), _("返回"), window_width) back_draw.draw() line_feed.draw() return_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(return_list) if yrn == back_draw.return_text: cache.now_panel_id = constant.Panel.IN_SCENE break
def confirmation_load_save_func(save_id: str): """ 读取存档询问流程 玩家输入0:读取指定存档 Keyword arguments: save_id -- 存档id """ cmd_list = save_handle_frame_panel.confirmation_load_save_panel() yrn = game_init.askfor_all(cmd_list) py_cmd.clr_cmd() if yrn == "0": save_handle.input_load_save(save_id) cache_contorl.now_flow_id = "main" return True return False
def draw(self): """ 绘制面板 """ while 1: line_feed.draw() self.now_draw.draw() back_draw = draw.CenterButton(_("[返回]"), _("返回"), self.width) back_draw.draw() now_draw_list = self.now_draw.return_list ask_list = [] ask_list.extend(now_draw_list) ask_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(ask_list) py_cmd.clr_cmd() if yrn == back_draw.return_text: break
def title_frame_func(): """ 标题界面绘制流程 """ title_frame_panel.load_game_panel() cache_contorl.wframe_mouse.w_frame_re_print = 1 ans = title_frame_panel.game_main_panel() py_cmd.clr_cmd() if ans == 0: cache_contorl.now_flow_id = "creator_character" elif ans == 1: cache_contorl.old_flow_id = "title_frame" cache_contorl.now_flow_id = "load_save" elif ans == 2: os._exit(0)
def establish_save_func(): """ 绘制保存存档界面流程 """ while True: input_s = [] save_page = save_page_index() show_save_value = save_page[0] last_save_page_value = save_page[1] save_handle_frame_panel.establish_save_info_head_panel() flow_return = save_handle_frame_panel.see_save_list_panel( show_save_value, last_save_page_value) input_s = input_s + flow_return start_id = len(input_s) flow_return = save_handle_frame_panel.ask_for_change_save_page_panel( start_id) input_s = input_s + flow_return yrn = game_init.askfor_int(input_s) py_cmd.clr_cmd() if yrn == str(start_id): save_panel_page = int( cache_contorl.panel_state["SeeSaveListPanel"]) if save_panel_page == 0: cache_contorl.panel_state[ "SeeSaveListPanel"] = cache_contorl.max_save_page else: cache_contorl.panel_state["SeeSaveListPanel"] = ( save_panel_page - 1) elif yrn == str(start_id + 1): cache_contorl.panel_state["SeeSaveListPanel"] = 0 cache_contorl.now_flow_id = cache_contorl.old_flow_id break elif yrn == str(start_id + 2): save_panel_page = int( cache_contorl.panel_state["SeeSaveListPanel"]) if save_panel_page == cache_contorl.max_save_page: cache_contorl.panel_state["SeeSaveListPanel"] = 0 else: cache_contorl.panel_state["SeeSaveListPanel"] = ( save_panel_page + 1) else: ans_return = int(yrn) save_id = str( save_handle.get_save_page_save_id(show_save_value, ans_return)) if save_handle.judge_save_file_exist(save_id): ask_for_overlay_save_func(save_id) else: save_handle.establish_save(save_id)
def ask_for_load_save_func(save_id: str): """ 读档处理询问流程 玩家输入0:进入读取存档询问流程 玩家输入1:进入删除存档询问流程 Keyword arguments: save_id -- 存档id """ cmd_list = save_handle_frame_panel.ask_load_save_panel() yrn = game_init.askfor_all(cmd_list) py_cmd.clr_cmd() if yrn == "0": return confirmation_load_save_func(save_id) elif yrn == "1": confirmation_remove_save_func(save_id) return False
def ask_for_overlay_save_func(save_id: str): """ 存档处理询问流程 玩家输入0:进入覆盖存档询问流程 玩家输入1:进入删除存档询问流程 Keyword arguments: save_id -- 存档id """ cmd_list = save_handle_frame_panel.ask_for_overlay_save_panel() yrn = game_init.askfor_all(cmd_list) yrn = str(yrn) py_cmd.clr_cmd() if yrn == "0": confirmation_overlay_save_func(save_id) elif yrn == "1": confirmation_remove_save_func(save_id)
def draw_save_handle(self): """ 处理读写存档 """ py_cmd.clr_cmd() line_feed.draw() if self.save_exist_judge: now_ask_list = [] now_id = 0 load_save_button = draw.Button(text_handle.id_index(now_id) + _("读取"), str(now_id), cmd_func=self.load_save) load_save_button.width = self.width load_save_button.draw() line_feed.draw() now_ask_list.append(str(now_id)) now_id += 1 if self.write_save: re_write_save_button = draw.Button( text_handle.id_index(now_id) + _("覆盖"), str(now_id), cmd_func=save_handle.establish_save, args=(self.text, ), ) re_write_save_button.width = self.width re_write_save_button.draw() now_ask_list.append(str(now_id)) line_feed.draw() now_id += 1 delete_save_button = draw.Button(text_handle.id_index(now_id) + _("删除"), str(now_id), cmd_func=self.delete_save) delete_save_button.width = self.width delete_save_button.draw() now_ask_list.append(str(now_id)) now_id += 1 line_feed.draw() back_button = draw.Button( text_handle.id_index(now_id) + _("返回"), str(now_id)) back_button.width = self.width back_button.draw() line_feed.draw() now_ask_list.append(str(now_id)) flow_handle.askfor_all(now_ask_list) py_cmd.clr_cmd() else: save_handle.establish_save(self.text)
def detailed_setting_func_3(): """ 询问玩家性经验程度流程 """ flow_return = creator_character_panel.detailed_setting_3_panel() sex_tem_data_list = list( text_loading.get_text_data( constant.FilePath.ATTR_TEMPLATE_PATH, "SexExperience" ).keys() ) sex_tem_data_list.reverse() sex_tem_name = sex_tem_data_list[flow_return] cache_contorl.character_data["character"][ 0 ].sex_experience_tem = sex_tem_name py_cmd.clr_cmd() detailed_setting_func_8()
def main_frame_func(): """ 游戏主页控制流程 """ input_s = [] flow_return = main_frame_panel.main_frame_panel() input_s = input_s + flow_return character_id = cache_contorl.character_data["character_id"] character_data = cache_contorl.character_data["character"][character_id] character_name = character_data.name ans = game_init.askfor_all(input_s) py_cmd.clr_cmd() cache_contorl.old_flow_id = "main" if ans == character_name: cache_contorl.now_flow_id = "see_character_attr" else: if ans == "0": clothing.init_character_clothing_put_on() cache_contorl.now_flow_id = main_frame_goto_data[ans]
def wear_character_item(): """ 查看并更换角色穿戴道具流程 """ character_id = cache_contorl.character_data[0].target_character_id while 1: input_s = wear_item_panel.see_character_wear_item_panel_for_player( character_id) start_id = len(input_s) input_s += wear_item_panel.see_character_wear_item_cmd_panel(start_id) yrn = flow_handle.askfor_all(input_s) py_cmd.clr_cmd() if yrn == str(len(input_s) - 1): cache_contorl.now_flow_id = "main" break else: wear_item_info_text_data = text_loading.get_text_data( constant.FilePath.STAGE_WORD_PATH, "49") change_wear_item(list(wear_item_info_text_data.keys())[int(yrn)])
def change_character_clothes(): """ 更换角色服装流程 """ character_id = cache_contorl.character_data[0].target_character_id character_clothing_data = cache_contorl.character_data[ character_id].clothing change_clothes_panel.see_character_wear_clothes_info(character_id) cmd_list_1 = change_clothes_panel.see_character_wear_clothes( character_id, True) start_id = len(character_clothing_data.keys()) input_s = change_clothes_panel.see_character_wear_clothes_cmd(start_id) input_s = cmd_list_1 + input_s yrn = flow_handle.askfor_all(input_s) py_cmd.clr_cmd() if yrn == str(start_id): cache_contorl.now_flow_id = "main" else: clothing_type = list(clothing.clothing_type_text_list.keys())[int(yrn)] see_character_clothes_list(clothing_type)
def draw(self): """ 绘制对象 """ while 1: if cache.back_save_panel: cache.back_save_panel = 0 break line_feed.draw() title_draw = draw.TitleLineDraw(_("存档列表"), self.width) title_draw.draw() self.return_list = [] self.handle_panel.update() self.handle_panel.draw() self.return_list.extend(self.handle_panel.return_list) back_draw = draw.CenterButton(_("[返回]"), _("返回"), self.width) back_draw.draw() line_feed.draw() self.return_list.append(back_draw.return_text) yrn = flow_handle.askfor_all(self.return_list) py_cmd.clr_cmd() if yrn == back_draw.return_text: break
def input_name_func(): """ 请求玩家输入姓名流程 输入0:进入请求玩家输入昵称流程(玩家姓名为默认或输入姓名流程结果) 输入1:进入输入姓名流程 输入2:返回标题菜单 """ game_time.init_time() cache_contorl.character_data["character_id"] = 0 cache_contorl.character_data["character"][0] = character.Character() flow_return = 0 while 1: flow_return = creator_character_panel.input_name_panel() if flow_return == 0: py_cmd.clr_cmd() break elif flow_return == 1: py_cmd.clr_cmd() creator_character_panel.start_input_name_panel() py_cmd.clr_cmd() else: break if flow_return == 0: input_nick_name_func() else: era_print.next_screen_print() cache_contorl.now_flow_id = "title_frame"
def title_panel(): """ 绘制游戏标题菜单 """ clear_screen = panel.ClearScreenPanel() clear_screen.draw() width = config_normal.text_width title_info = panel.TitleAndRightInfoListPanel() game_name = config_normal.game_name info_list = [ config_normal.author, config_normal.verson, config_normal.verson_time ] title_info.set(config_normal.game_name, info_list, width) title_info.draw() lineFeed = draw.NormalDraw() lineFeed.width = 1 lineFeed.text = "\n" info = _("人类是可以被驯化的") lineFeed.draw() info_draw = draw.CenterDraw() info_draw.text = info info_draw.width = width info_draw.draw() lineFeed.draw() lineFeed.draw() line = draw.LineDraw("=", width) line.draw() now_list = [_("开始游戏"), _("读取存档"), _("退出游戏")] button_panel = panel.OneMessageAndSingleColumnButton() button_panel.set(now_list, "", 0) button_panel.draw() return_list = button_panel.get_return_list() ans = flow_handle.askfor_all(return_list.keys()) py_cmd.clr_cmd() now_key = return_list[ans] if now_key == now_list[0]: cache.now_panel_id = constant.Panel.CREATOR_CHARACTER elif now_key == now_list[1]: now_panel = see_save_info_panel.SeeSaveListPanel(width, 0) now_panel.draw() elif now_key == now_list[2]: os._exit(0)
def input_sex_choice_func(): """ 玩家选择性别流程 输入0-3:选择对应性别(Man/Woman/Futa/Asexual) 输入4:随机选择一个性别 输入5:返回请求输入性别流程 """ sex = list( text_loading.get_text_data(constant.FilePath.ROLE_PATH, "Sex").keys() ) sex_max = len(sex) flow_return = creator_character_panel.input_sex_choice_panel() if flow_return in range(0, sex_max): sex_atr = sex[flow_return] cache_contorl.character_data["character"][0].sex = sex_atr py_cmd.clr_cmd() input_sex_confirm_func() elif flow_return == 4: rand = random.randint(0, len(sex) - 1) sex_atr = sex[rand] cache_contorl.character_data["character"][0].sex = sex_atr py_cmd.clr_cmd() input_sex_confirm_func() elif flow_return == 5: era_print.list_print() py_cmd.clr_cmd() input_sex_confirm_func()
def get_in_scene_func(): """ 用于进入场景界面的流程 """ py_cmd.clr_cmd() scene_path = cache_contorl.character_data["character"][0].position scene_path_str = map_handle.get_map_system_path_str_for_list(scene_path) map_handle.sort_scene_character_id(scene_path_str) cache_contorl.now_map = map_handle.get_map_for_path(scene_path) scene_data = cache_contorl.scene_data[scene_path_str].copy() scene_character_list = scene_data["SceneCharacterData"] print(cache_contorl.character_data["character"][0].dormitory is scene_path) if 0 not in scene_character_list: character_id_list = [0] scene_character_list = scene_character_list + character_id_list cache_contorl.scene_data[scene_path_str][ "SceneCharacterData" ] = scene_character_list if ( len(scene_character_list) > 1 and cache_contorl.character_data["character_id"] == 0 ): now_name_list = map_handle.get_scene_character_name_list( scene_path_str ) now_name_list.remove(cache_contorl.character_data["character"][0].name) cache_contorl.character_data[ "character_id" ] = map_handle.get_character_id_by_character_name( now_name_list[0], scene_path_str ) if cache_contorl.old_character_id != 0: cache_contorl.character_data[ "character_id" ] = cache_contorl.old_character_id cache_contorl.old_character_id = 0 if len(scene_character_list) > 1: see_scene_func(True) else: see_scene_func(False)
def acknowledgment_attribute_func(): """ 创建角色时用于查看角色属性的流程 """ while True: character_handle.init_character_list() input_s = [] see_attr_in_every_time_func() flow_return = see_character_attr_panel.input_attr_over_panel() input_s = flow_return + input_s yrn = game_init.askfor_int(input_s) py_cmd.clr_cmd() if yrn in panel_list: panel_state_handle.panel_state_change(yrn) elif yrn == "0": game_start_flow.init_game_start() break elif yrn == "1": cache_contorl.wframe_mouse.w_frame_re_print = 1 era_print.next_screen_print() cache_contorl.now_flow_id = "title_frame" break
def enter_character_nature_func(): """ 请求玩家确认性格流程 """ character.init_attr(cache_contorl.character_data[0]) while 1: py_cmd.clr_cmd() creator_character_panel.enter_character_nature_head() input_s = see_nature_panel.see_character_nature_change_panel(0) input_s += creator_character_panel.enter_character_nature_end() yrn = game_init.askfor_all(input_s) if yrn in cache_contorl.character_data[0].nature: if cache_contorl.character_data[0].nature[yrn] < 50: cache_contorl.character_data[0].nature[yrn] = random.uniform( 50, 100) else: cache_contorl.character_data[0].nature[yrn] = random.uniform( 0, 50) elif int(yrn) == 0: character.init_attr(cache_contorl.character_data[0]) cache_contorl.now_flow_id = "acknowledgment_attribute" break elif int(yrn) == 1: cache_contorl.character_data[0].nature = nature.get_random_nature()
def input_self_name_func(): """ 请求玩家输入自称流程 输入0:进入请求玩家输入性别流程(玩家自称为默认,或输入自称流程结果) 输入1:进入输入自称流程 输入2:返回请求输入昵称流程 """ flow_return = creator_character_panel.input_self_name_panel() if flow_return == 0: py_cmd.clr_cmd() input_sex_confirm_func() elif flow_return == 1: py_cmd.clr_cmd() creator_character_panel.start_input_self_name() py_cmd.clr_cmd() input_self_name_func() elif flow_return == 2: era_print.line_feed_print() py_cmd.clr_cmd() input_nick_name_func()
def input_sex_confirm_func(): """ 请求玩家输入性别流程 输入0:进入询问是否进行详细设置流程(玩家性别为默认,或请求选择性别流程结果) 输入1:进入选择性别流程 输入2:返回请求输入自称流程 """ flow_return = creator_character_panel.input_sex_panel() if flow_return == 0: py_cmd.clr_cmd() attribute_generation_branch_func() elif flow_return == 1: py_cmd.clr_cmd() input_sex_choice_func() elif flow_return == 2: py_cmd.clr_cmd() input_self_name_func()
def attribute_generation_branch_func(): """ 询问玩家是否需要详细设置属性流程 输入0:进入询问玩家年龄段流程 输入1:进入属性最终确认流程(使用基础模板生成玩家属性) 输入2:返回请求输入性别流程 """ flow_return = creator_character_panel.attribute_generation_branch_panel() if flow_return == 0: py_cmd.clr_cmd() detailed_setting_func_1() elif flow_return == 1: py_cmd.clr_cmd() cache_contorl.character_data["character"][0].init_attr() cache_contorl.now_flow_id = "acknowledgment_attribute" elif flow_return == 2: py_cmd.clr_cmd() input_sex_confirm_func()
def see_scene_func(judge: bool): """ 用于查看当前场景界面的流程 Keyword argument: judge -- 判断是否绘制角色列表界面的开关 """ while True: input_s = [] in_scene_panel.see_scene_panel() scene_path = cache_contorl.character_data["character"][0].position scene_path_str = map_handle.get_map_system_path_str_for_list( scene_path ) scene_character_name_list = map_handle.get_scene_character_name_list( scene_path_str ) name_list_max = int(game_config.in_scene_see_player_max) change_page_judge = False if len(scene_character_name_list) == 1: cache_contorl.character_data["character_id"] = 0 in_scene_cmd_list_1 = [] if judge: if cache_contorl.panel_state["SeeSceneCharacterListPage"] == "0": input_s = ( input_s + in_scene_panel.see_scene_character_list_panel() ) if len(scene_character_name_list) > name_list_max: in_scene_cmd_list_1 = ( in_scene_panel.change_scene_character_list_panel() ) change_page_judge = True input_s.append("SeeSceneCharacterListPage") start_id_1 = len(in_scene_cmd_list_1) in_scene_panel.see_character_info_panel() see_character_attr_panel.see_character_hp_and_mp_in_sence( cache_contorl.character_data["character_id"] ) see_character_attr_panel.see_character_status_panel( cache_contorl.character_data["character_id"] ) instruct_head = instruct_panel.see_instruct_head_panel() in_scene_cmd_list_2 = in_scene_panel.in_scene_button_panel(start_id_1) if change_page_judge: input_s += ( in_scene_cmd_list_1 + instruct_head + in_scene_cmd_list_2 ) else: input_s += instruct_head + in_scene_cmd_list_2 yrn = game_init.askfor_all(input_s) py_cmd.clr_cmd() now_page = int(cache_contorl.panel_state["SeeSceneCharacterListPanel"]) character_max = len(cache_contorl.character_data["character"]) - 1 page_max = math.floor(character_max / name_list_max) if yrn in scene_character_name_list: cache_contorl.character_data[ "character_id" ] = map_handle.get_character_id_by_character_name( yrn, scene_path_str ) elif ( judge and yrn not in in_scene_cmd_list_2 and yrn != "SeeSceneCharacterListPage" and change_page_judge ): if yrn == in_scene_cmd_list_1[0]: cache_contorl.panel_state["SeeSceneCharacterListPanel"] = 0 elif yrn == in_scene_cmd_list_1[1]: if int(now_page) == 0: cache_contorl.panel_state[ "SeeSceneCharacterListPanel" ] = page_max else: cache_contorl.panel_state["SeeSceneCharacterListPanel"] = ( int(now_page) - 1 ) elif yrn == in_scene_cmd_list_1[2]: cache_contorl.panel_state[ "SeeSceneCharacterListPanel" ] = in_scene_panel.jump_character_list_page_panel() elif yrn == in_scene_cmd_list_1[3]: if int(now_page) == page_max: cache_contorl.panel_state["SeeSceneCharacterListPanel"] = 0 else: cache_contorl.panel_state["SeeSceneCharacterListPanel"] = ( int(now_page) + 1 ) elif yrn == in_scene_cmd_list_1[4]: cache_contorl.panel_state[ "SeeSceneCharacterListPanel" ] = page_max elif yrn == in_scene_cmd_list_2[0]: cache_contorl.now_flow_id = "see_map" now_map = map_handle.get_map_for_path( cache_contorl.character_data["character"][0].position ) cache_contorl.now_map = now_map break elif yrn in [in_scene_cmd_list_2[1], in_scene_cmd_list_2[2]]: if yrn == in_scene_cmd_list_2[2]: cache_contorl.old_character_id = cache_contorl.character_data[ "character_id" ] cache_contorl.character_data["character_id"] = 0 cache_contorl.now_flow_id = "see_character_attr" cache_contorl.old_flow_id = "in_scene" break elif yrn == "SeeSceneCharacterListPage": panel_state_handle.panel_state_change(yrn) elif yrn in instruct_head: if cache_contorl.instruct_filter[yrn] == 0: cache_contorl.instruct_filter[yrn] = 1 else: cache_contorl.instruct_filter[yrn] = 0
def change_clothing(self): """ 更换角色服装 """ py_cmd.clr_cmd() info_draw = ClothingDescribeDraw(self.clothing_data.tem_id, self.width) info_draw.draw() cache.character_data[0].put_on[self.clothing_type] = self.clothing_data.uid
def see_attr_on_every_time_func(): """ 通用用于查看角色属性的流程 """ while True: character_id = cache_contorl.character_data[0].target_character_id if cache_contorl.old_flow_id == "in_scene": now_scene = cache_contorl.character_data[0].position now_scene_str = map_handle.get_map_system_path_str_for_list( now_scene ) character_id_list = map_handle.get_scene_character_id_list( now_scene_str ) else: character_id_list = list(cache_contorl.character_data.keys()) character_id_index = character_id_list.index(character_id) input_s = [] see_attr_in_every_time_func() ask_see_attr = see_character_attr_panel.ask_for_see_attr() input_s += ask_see_attr inputs_1 = see_character_attr_panel.ask_for_see_attr_cmd() input_s += inputs_1 yrn = game_init.askfor_all(input_s) py_cmd.clr_cmd() show_attr_handle_data = text_loading.get_text_data( constant.FilePath.CMD_PATH, "seeAttrPanelHandle" ) character_max = character_id_list[len(character_id_list) - 1] if yrn in show_attr_handle_data: cache_contorl.panel_state["AttrShowHandlePanel"] = yrn elif yrn == "0": if character_id_index == 0: cache_contorl.character_data[ 0 ].target_character_id = character_max else: character_id = character_id_list[character_id_index - 1] cache_contorl.character_data[ 0 ].target_character_id = character_id elif yrn == "1": if cache_contorl.old_flow_id == "main": cache_contorl.character_data[0].target_character_id = 0 elif cache_contorl.old_flow_id == "see_character_list": character_list_show = int(game_config.character_list_show) now_page_id = character_id_index / character_list_show cache_contorl.panel_state[ "SeeCharacterListPanel" ] = now_page_id elif cache_contorl.old_flow_id == "in_scene": scene_path = cache_contorl.character_data[0].position scene_path_str = map_handle.get_map_system_path_str_for_list( scene_path ) name_list = map_handle.get_scene_character_name_list( scene_path_str, True ) now_character_name = cache_contorl.character_data[ cache_contorl.character_data[0].target_character_id ].name try: now_character_index = name_list.index(now_character_name) except ValueError: now_character_index = 0 name_list_max = int(game_config.in_scene_see_player_max) now_scene_character_list_page = math.floor( now_character_index / name_list_max ) cache_contorl.panel_state[ "SeeSceneCharacterListPanel" ] = now_scene_character_list_page cache_contorl.panel_state["AttrShowHandlePanel"] = "MainAttr" cache_contorl.now_flow_id = cache_contorl.old_flow_id cache_contorl.old_flow_id = cache_contorl.too_old_flow_id break elif yrn == "2": if character_id == character_max: character_id = character_id_list[0] cache_contorl.character_data[ 0 ].target_character_id = character_id else: character_id = character_id_list[character_id_index + 1] cache_contorl.character_data[ 0 ].target_character_id = character_id
def draw(self): """ 绘制对象 """ title_draw = draw.TitleLineDraw(_("场景"), self.width) character_data: game_type.Character = cache.character_data[0] scene_path_str = map_handle.get_map_system_path_str_for_list(character_data.position) scene_data: game_type.Scene = cache.scene_data[scene_path_str] character_list = list(scene_data.character_list) character_list.remove(0) if not character_data.target_character_id and len(character_list): character_data.target_character_id = character_list[0] while 1: game_time_draw = game_info_panel.GameTimeInfoPanel(self.width / 2) game_time_draw.now_draw.width = len(game_time_draw) position_text = attr_text.get_scene_path_text(character_data.position) now_position_text = _("当前位置:") + position_text now_position_draw = draw.NormalDraw() now_position_draw.text = now_position_text now_position_draw.width = self.width - len(game_time_draw) meet_draw = draw.NormalDraw() meet_draw.text = _("你在这里遇到了:") meet_draw.width = self.width character_list = list(scene_data.character_list) character_list.remove(0) character_handle_panel = panel.PageHandlePanel( character_list, see_character_info_panel.SeeCharacterInfoByNameDrawInScene, 10, 5, self.width, 1, 0, null_button_text=character_data.target_character_id, ) see_instruct_panel = SeeInstructPanel(self.width) cache.wframe_mouse.w_frame_skip_wait_mouse = 0 if cache.now_panel_id != constant.Panel.IN_SCENE: break character_handle_panel.null_button_text = character_data.target_character_id line_feed.draw() title_draw.draw() game_time_draw.draw() now_position_draw.draw() line_feed.draw() ask_list = [] if len(scene_data.character_list) > 1: meet_draw.draw() line_feed.draw() character_handle_panel.update() character_handle_panel.draw() ask_list.extend(character_handle_panel.return_list) line_draw = draw.LineDraw("-.-", self.width) line_draw.draw() character_info_draw_list = [] if character_data.target_character_id: character_head_draw = see_character_info_panel.CharacterInfoHead( character_data.cid, self.width ) target_head_draw = see_character_info_panel.CharacterInfoHead( character_data.target_character_id, self.width ) character_head_draw_list = [y for x in character_head_draw.draw_list for y in x] character_head_draw_list[0].text += " " + character_head_draw_list[2].text del character_head_draw_list[2] target_head_draw_list = [y for x in target_head_draw.draw_list for y in x] target_head_draw_list[0].text += " " + target_head_draw_list[2].text del target_head_draw_list[2] character_info_draw_list = list(zip(character_head_draw_list, target_head_draw_list)) else: character_head_draw = see_character_info_panel.CharacterInfoHead( character_data.cid, self.width ) character_info_draw_list = character_head_draw.draw_list for value_tuple in character_info_draw_list: for value in value_tuple: value.draw() line_feed.draw() character_status_draw_list = [] if character_data.target_character_id: character_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.cid, self.width / 2, 3, 0 ) target_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.target_character_id, self.width / 2 - 1, 3, 0 ) character_status_draw_list = list( zip(character_status_draw.draw_list, target_status_draw.draw_list) ) else: character_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.cid, self.width, 5 ) character_status_draw_list = character_status_draw.draw_list for label in character_status_draw_list: if isinstance(label, tuple): index = 0 for value in label: if isinstance(value, list): for value_draw in value: value_draw.draw() else: value.line_feed = 0 value.draw() if not index: fix_draw = draw.NormalDraw() fix_draw.width = 1 fix_draw.text = "|" fix_draw.draw() index = 1 line_feed.draw() elif isinstance(label, list): for value in label: value.draw() line_feed.draw() else: label.draw() see_instruct_panel.draw() ask_list.extend(see_instruct_panel.return_list) target_id = character_data.target_character_id flow_handle.askfor_all(ask_list) py_cmd.clr_cmd()
def draw(self): """ 绘制对象 """ character_data: game_type.Character = cache.character_data[0] title_draw = draw.TitleLineDraw(_("场景"), self.width) scene_path_str = map_handle.get_map_system_path_str_for_list(character_data.position) scene_data: game_type.Scene = cache.scene_data[scene_path_str] character_handle_panel = panel.PageHandlePanel( [], see_character_info_panel.SeeCharacterInfoByNameDrawInScene, 10, 5, self.width, 1, 0, len(constant.handle_instruct_name_data), null_button_text=character_data.target_character_id, ) while 1: if character_data.dead: cache.wframe_mouse.w_frame_skip_wait_mouse = 0 now_draw = draw.LineFeedWaitDraw() now_draw.text = _("已死亡!") now_draw.width = self.width now_draw.draw() continue character_set = scene_data.character_list.copy() character_set.remove(0) if cache.is_collection: character_list = [i for i in character_set if i in character_data.collection_character] else: character_list = list(character_set) character_handle_panel.text_list = character_list if character_data.target_character_id not in scene_data.character_list: character_data.target_character_id = 0 if not character_data.target_character_id and len(character_list): character_data.target_character_id = character_list[0] game_time_draw = game_info_panel.GameTimeInfoPanel(self.width / 2) game_time_draw.now_draw.width = len(game_time_draw) position_text = attr_text.get_scene_path_text(character_data.position) now_position_text = _("当前位置:") + position_text now_position_draw = draw.NormalDraw() now_position_draw.text = now_position_text now_position_draw.width = self.width - len(game_time_draw) meet_draw = draw.NormalDraw() meet_draw.text = _("你在这里遇到了:") meet_draw.width = self.width see_instruct_panel = SeeInstructPanel(self.width) cache.wframe_mouse.w_frame_skip_wait_mouse = 0 if cache.now_panel_id != constant.Panel.IN_SCENE: break character_handle_panel.null_button_text = character_data.target_character_id line_feed.draw() title_draw.draw() game_time_draw.draw() now_position_draw.draw() line_feed.draw() ask_list = [] if len(character_list) and character_data.target_character_id not in character_list: character_data.target_character_id = character_list[0] if not len(character_list): character_data.target_character_id = 0 if len(character_list): meet_draw.draw() line_feed.draw() character_handle_panel.update() character_handle_panel.draw() ask_list.extend(character_handle_panel.return_list) line_draw = draw.LineDraw("-.-", self.width) line_draw.draw() character_info_draw_list = [] if character_data.target_character_id: character_head_draw = see_character_info_panel.CharacterInfoHead( character_data.cid, self.width ) target_head_draw = see_character_info_panel.CharacterInfoHead( character_data.target_character_id, self.width ) character_head_draw_list = [y for x in character_head_draw.draw_list for y in x] character_head_draw_list[0].text += " " + character_head_draw_list[2].text del character_head_draw_list[2] target_head_draw_list = [y for x in target_head_draw.draw_list for y in x] target_head_draw_list[0].text += " " + target_head_draw_list[2].text del target_head_draw_list[2] character_info_draw_list = list(zip(character_head_draw_list, target_head_draw_list)) else: character_head_draw = see_character_info_panel.CharacterInfoHead( character_data.cid, self.width ) character_info_draw_list = character_head_draw.draw_list for value_tuple in character_info_draw_list: for value in value_tuple: value.draw() line_feed.draw() character_clothing_draw_list = [] if character_data.target_character_id: character_clothing_draw = see_character_info_panel.CharacterWearClothingList( 0, self.width / 2, 2 ) target_clothing_draw = see_character_info_panel.CharacterWearClothingList( character_data.target_character_id, self.width / 2 - 1, 2 ) now_line = len(character_clothing_draw.draw_list) if len(target_clothing_draw.draw_list) > now_line: now_line = len(target_clothing_draw.draw_list) for i in range(now_line): c_draw = None if i in range(len(character_clothing_draw.draw_list)): c_draw = character_clothing_draw.draw_list[i] else: c_draw = draw.NormalDraw() c_draw.text = " " * int(self.width / 2) c_draw.width = self.width / 2 t_draw = None if i in range(len(target_clothing_draw.draw_list)): t_draw = target_clothing_draw.draw_list[i] else: t_draw = draw.NormalDraw() t_draw.text = " " * int(self.width / 2 - 1) t_draw.width = self.width / 2 - 1 character_clothing_draw_list.append((c_draw, t_draw)) else: character_clothing_draw_list = see_character_info_panel.CharacterWearClothingList( 0, self.width, 5 ).draw_list for label in character_clothing_draw_list: if isinstance(label, tuple): index = 0 for value in label: if isinstance(value, list): for value_draw in value: value_draw.draw() else: value.line_feed = 0 value.draw() if not index: fix_draw = draw.NormalDraw() fix_draw.width = 1 fix_draw.text = "|" fix_draw.draw() index = 1 line_feed.draw() elif isinstance(label, list): for value in label: value.draw() line_feed.draw() else: label.draw() character_status_draw_list = [] if character_data.target_character_id: character_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.cid, self.width / 2, 3, 0 ) target_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.target_character_id, self.width / 2 - 1, 3, 0 ) now_line = len(character_status_draw.draw_list) if len(target_status_draw.draw_list) > now_line: now_line = len(target_status_draw.draw_list) for i in range(now_line): c_draw = None if i in range(len(character_status_draw.draw_list)): c_draw = character_status_draw.draw_list[i] else: c_draw = draw.NormalDraw() c_draw.text = " " * int(self.width / 2) c_draw.width = self.width / 2 t_draw = None if i in range(len(target_status_draw.draw_list)): t_draw = target_status_draw.draw_list[i] else: t_draw = draw.NormalDraw() t_draw.text = " " * int(self.width / 2 - 1) t_draw.width = self.width / 2 - 1 character_status_draw_list.append((c_draw, t_draw)) else: character_status_draw = see_character_info_panel.SeeCharacterStatusPanel( character_data.cid, self.width, 6 ) character_status_draw_list = character_status_draw.draw_list for label in character_status_draw_list: if isinstance(label, tuple): index = 0 for value in label: if isinstance(value, list): for value_draw in value: value_draw.draw() else: value.line_feed = 0 value.draw() if not index: fix_draw = draw.NormalDraw() fix_draw.width = 1 fix_draw.text = "|" fix_draw.draw() index = 1 line_feed.draw() elif isinstance(label, list): for value in label: value.draw() line_feed.draw() else: label.draw() see_instruct_panel.draw() ask_list.extend(see_instruct_panel.return_list) target_id = character_data.target_character_id flow_handle.askfor_all(ask_list) py_cmd.clr_cmd()
def up_map(self): """ 将当前地图切换为上级地图 """ py_cmd.clr_cmd() up_map_path = map_handle.get_map_for_path(self.now_map) self.now_map = up_map_path
def see_character(self): """ 切换目标角色 """ cache.character_data[0].target_character_id = self.character_id py_cmd.clr_cmd()
def draw(self): """ 绘制对象 """ move_menu_panel_data = { 0: MapSceneNameDraw(self.now_map, self.width), 1: GlobalSceneNamePanel(self.now_map, self.width), 2: SocialSceneNamePanel(self.now_map, self.width), 3: CollectionSceneNamePanel(self.now_map, self.width), } move_menu_panel = MoveMenuPanel(self.width) while 1: line_feed.draw() if cache.now_panel_id != constant.Panel.SEE_MAP: break map_path_str = map_handle.get_map_system_path_str_for_list( self.now_map) map_data: game_type.Map = cache.map_data[map_path_str] map_name = attr_text.get_map_path_text(self.now_map) title_draw = draw.TitleLineDraw(_("移动:") + map_name, self.width) title_draw.draw() now_draw_list: game_type.MapDraw = map_data.map_draw character_data: game_type.Character = cache.character_data[0] character_scene_id = map_handle.get_map_scene_id_for_scene_path( self.now_map, character_data.position) return_list = [] index = 0 for now_draw_line in now_draw_list.draw_text: fix_width = int((self.width - now_draw_line.width) / 2) fix_text = " " * fix_width fix_draw = draw.NormalDraw() fix_draw.text = fix_text fix_draw.width = fix_width fix_draw.draw() for draw_text in now_draw_line.draw_list: if draw_text.is_button and draw_text.text != character_scene_id: scene_path = map_handle.get_scene_path_for_map_scene_id( self.now_map, draw_text.text) now_draw = draw.Button(draw_text.text, draw_text.text, cmd_func=self.move_now, args=(scene_path, )) now_draw.width = self.width now_draw.draw() return_list.append(now_draw.return_text) else: now_draw = draw.NormalDraw() now_draw.text = draw_text.text now_draw.width = self.width if draw_text.is_button and draw_text.text == character_scene_id: now_draw.style = "nowmap" now_draw.draw() line_feed.draw() path_edge = map_data.path_edge scene_path = path_edge[character_scene_id].copy() if character_scene_id in scene_path: del scene_path[character_scene_id] scene_path_list = list(scene_path.keys()) if len(scene_path_list): line = draw.LineDraw(".", self.width) line.draw() message_draw = draw.NormalDraw() message_draw.text = _("你可以从这里前往:\n") message_draw.width = self.width message_draw.draw() draw_list = [] for scene in scene_path_list: load_scene_data = map_handle.get_scene_data_for_map( map_path_str, scene) now_scene_path = map_handle.get_map_system_path_for_str( load_scene_data.scene_path) now_draw = draw.CenterButton( f"[{load_scene_data.scene_name}]", load_scene_data.scene_name, self.width / 4, cmd_func=self.move_now, args=(now_scene_path, ), ) return_list.append(now_draw.return_text) draw_list.append(now_draw) draw_group = value_handle.list_of_groups(draw_list, 4) for now_draw_list in draw_group: for now_draw in now_draw_list: now_draw.draw() line_feed.draw() scene_id_list = list(path_edge.keys()) now_index = len(scene_id_list) index = now_index move_menu_panel.update() move_menu_panel.draw() return_list.extend(move_menu_panel.return_list) if move_menu_panel.now_type in move_menu_panel_data: now_move_menu = move_menu_panel_data[move_menu_panel.now_type] now_move_menu.update(self.now_map, index) now_move_menu.draw() now_index = now_move_menu.end_index + 1 return_list.extend(now_move_menu.return_list) line = draw.LineDraw("=", self.width) line.draw() if self.now_map != []: now_id = text_handle.id_index(now_index) now_text = now_id + _("查看上级地图") up_button = draw.CenterButton(now_text, str(now_index), self.width / 3, cmd_func=self.up_map) up_button.draw() return_list.append(up_button.return_text) now_index += 1 else: now_draw = draw.NormalDraw() now_draw.text = " " * int(self.width / 3) now_draw.width = self.width / 3 now_draw.draw() back_id = text_handle.id_index(now_index) now_text = back_id + _("返回") back_button = draw.CenterButton(now_text, str(now_index), self.width / 3) back_button.draw() return_list.append(back_button.return_text) now_index += 1 character_map = map_handle.get_map_for_path( character_data.position) if character_map != self.now_map: now_id = text_handle.id_index(now_index) now_text = now_id + _("查看下级地图") down_button = draw.CenterButton(now_text, str(now_index), self.width / 3, cmd_func=self.down_map) down_button.draw() return_list.append(down_button.return_text) line_feed.draw() yrn = flow_handle.askfor_all(return_list) py_cmd.clr_cmd() if yrn == back_button.return_text: cache.now_panel_id = constant.Panel.IN_SCENE break