void toggle_fullscreen() { toggle_fullscreen(! screen_mode.fullscreen); if (!in_game) { update_game_window(); } }
bool Run() { Layout(); bool result = false; if (m_dialog.run() == 0) { result = true; } if (get_game_state() == _game_in_progress) update_game_window(); return result; }
void alert_user(const char *message, short severity) { if (!MainScreenVisible()) { SDL_ShowSimpleMessageBox(severity == infoError ? SDL_MESSAGEBOX_WARNING : SDL_MESSAGEBOX_ERROR, severity == infoError ? "Warning" : "Error", message, NULL); } else { dialog d; vertical_placer *placer = new vertical_placer; placer->dual_add(new w_title(severity == infoError ? "WARNING" : "ERROR"), d); placer->add(new w_spacer, true); // Wrap lines uint16 style; font_info *font = get_theme_font(MESSAGE_WIDGET, style); char *t = strdup(message); char *p = t; while (strlen(t)) { unsigned i = 0, last = 0; int width = 0; while (i < strlen(t) && width < MAX_ALERT_WIDTH) { width = text_width(t, i, font, style); if (t[i] == ' ') last = i; i++; } if (i != strlen(t)) t[last] = 0; placer->dual_add(new w_static_text(t), d); if (i != strlen(t)) t += last + 1; else t += i; } free(p); placer->add(new w_spacer, true); w_button *button = new w_button(severity == infoError ? "OK" : "QUIT", dialog_ok, &d); placer->dual_add (button, d); d.set_widget_placer(placer); d.activate_widget(button); d.run(); if (severity == infoError && top_dialog == NULL) update_game_window(); } if (severity != infoError) exit(1); }
short get_level_number_from_user(void) { // Get levels vector<entry_point> levels; if (!get_entry_points(levels, AllPlayableLevels)) { entry_point dummy; dummy.level_number = 0; strcpy(dummy.level_name, "Untitled Level"); levels.push_back(dummy); } // Create dialog dialog d; vertical_placer *placer = new vertical_placer; if (vidmasterStringSetID != -1 && TS_IsPresent(vidmasterStringSetID) && TS_CountStrings(vidmasterStringSetID) > 0) { // if we there's a stringset present for it, load the message from there int num_lines = TS_CountStrings(vidmasterStringSetID); for (size_t i = 0; i < num_lines; i++) { bool message_font_title_color = true; const char *string = TS_GetCString(vidmasterStringSetID, i); if (!strncmp(string, "[QUOTE]", 7)) { string = string + 7; message_font_title_color = false; } if (!strlen(string)) placer->add(new w_spacer(), true); else if (message_font_title_color) placer->dual_add(new w_static_text(string), d); else placer->dual_add(new w_static_text(string), d); } } else { // no stringset or no strings in stringset - use default message placer->dual_add(new w_static_text("Before proceeding any further, you"), d); placer->dual_add(new w_static_text ("must take the oath of the vidmaster:"), d); placer->add(new w_spacer(), true); placer->dual_add(new w_static_text("\xd2I pledge to punch all switches,"), d); placer->dual_add(new w_static_text("to never shoot where I could use grenades,"), d); placer->dual_add(new w_static_text("to admit the existence of no level"), d); placer->dual_add(new w_static_text("except Total Carnage,"), d); placer->dual_add(new w_static_text("to never use Caps Lock as my \xd4run\xd5 key,"), d); placer->dual_add(new w_static_text("and to never, ever, leave a single Bob alive.\xd3"), d); } placer->add(new w_spacer(), true); placer->dual_add(new w_static_text("Start at level:"), d); w_levels *level_w = new w_levels(levels, &d); placer->dual_add(level_w, d); placer->add(new w_spacer(), true); placer->dual_add(new w_button("CANCEL", dialog_cancel, &d), d); d.activate_widget(level_w); d.set_widget_placer(placer); // Run dialog short level; if (d.run() == 0) // OK // Should do noncontiguous map files OK level = levels[level_w->get_selection()].level_number; else level = NONE; // Redraw main menu update_game_window(); return level; }
static void process_event(const SDL_Event &event) { switch (event.type) { case SDL_MOUSEMOTION: if (get_game_state() == _game_in_progress) { mouse_moved(event.motion.xrel, event.motion.yrel); } break; case SDL_MOUSEWHEEL: if (get_game_state() == _game_in_progress) { bool up = (event.wheel.y > 0); #if SDL_VERSION_ATLEAST(2,0,4) if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) up = !up; #endif mouse_scroll(up); } break; case SDL_MOUSEBUTTONDOWN: if (get_game_state() == _game_in_progress) { if (!get_keyboard_controller_status()) { hide_cursor(); validate_world_window(); set_keyboard_controller_status(true); } else { SDL_Event e2; memset(&e2, 0, sizeof(SDL_Event)); e2.type = SDL_KEYDOWN; e2.key.keysym.sym = SDLK_UNKNOWN; e2.key.keysym.scancode = (SDL_Scancode)(AO_SCANCODE_BASE_MOUSE_BUTTON + event.button.button - 1); process_game_key(e2); } } else process_screen_click(event); break; case SDL_JOYBUTTONDOWN: if (get_game_state() == _game_in_progress) { SDL_Event e2; memset(&e2, 0, sizeof(SDL_Event)); e2.type = SDL_KEYDOWN; e2.key.keysym.sym = SDLK_UNKNOWN; e2.key.keysym.scancode = (SDL_Scancode)(AO_SCANCODE_BASE_JOYSTICK_BUTTON + event.button.button); process_game_key(e2); } break; case SDL_KEYDOWN: process_game_key(event); break; case SDL_TEXTINPUT: if (Console::instance()->input_active()) { Console::instance()->textEvent(event); } break; case SDL_QUIT: set_game_state(_quit_game); break; case SDL_WINDOWEVENT: switch (event.window.event) { case SDL_WINDOWEVENT_FOCUS_LOST: if (get_game_state() == _game_in_progress && get_keyboard_controller_status() && !Movie::instance()->IsRecording()) { darken_world_window(); set_keyboard_controller_status(false); show_cursor(); } break; case SDL_WINDOWEVENT_EXPOSED: #if !defined(__APPLE__) && !defined(__MACH__) // double buffering :) #ifdef HAVE_OPENGL if (MainScreenIsOpenGL()) MainScreenSwap(); else #endif update_game_window(); #endif break; } break; } }