from ui_console import LoadGameStateCommand, SaveGameStateCommand from ui_dialog import Field, UIDialog from ui_list_operations import ( LO_NONE, ) class NewGameDirDialog(UIDialog): title = "New game" field0_label = "Name of new game folder:" field1_label = "Name of new game:" field_width = UIDialog.default_field_width fields = [ Field(label=field0_label, type=str, width=field_width, oneline=False), Field(label=field1_label, type=str, width=field_width, oneline=False), ] confirm_caption = "Create" game_mode_visible = True # TODO: only allow names that don't already exist def get_initial_field_text(self, field_number): # provide a reasonable non-blank name if field_number == 0: return "newgame" elif field_number == 1: return type(self.ui.app.gw).game_title def confirm_pressed(self): if self.ui.app.gw.create_new_game(self.field_texts[0], self.field_texts[1]): self.ui.app.enter_game_mode() self.dismiss() class LoadGameStateDialog(UIDialog): title = "Open game state" field_label = "Game state file to open:" field_width = UIDialog.default_field_width fields = [Field(label=field_label, type=str, width=field_width, oneline=False)] confirm_caption = "Open" game_mode_visible = True # TODO: only allow valid game state file in current game directory def confirm_pressed(self): LoadGameStateCommand.execute(self.ui.console, [self.field_texts[0]]) self.dismiss() class SaveGameStateDialog(UIDialog): title = "Save game state" field_label = "New filename for game state:" field_width = UIDialog.default_field_width fields = [Field(label=field_label, type=str, width=field_width, oneline=False)] confirm_caption = "Save" game_mode_visible = True def confirm_pressed(self): SaveGameStateCommand.execute(self.ui.console, [self.field_texts[0]]) self.dismiss() class AddRoomDialog(UIDialog): title = "Add new room" field0_label = "Name for new room:" field1_label = "Class of new room:" field_width = UIDialog.default_field_width fields = [ Field(label=field0_label, type=str, width=field_width, oneline=False), Field(label=field1_label, type=str, width=field_width, oneline=False), ] confirm_caption = "Add" game_mode_visible = True invalid_room_name_error = "Invalid room name." def get_initial_field_text(self, field_number): # provide a reasonable non-blank name if field_number == 0: return "Room " + str(len(self.ui.app.gw.rooms) + 1) elif field_number == 1: return "GameRoom" def is_input_valid(self): return self.field_texts[0] != "", self.invalid_room_name_error def confirm_pressed(self): valid, reason = self.is_input_valid() if not valid: return self.ui.app.gw.add_room(self.field_texts[0], self.field_texts[1]) self.dismiss() class SetRoomCamDialog(UIDialog): title = "Set room camera marker" tile_width = 48 field0_label = "Name of location marker object for this room:" field_width = UIDialog.default_field_width fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)] confirm_caption = "Set" game_mode_visible = True def dismiss(self): self.ui.edit_list_panel.set_list_operation(LO_NONE) UIDialog.dismiss(self) def confirm_pressed(self): self.ui.app.gw.current_room.set_camera_marker_name(self.field_texts[0]) self.dismiss() class SetRoomEdgeWarpsDialog(UIDialog): title = "Set room edge warps" tile_width = 48 fields = 4 field0_label = "Name of room/object to warp at LEFT edge:" field1_label = "Name of room/object to warp at RIGHT edge:" field2_label = "Name of room/object to warp at TOP edge:" field3_label = "Name of room/object to warp at BOTTOM edge:" field_width = UIDialog.default_field_width fields = [ Field(label=field0_label, type=str, width=field_width, oneline=False), Field(label=field1_label, type=str, width=field_width, oneline=False), Field(label=field2_label, type=str, width=field_width, oneline=False), Field(label=field3_label, type=str, width=field_width, oneline=False), ] confirm_caption = "Set" game_mode_visible = True def get_initial_field_text(self, field_number): room = self.ui.app.gw.current_room names = { 0: room.left_edge_warp_dest_name, 1: room.right_edge_warp_dest_name, 2: room.top_edge_warp_dest_name, 3: room.bottom_edge_warp_dest_name, } return names[field_number] def dismiss(self): self.ui.edit_list_panel.set_list_operation(LO_NONE) UIDialog.dismiss(self) def confirm_pressed(self): room = self.ui.app.gw.current_room room.left_edge_warp_dest_name = self.field_texts[0] room.right_edge_warp_dest_name = self.field_texts[1] room.top_edge_warp_dest_name = self.field_texts[2] room.bottom_edge_warp_dest_name = self.field_texts[3] room.reset_edge_warps() self.dismiss() class SetRoomBoundsObjDialog(UIDialog): title = "Set room edge object" field0_label = "Name of object to use for room bounds:" field_width = UIDialog.default_field_width fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)] confirm_caption = "Set" game_mode_visible = True def get_initial_field_text(self, field_number): if field_number == 0: return self.ui.app.gw.current_room.warp_edge_bounds_obj_name def dismiss(self): self.ui.edit_list_panel.set_list_operation(LO_NONE) UIDialog.dismiss(self) def confirm_pressed(self): room = self.ui.app.gw.current_room room.warp_edge_bounds_obj_name = self.field_texts[0] room.reset_edge_warps() self.dismiss() class RenameRoomDialog(UIDialog): title = "Rename room" field0_label = "New name for current room:" field_width = UIDialog.default_field_width fields = [Field(label=field0_label, type=str, width=field_width, oneline=False)] confirm_caption = "Rename" game_mode_visible = True invalid_room_name_error = "Invalid room name." def get_initial_field_text(self, field_number): if field_number == 0: return self.ui.app.gw.current_room.name def is_input_valid(self): return self.field_texts[0] != "", self.invalid_room_name_error def confirm_pressed(self): valid, reason = self.is_input_valid() if not valid: return world = self.ui.app.gw world.rename_room(world.current_room, self.field_texts[0]) self.dismiss()