Campaigns description support.

This commit is contained in:
Cédric Duval 2004-09-22 00:05:33 +00:00
parent 8972f83bac
commit 4dad657344
9 changed files with 119 additions and 4 deletions

View file

@ -8,6 +8,7 @@
difficulties=EASY,NORMAL,HARD
difficulty_descriptions= _ "&human-spearman.png,Spearman,(easiest);*&human-swordman.png,Swordsman;&human-royalguard.png,Royal Guard,(hardest)"
icon=human-general.png
image=portraits/Eastern_Invasion/dacyn.png
[/campaign]
#ifdef CAMPAIGN_EASTERN_INVASION

View file

@ -8,6 +8,8 @@
first_scenario=The_Elves_Besieged
difficulties=EASY,NORMAL,HARD
difficulty_descriptions= _ "&elvish-fighter.png,Fighter,(easiest);*&elvish-hero.png,Hero;&elvish-champion.png,Champion,(hardest)"
description= _ "Fight to gain back the throne of Wesnoth, of which you are the legitimate heir."
image=portraits/Heir_To_The_Throne/konrad.png
[/campaign]
#ifdef CAMPAIGN_HEIR_TO_THE_THRONE

View file

@ -8,6 +8,7 @@
difficulties=EASY,NORMAL,HARD
difficulty_descriptions= _ "&orcish-grunt.png,Grunt,(easiest);*&orcish-warrior.png,Warrior;&orcish-warlord.png,Warlord,(hardest)"
icon=orcish-ruler.png
image=items/orcish-flag.png
[/campaign]
#ifdef CAMPAIGN_SON_OF_THE_BLACK_EYE

View file

@ -79,6 +79,8 @@
terrain_mask_image=terrain/alphamask.png
observer_image=misc/eye.png
download_campaign_image=""
[/game_config]

View file

@ -738,4 +738,83 @@ void show_unit_description(display& disp, const gamemap& map, const unit& u)
help::show_help(disp,"unit_" + u.type().id());
}
namespace {
static const SDL_Rect campaign_preview_size = {-350,-400,350,400};
static const int campaign_preview_border = 10;
}
campaign_preview_pane::campaign_preview_pane(display& disp,std::vector<std::pair<std::string,std::string> >* desc) : gui::preview_pane(disp),descriptions_(desc),index_(0)
{
set_location(campaign_preview_size);
}
bool campaign_preview_pane::show_above() const { return false; }
bool campaign_preview_pane::left_side() const { return false; }
void campaign_preview_pane::set_selection(int index)
{
index = minimum<int>(descriptions_->size()-1,index);
if(index != index_ && index >= 0) {
index_ = index;
set_dirty();
}
}
void campaign_preview_pane::draw()
{
if(!dirty()) {
return;
}
bg_restore();
if(index_ < 0 || index_ >= descriptions_->size()) {
return;
}
set_dirty(false);
const SDL_Rect area = {
location().x+campaign_preview_border,
location().y+campaign_preview_border*5,
location().w-campaign_preview_border*2,
location().h-campaign_preview_border*6 };
/* background frame */
static const std::string default_style("mainmenu");
const std::string* style = &default_style;
gui::draw_dialog_frame(area.x,area.y,area.w,area.h,disp(),style);
/* description text */
const std::string& desc_text = font::word_wrap_text((*descriptions_)[index_].first,12,area.w-2*campaign_preview_border);
const std::vector<std::string> lines = config::split(desc_text,'\n');
SDL_Rect txt_area = { area.x+campaign_preview_border,area.y,0,0 };
for(std::vector<std::string>::const_iterator line = lines.begin(); line != lines.end(); ++line) {
txt_area = font::draw_text(&disp(),location(),12,font::NORMAL_COLOUR,*line,txt_area.x,txt_area.y);
txt_area.y += txt_area.h;
}
/* description image */
surface img(NULL);
const std::string desc_img_name = (*descriptions_)[index_].second;
if(!desc_img_name.empty()) {
img.assign(image::get_image(desc_img_name,image::UNSCALED));
}
if (!img.null()) {
SDL_Rect src_rect,dst_rect;
int max_height = area.h-(txt_area.h+txt_area.y-area.y);
src_rect.x = src_rect.y = 0;
src_rect.w = minimum((int)area.w,img->w);
src_rect.h = minimum(max_height,img->h);
dst_rect.x = area.x+(area.w-src_rect.w)/2;
dst_rect.y = txt_area.y+(max_height-src_rect.h)/2;
SDL_BlitSurface(img,&src_rect,disp().video().getSurface(),&dst_rect);
}
}
} //end namespace dialogs

View file

@ -88,6 +88,23 @@ private:
void show_unit_description(display& disp, const gamemap& map, const unit& u);
}
class campaign_preview_pane : public gui::preview_pane
{
public:
campaign_preview_pane(display& disp,std::vector<std::pair<std::string,std::string> >* descriptions);
bool show_above() const;
bool left_side() const;
void set_selection(int index);
private:
void draw();
const std::vector<std::pair<std::string,std::string> >* descriptions_;
int index_;
};
} //end namespace dialogs
#endif

View file

@ -892,10 +892,13 @@ bool game_controller::new_campaign()
std::sort(campaigns.begin(),campaigns.end(),less_campaigns_rank);
std::vector<std::string> campaign_names;
std::vector<std::pair<std::string,std::string> > campaign_desc;
for(config::child_list::const_iterator i = campaigns.begin(); i != campaigns.end(); ++i) {
std::stringstream str;
const std::string& icon = (**i)["icon"];
const std::string desc = (**i)["description"];
const std::string image = (**i)["image"];
if(icon == "") {
str << " ,";
} else {
@ -905,16 +908,22 @@ bool game_controller::new_campaign()
str << (**i)["name"];
campaign_names.push_back(str.str());
campaign_desc.push_back(std::pair<std::string,std::string>(desc,image));
}
campaign_names.push_back(_(" ,Get More Campaigns..."));
campaign_desc.push_back(std::pair<std::string,std::string>(_("Download more campaigns from a server on Internet."),game_config::download_campaign_image));
int res = 0;
dialogs::campaign_preview_pane campaign_preview(disp(),&campaign_desc);
std::vector<gui::preview_pane*> preview_panes;
preview_panes.push_back(&campaign_preview);
if(campaign_names.size() > 1) {
res = gui::show_dialog(disp(),NULL,_("Campaign"),
_("Choose the campaign you want to play:"),
gui::OK_CANCEL,&campaign_names);
_("Choose the campaign you want to play:"),
gui::OK_CANCEL,&campaign_names,&preview_panes);
if(res == -1) {
return false;

View file

@ -59,6 +59,8 @@ namespace game_config
std::string unchecked_menu_image = "buttons/checkbox.png";
std::string checked_menu_image = "buttons/checkbox-pressed.png";
std::string download_campaign_image;
namespace sounds {
const std::string turn_bell = "bell.wav",
receive_message = "receive.wav",
@ -131,5 +133,7 @@ namespace game_config
terrain_mask_image = v["terrain_mask_image"];
observer_image = v["observer_image"];
download_campaign_image = v["download_campaign_image"];
}
}

View file

@ -41,7 +41,7 @@ namespace game_config
enemy_energy_image,ally_energy_image,flag_image,
dot_image,cross_image,
foot_left_nw,foot_left_n,foot_right_nw,foot_right_n,
missile_n_image,missile_ne_image,terrain_mask_image,observer_image,
missile_n_image,missile_ne_image,terrain_mask_image,observer_image,download_campaign_image,
checked_menu_image,unchecked_menu_image;
extern int title_logo_x, title_logo_y, title_buttons_x, title_buttons_y, title_buttons_padding, title_tip_x, title_tip_y, title_tip_width, title_tip_padding;