From 111cd8cbfaf9a7f5dc569475cb9b166df48f64cc Mon Sep 17 00:00:00 2001 From: Dave White Date: Wed, 5 May 2004 00:40:15 +0000 Subject: [PATCH] made resizing the window in the title screen work properly, ... ...and made basic keyboard shortcuts work in the title scren --- data/translations/english.cfg | 2 +- images/wesnoth-icon.png | Bin 7611 -> 8152 bytes src/display.cpp | 4 +- src/editor/editor.cpp | 9 +- src/game.cpp | 7 +- src/multiplayer_connect.cpp | 13 +-- src/server/game.cpp | 36 +++++-- src/server/game.hpp | 3 + src/show_dialog.cpp | 153 ---------------------------- src/show_dialog.hpp | 5 - src/titlescreen.cpp | 184 ++++++++++++++++++++++++++++++++++ src/titlescreen.hpp | 15 +++ src/video.hpp | 13 +++ 13 files changed, 262 insertions(+), 182 deletions(-) create mode 100644 src/titlescreen.cpp create mode 100644 src/titlescreen.hpp diff --git a/data/translations/english.cfg b/data/translations/english.cfg index fa09bc79344..5317e0a9a5c 100644 --- a/data/translations/english.cfg +++ b/data/translations/english.cfg @@ -213,7 +213,7 @@ This unit illuminates the surrounding area, making lawful units fight better, an Any units adjacent to this unit will fight as if it were dusk when it is night, and as if it were day when it is dusk." -skirmisher_description="Skirmishes: +skirmisher_description="Skirmisher: This unit is skilled in moving past enemies quickly, and ignores all Enemy Zones of Control." no_leader_to_recruit="You don't have a leader to recruit with." diff --git a/images/wesnoth-icon.png b/images/wesnoth-icon.png index eb6090a61ab8e75fdbbbe6a63c8c07cfdd33fd6f..9bd6cbc8062bfdf9c67f737306e32934aceb69dd 100644 GIT binary patch literal 8152 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 diff --git a/src/display.cpp b/src/display.cpp index 824e98ffbe6..bf75478da2c 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -278,7 +278,7 @@ int display::hex_width() const double display::zoom(int amount) { - if(amount == 0) { + if(amount == 0 || !team_valid()) { return double(zoom_)/double(DefaultZoom); } @@ -2079,7 +2079,7 @@ void display::add_chat_message(const std::string& speaker, int side, const std:: if(type == MESSAGE_PUBLIC) { str << "<" << speaker << ">"; } else { - str << "*" << speaker << "*"; + str << font::NULL_MARKUP << "*" << speaker << "*"; } SDL_Color speaker_colour = {255,255,255,255}; diff --git a/src/editor/editor.cpp b/src/editor/editor.cpp index ea6acba0be5..4deb9c3995e 100644 --- a/src/editor/editor.cpp +++ b/src/editor/editor.cpp @@ -66,7 +66,7 @@ namespace { double location_distance(const gamemap::location loc1, const gamemap::location loc2) { const double xdiff = loc1.x - loc2.x; const double ydiff = loc1.y - loc2.y; - const double dist = std::sqrt(xdiff * xdiff + ydiff * ydiff); + const double dist = sqrt(xdiff * xdiff + ydiff * ydiff); return dist; } @@ -631,8 +631,8 @@ void map_editor::perform_selection_move() { gui_.clear_highlighted_locs(); std::set new_selection; // Transfer the terrain to the new position. - for (std::set::const_iterator it = selected_hexes_.begin(); - it != selected_hexes_.end(); it++) { + std::set::const_iterator it; + for(it = selected_hexes_.begin(); it != selected_hexes_.end(); it++) { const gamemap::location hl_loc = get_hex_with_offset(*it, x_diff, y_diff); if (map_.on_board(hl_loc)) { @@ -644,8 +644,7 @@ void map_editor::perform_selection_move() { } // Fill the selection with the selected terrain. - for (std::set::const_iterator it = selected_hexes_.begin(); - it != selected_hexes_.end(); it++) { + for (it = selected_hexes_.begin(); it != selected_hexes_.end(); it++) { if (map_.on_board(*it) && new_selection.find(*it) == new_selection.end()) { undo_action.add(map_.get_terrain(*it), palette_.selected_terrain(), *it); map_.set_terrain(*it, palette_.selected_terrain()); diff --git a/src/game.cpp b/src/game.cpp index ae613a93461..427174c0ff6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -41,6 +41,7 @@ #include "sound.hpp" #include "statistics.hpp" #include "team.hpp" +#include "titlescreen.hpp" #include "util.hpp" #include "unit_types.hpp" #include "unit.hpp" @@ -598,7 +599,11 @@ int play_game(int argc, char** argv) recorder.clear(); std::cerr << "showing title screen...\n"; - gui::TITLE_RESULT res = gui::show_title(disp); + gui::TITLE_RESULT res = gui::CONTINUE; + + while(res == gui::CONTINUE) { + res = gui::show_title(disp); + } std::cerr << "title screen returned result\n"; diff --git a/src/multiplayer_connect.cpp b/src/multiplayer_connect.cpp index 7a13fa2ead2..6b2155b4f36 100644 --- a/src/multiplayer_connect.cpp +++ b/src/multiplayer_connect.cpp @@ -282,15 +282,12 @@ void mp_connect::lists_init() config::child_iterator sd; for(sd = sides.first; sd != sides.second; ++sd) { const int team_num = sd - sides.first; - const std::string& team_name = (**sd)["team_name"]; - std::stringstream str; - str << string_table["team"] << " "; + std::string& team_name = (**sd)["team_name"]; + if(team_name.empty()) { + team_name = lexical_cast(team_num+1); + } - if(team_name.empty() == false) - str << team_name; - else - str << (team_num+1); - player_teams_.push_back(str.str()); + player_teams_.push_back(string_table["team"] + " " + team_name); } //Colors diff --git a/src/server/game.cpp b/src/server/game.cpp index 1711fc9218f..7938c0781df 100644 --- a/src/server/game.cpp +++ b/src/server/game.cpp @@ -284,15 +284,37 @@ void game::send_data(const config& data, network::connection exclude) } } +bool game::player_on_team(const std::string& team, network::connection player) const +{ + //if the player is the game host, then iterate over all the sides and if any of + //the sides controlled by the game host are on this team, then the game host + //is on this team + if(players_.empty() == false && player == players_.front()) { + const config::child_list& sides = level_.get_children("side"); + for(config::child_list::const_iterator i = sides.begin(); i != sides.end(); ++i) { + if((**i)["controller"] == "human" && (**i)["team_name"] == team) { + return true; + } + } + } + + //other hosts than the game host + const std::map::const_iterator side = sides_.find(player); + if(side != sides_.end()) { + const config* const side_cfg = level_.find_child("side","side",side->second); + if(side_cfg != NULL && (*side_cfg)["team_name"] == team) { + return true; + } + } + + return false; +} + void game::send_data_team(const config& data, const std::string& team, network::connection exclude) { - for(std::vector::const_iterator - i = players_.begin(); i != players_.end(); ++i) { - if(*i != exclude && sides_.count(*i) == 1) { - const config* const side = level_.find_child("side","side",sides_[*i]); - if(side != NULL && (*side)["team_name"] == team) { - network::send_data(data,*i); - } + for(std::vector::const_iterator i = players_.begin(); i != players_.end(); ++i) { + if(*i != exclude && player_on_team(team,*i)) { + network::send_data(data,*i); } } } diff --git a/src/server/game.hpp b/src/server/game.hpp index 853be5cff5e..43e7d24415f 100644 --- a/src/server/game.hpp +++ b/src/server/game.hpp @@ -70,6 +70,9 @@ public: private: + //function which returns true iff 'player' is on 'team'. + bool player_on_team(const std::string& team, network::connection player) const; + //function which should be called every time a player ends their turn //(i.e. [end_turn] received). This will update the 'turn' attribute for //the game's description when appropriate. Will return true if there has diff --git a/src/show_dialog.cpp b/src/show_dialog.cpp index 26ba21fa023..d06b0bc9d2f 100644 --- a/src/show_dialog.cpp +++ b/src/show_dialog.cpp @@ -800,157 +800,4 @@ network::connection network_data_dialog(display& disp, const std::string& msg, c } } -void fade_logo(display& screen, int xpos, int ypos) -{ - const scoped_sdl_surface logo(image::get_image(game_config::game_logo,image::UNSCALED)); - if(logo == NULL) { - std::cerr << "Could not find game logo\n"; - return; - } - - SDL_Surface* const fb = screen.video().getSurface(); - - if(fb == NULL || xpos < 0 || ypos < 0 || xpos + logo->w > fb->w || ypos + logo->h > fb->h) { - return; - } - - //only once, when the game is first started, the logo fades in - static bool faded_in = false; - - CKey key; - bool last_button = key[SDLK_ESCAPE] || key[SDLK_SPACE]; - - std::cerr << "fading logo in....\n"; - - std::cerr << "logo size: " << logo->w << "," << logo->h << "\n"; - - for(int x = 0; x != logo->w; ++x) { - SDL_Rect srcrect = {x,0,1,logo->h}; - SDL_Rect dstrect = {xpos+x,ypos,1,logo->h}; - - SDL_BlitSurface(logo,&srcrect,fb,&dstrect); - - update_rect(dstrect); - - if(!faded_in && (x%5) == 0) { - - const bool new_button = key[SDLK_ESCAPE] || key[SDLK_SPACE] || key[SDLK_RETURN]; - if(new_button && !last_button) { - faded_in = true; - } - - last_button = new_button; - - screen.update_display(); - - SDL_Delay(10); - - events::pump(); - } - } - - std::cerr << "logo faded in\n"; - - faded_in = true; -} - -TITLE_RESULT show_title(display& screen) -{ - cursor::set(cursor::NORMAL); - - const events::resize_lock prevent_resizing; - - const scoped_sdl_surface title_surface_unscaled(image::get_image(game_config::game_title,image::UNSCALED)); - const scoped_sdl_surface title_surface(scale_surface(title_surface_unscaled,screen.x(),screen.y())); - - if(title_surface == NULL) { - std::cerr << "Could not find title image\n"; - } else { - screen.blit_surface(0,0,title_surface); - update_rect(screen.screen_area()); - - std::cerr << "displayed title image\n"; - } - - fade_logo(screen,(game_config::title_logo_x*screen.x())/1024,(game_config::title_logo_y*screen.y())/768); - - std::cerr << "faded logo\n"; - - const std::string& version_str = string_table["version"] + " " + - game_config::version; - - const SDL_Rect version_area = font::draw_text(NULL,screen.screen_area(),10, - font::NORMAL_COLOUR,version_str,0,0); - const size_t versiony = screen.y() - version_area.h; - - if(versiony < size_t(screen.y())) { - font::draw_text(&screen,screen.screen_area(), - 10,font::NORMAL_COLOUR,version_str,0,versiony); - } - - std::cerr << "drew version number\n"; - - //members of this array must correspond to the enumeration TITLE_RESULT - static const std::string button_labels[] = { "tutorial_button", "campaign_button", "multiplayer_button", - "load_button", "language_button", "preferences", "about_button", "quit_button" }; - - static const size_t nbuttons = sizeof(button_labels)/sizeof(*button_labels); - - const int menu_xbase = (game_config::title_buttons_x*screen.x())/1024; - const int menu_xincr = 0; - const int menu_ybase = (game_config::title_buttons_y*screen.y())/768; - const int menu_yincr = 40; - const int padding = game_config::title_buttons_padding; - - std::vector