GameStateLoad::GameStateLoad(SDL_Surface *_screen, InputState *_inp, FontEngine *_font) : GameState(_screen, _inp, _font) { items = new ItemDatabase(screen, font); portrait = NULL; button_exit = new WidgetButton(screen, font, inp, "./images/menus/buttons/button_default.png"); button_exit->label = "Exit to Title"; button_exit->pos.x = VIEW_W_HALF - button_exit->pos.w/2; button_exit->pos.y = VIEW_H - button_exit->pos.h; button_action = new WidgetButton(screen, font, inp, "./images/menus/buttons/button_default.png"); button_action->label = "Choose a Slot"; button_action->enabled = false; button_action->pos.x = (VIEW_W - 640)/2 + 480 - button_action->pos.w/2; button_action->pos.y = (VIEW_H - 480)/2 + 384; load_game = false; for (int i=0; i<GAME_SLOT_MAX; i++) { sprites[i] = NULL; current_map[i] = ""; } loadGraphics(); readGameSlots(); for (int i=0; i<GAME_SLOT_MAX; i++) { slot_pos[i].x = (VIEW_W - 640)/2; slot_pos[i].y = (VIEW_H - 480)/2 + (i * 96) + 32; slot_pos[i].w = 288; slot_pos[i].h = 96; } selected_slot = -1; // label positions within each slot name_pos.x = 16; name_pos.y = 16; level_pos.x = 24; level_pos.y = 40; map_pos.x = 24; map_pos.y = 56; sprites_pos.x = 178; sprites_pos.y = -24; // temp current_frame = 0; frame_ticker = 0; }
GameStateLoad::GameStateLoad() : GameState() , background(NULL) , selection(NULL) , portrait_border(NULL) , portrait(NULL) , loading_requested(false) , loading(false) , loaded(false) , delete_items(true) , selected_slot(-1) , visible_slots(0) , scroll_offset(0) , has_scroll_bar(false) , game_slot_max(4) , text_trim_boundary(0) { if (items == NULL) items = new ItemManager(); label_loading = new WidgetLabel(); // Confirmation box to confirm deleting confirm = new MenuConfirm(msg->get("Delete Save"), msg->get("Delete this save?")); button_exit = new WidgetButton(); button_exit->label = msg->get("Exit to Title"); button_new = new WidgetButton(); button_new->label = msg->get("New Game"); button_new->enabled = true; button_load = new WidgetButton(); button_load->label = msg->get("Choose a Slot"); button_load->enabled = false; button_delete = new WidgetButton(); button_delete->label = msg->get("Delete Save"); button_delete->enabled = false; scrollbar = new WidgetScrollBar(); // Set up tab list tablist = TabList(HORIZONTAL); tablist.add(button_exit); tablist.add(button_new); // Read positions from config file FileParser infile; // @CLASS GameStateLoad|Description of menus/gameload.txt if (infile.open("menus/gameload.txt")) { while (infile.next()) { // @ATTR button_new|int, int, alignment : X, Y, Alignment|Position of the "New Game" button. if (infile.key == "button_new") { int x = popFirstInt(infile.val); int y = popFirstInt(infile.val); ALIGNMENT a = parse_alignment(popFirstString(infile.val)); button_new->setBasePos(x, y, a); } // @ATTR button_load|int, int, alignment : X, Y, Alignment|Position of the "Load Game" button. else if (infile.key == "button_load") { int x = popFirstInt(infile.val); int y = popFirstInt(infile.val); ALIGNMENT a = parse_alignment(popFirstString(infile.val)); button_load->setBasePos(x, y, a); } // @ATTR button_delete|int, int, alignment : X, Y, Alignment|Position of the "Delete Save" button. else if (infile.key == "button_delete") { int x = popFirstInt(infile.val); int y = popFirstInt(infile.val); ALIGNMENT a = parse_alignment(popFirstString(infile.val)); button_delete->setBasePos(x, y, a); } // @ATTR button_exit|int, int, alignment : X, Y, Alignment|Position of the "Exit to Title" button. else if (infile.key == "button_exit") { int x = popFirstInt(infile.val); int y = popFirstInt(infile.val); ALIGNMENT a = parse_alignment(popFirstString(infile.val)); button_exit->setBasePos(x, y, a); } // @ATTR portrait|rectangle|Position and dimensions of the portrait image. else if (infile.key == "portrait") { portrait_dest = toRect(infile.val); } // @ATTR gameslot|rectangle|Position and dimensions of the first game slot. else if (infile.key == "gameslot") { gameslot_pos = toRect(infile.val); } // @ATTR name|label|The label for the hero's name. Position is relative to game slot position. else if (infile.key == "name") { name_pos = eatLabelInfo(infile.val); } // @ATTR level|label|The label for the hero's level. Position is relative to game slot position. else if (infile.key == "level") { level_pos = eatLabelInfo(infile.val); } // @ATTR class|label|The label for the hero's class. Position is relative to game slot position. else if (infile.key == "class") { class_pos = eatLabelInfo(infile.val); } // @ATTR map|label|The label for the hero's current location. Position is relative to game slot position. else if (infile.key == "map") { map_pos = eatLabelInfo(infile.val); } // @ATTR slot_number|label|The label for the save slot index. Position is relative to game slot position. else if (infile.key == "slot_number") { slot_number_pos = eatLabelInfo(infile.val); } // @ATTR loading_label|label|The label for the "Entering game world..."/"Loading saved game..." text. else if (infile.key == "loading_label") { loading_pos = eatLabelInfo(infile.val); } // @ATTR sprite|point|Position for the avatar preview image in each slot else if (infile.key == "sprite") { sprites_pos = toPoint(infile.val); } // @ATTR visible_slots|int|The maximum numbers of visible save slots. else if (infile.key == "visible_slots") { game_slot_max = toInt(infile.val); // can't have less than 1 game slot visible game_slot_max = std::max(game_slot_max, 1); } // @ATTR text_trim_boundary|int|The position of the right-side boundary where text will be shortened with an ellipsis. Position is relative to game slot position. else if (infile.key == "text_trim_boundary") { text_trim_boundary = toInt(infile.val); } else { infile.error("GameStateLoad: '%s' is not a valid key.", infile.key.c_str()); } } infile.close(); } // prevent text from overflowing on the right edge of game slots if (text_trim_boundary == 0 || text_trim_boundary > gameslot_pos.w) text_trim_boundary = gameslot_pos.w; button_new->refresh(); button_load->refresh(); button_delete->refresh(); loadGraphics(); readGameSlots(); color_normal = font->getColor("menu_normal"); refreshWidgets(); updateButtons(); // if we specified a slot to load at launch, load it now if (!LOAD_SLOT.empty()) { size_t load_slot_id = toInt(LOAD_SLOT) - 1; LOAD_SLOT.clear(); if (load_slot_id < game_slots.size()) { setSelectedSlot(static_cast<int>(load_slot_id)); loading_requested = true; } } render_device->setBackgroundColor(Color(0,0,0,0)); }
GameStateLoad::GameStateLoad(SDL_Surface *_screen, InputState *_inp, FontEngine *_font, MessageEngine *_msg) : GameState(_screen, _inp, _font, _msg) { items = new ItemDatabase(screen, font, msg); portrait = NULL; loading_requested = false; loading = false; loaded = false; // Confirmation box to confirm deleting confirm = new MenuConfirm(screen, inp, font, msg->get("delete_save_button"), msg->get("delete_save_dialog")); button_exit = new WidgetButton(screen, font, inp, "images/menus/buttons/button_default.png"); button_exit->label = msg->get("exit_to_title_button"); button_exit->pos.x = VIEW_W_HALF - button_exit->pos.w/2; button_exit->pos.y = VIEW_H - button_exit->pos.h; button_action = new WidgetButton(screen, font, inp, "images/menus/buttons/button_default.png"); button_action->label = msg->get("choose_slot_button"); button_action->enabled = false; button_action->pos.x = (VIEW_W - 640)/2 + 480 - button_action->pos.w/2; button_action->pos.y = (VIEW_H - 480)/2 + 384; button_alternate = new WidgetButton(screen, font, inp, "images/menus/buttons/button_default.png"); button_alternate->label = msg->get("delete_save_button"); button_alternate->enabled = false; button_alternate->pos.x = (VIEW_W - 640)/2 + 480 - button_alternate->pos.w/2; button_alternate->pos.y = (VIEW_H - 480)/2 + 415; load_game = false; for (int i=0; i<GAME_SLOT_MAX; i++) { sprites[i] = NULL; current_map[i] = ""; } loadGraphics(); readGameSlots(); for (int i=0; i<GAME_SLOT_MAX; i++) { slot_pos[i].x = (VIEW_W - 640)/2; slot_pos[i].y = (VIEW_H - 480)/2 + (i * 96) + 32; slot_pos[i].w = 288; slot_pos[i].h = 96; } selected_slot = -1; // label positions within each slot name_pos.x = 16; name_pos.y = 16; level_pos.x = 24; level_pos.y = 40; map_pos.x = 24; map_pos.y = 56; sprites_pos.x = 178; sprites_pos.y = -24; // temp current_frame = 0; frame_ticker = 0; }