/tmp/cvs55Zujl
This commit is contained in:
parent
6fab335aa4
commit
aed47f10d9
8 changed files with 234 additions and 161 deletions
|
@ -629,7 +629,9 @@ race="Race"
|
|||
team="Team"
|
||||
color="Color"
|
||||
error_no_mp_sides="No multiplayer sides."
|
||||
shared_vision="Shared Vision"
|
||||
share_view="Share View"
|
||||
share_maps="Share Maps"
|
||||
share_none="Share None"
|
||||
|
||||
#Races
|
||||
elves="Elves"
|
||||
|
|
|
@ -57,7 +57,7 @@ multiplayer_game_setup_dialog::multiplayer_game_setup_dialog(
|
|||
const config& cfg, game_state& state, bool server)
|
||||
: disp_(disp), units_data_(units_data), cfg_(cfg), state_(state), server_(server), level_(NULL), map_selection_(-1),
|
||||
maps_menu_(NULL), turns_slider_(NULL), village_gold_slider_(NULL), xp_modifier_slider_(NULL),
|
||||
fog_game_(NULL), shroud_game_(NULL), observers_game_(NULL), shared_vision_(NULL),
|
||||
fog_game_(NULL), shroud_game_(NULL), observers_game_(NULL), vision_combo_(NULL),
|
||||
cancel_game_(NULL), launch_game_(NULL), regenerate_map_(NULL), generator_settings_(NULL),
|
||||
era_combo_(NULL), name_entry_(NULL), generator_(NULL)
|
||||
{
|
||||
|
@ -112,9 +112,6 @@ multiplayer_game_setup_dialog::multiplayer_game_setup_dialog(
|
|||
shroud_game_.assign(new gui::button(disp_,string_table["shroud"],gui::button::TYPE_CHECK));
|
||||
shroud_game_->set_check(false);
|
||||
|
||||
shared_vision_.assign(new gui::button(disp_,string_table["shared_vision"],gui::button::TYPE_CHECK));
|
||||
shared_vision_->set_check(true);
|
||||
|
||||
observers_game_.assign(new gui::button(disp_,string_table["observers"],gui::button::TYPE_CHECK));
|
||||
observers_game_->set_check(true);
|
||||
|
||||
|
@ -125,6 +122,13 @@ multiplayer_game_setup_dialog::multiplayer_game_setup_dialog(
|
|||
|
||||
generator_settings_.assign(new gui::button(disp_,string_table["generator_settings"]));
|
||||
|
||||
//The possible vision settings
|
||||
std::vector<std::string> vision_types;
|
||||
vision_types.push_back(string_table["share_view"]);
|
||||
vision_types.push_back(string_table["share_maps"]);
|
||||
vision_types.push_back(string_table["share_none"]);
|
||||
vision_combo_.assign(new gui::combo(disp_,vision_types));
|
||||
|
||||
//the possible eras to play
|
||||
const config::child_list& era_list = cfg.get_children("era");
|
||||
std::vector<std::string> eras;
|
||||
|
@ -249,10 +253,10 @@ void multiplayer_game_setup_dialog::set_area(const SDL_Rect& area)
|
|||
|
||||
rect.y += observers_game_->location().h + border_size;
|
||||
|
||||
//Observers
|
||||
shared_vision_->set_location(rect.x,rect.y);
|
||||
//Ally shared view settings
|
||||
vision_combo_->set_location(rect.x,rect.y);
|
||||
|
||||
rect.y += shared_vision_->location().h + border_size;
|
||||
rect.y += vision_combo_->height() + border_size;
|
||||
|
||||
std::cerr << "h\n";
|
||||
|
||||
|
@ -304,7 +308,7 @@ lobby::RESULT multiplayer_game_setup_dialog::process()
|
|||
village_gold_slider_->process();
|
||||
xp_modifier_slider_->process();
|
||||
era_combo_->process(mousex,mousey,left_button);
|
||||
|
||||
vision_combo_->process(mousex,mousey,left_button);
|
||||
maps_menu_->process(mousex,mousey,left_button,
|
||||
key[SDLK_UP],key[SDLK_DOWN],
|
||||
key[SDLK_PAGEUP],key[SDLK_PAGEDOWN]);
|
||||
|
@ -326,8 +330,6 @@ lobby::RESULT multiplayer_game_setup_dialog::process()
|
|||
shroud_game_->draw();
|
||||
observers_game_->pressed();
|
||||
observers_game_->draw();
|
||||
shared_vision_->pressed();
|
||||
shared_vision_->draw();
|
||||
|
||||
events::raise_process_event();
|
||||
events::raise_draw_event();
|
||||
|
@ -486,11 +488,12 @@ void multiplayer_game_setup_dialog::start_game()
|
|||
|
||||
const config::child_list& era_list = cfg_.get_children("era");
|
||||
|
||||
const int share = vision_combo_->selected();
|
||||
const int res = connector.load_map((*era_list[era_combo_->selected()])["id"],
|
||||
maps_menu_->selection(), turns, village_gold_slider_->value(),
|
||||
xp_modifier_slider_->value(), fog_game_->checked(),
|
||||
shroud_game_->checked(), observers_game_->checked(),
|
||||
shared_vision_->checked());
|
||||
share == 0, share == 1);
|
||||
if(res == -1) {
|
||||
return;
|
||||
}
|
||||
|
@ -507,7 +510,7 @@ void multiplayer_game_setup_dialog::start_game()
|
|||
fog_game_.assign(NULL);
|
||||
shroud_game_.assign(NULL);
|
||||
observers_game_.assign(NULL);
|
||||
shared_vision_.assign(NULL);
|
||||
vision_combo_.assign(NULL);
|
||||
cancel_game_.assign(NULL);
|
||||
launch_game_.assign(NULL);
|
||||
regenerate_map_.assign(NULL);
|
||||
|
|
|
@ -61,10 +61,10 @@ private:
|
|||
util::scoped_ptr<gui::menu> maps_menu_;
|
||||
util::scoped_ptr<gui::slider> turns_slider_, village_gold_slider_, xp_modifier_slider_;
|
||||
util::scoped_ptr<gui::button> fog_game_, shroud_game_, observers_game_,
|
||||
cancel_game_, launch_game_, shared_vision_,
|
||||
cancel_game_, launch_game_,
|
||||
regenerate_map_, generator_settings_;
|
||||
|
||||
util::scoped_ptr<gui::combo> era_combo_;
|
||||
util::scoped_ptr<gui::combo> era_combo_, vision_combo_;
|
||||
util::scoped_ptr<gui::textbox> name_entry_;
|
||||
|
||||
util::scoped_ptr<map_generator> generator_;
|
||||
|
|
|
@ -68,7 +68,7 @@ mp_connect::~mp_connect()
|
|||
}
|
||||
|
||||
int mp_connect::load_map(const std::string& era, int map, int num_turns, int village_gold, int xpmodifier,
|
||||
bool fog_game, bool shroud_game, bool allow_observers, bool share_vision)
|
||||
bool fog_game, bool shroud_game, bool allow_observers, bool share_view, bool share_maps)
|
||||
{
|
||||
log_scope("load_map");
|
||||
// Setup the game
|
||||
|
@ -218,10 +218,10 @@ int mp_connect::load_map(const std::string& era, int map, int num_turns, int vil
|
|||
side["shroud"] = shroud_game ? "yes" : "no";
|
||||
|
||||
if(side["share_maps"].empty())
|
||||
side["share_maps"] = "yes";
|
||||
side["share_maps"] = share_maps ? "yes" : "no";
|
||||
|
||||
if(side["share_vision"].empty())
|
||||
side["share_vision"] = share_vision ? "yes" : "no";
|
||||
if(side["share_view"].empty())
|
||||
side["share_view"] = share_view ? "yes" : "no";
|
||||
|
||||
if(side["name"].empty())
|
||||
side["name"] = (*possible_sides.front())["name"];
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
~mp_connect();
|
||||
|
||||
int load_map(const std::string& era, int map, int num_turns, int village_gold, int xpmodifier,
|
||||
bool fog_game, bool shroud_game, bool allow_observers, bool shared_vision);
|
||||
bool fog_game, bool shroud_game, bool allow_observers, bool share_view, bool share_maps);
|
||||
|
||||
void start_game();
|
||||
|
||||
|
|
|
@ -566,6 +566,12 @@ redo_turn:
|
|||
uit->second.end_turn();
|
||||
}
|
||||
|
||||
//This implements "delayed map sharing." It's meant as an alternative to shared vision.
|
||||
if(team_it->copy_ally_shroud()) {
|
||||
gui.recalculate_minimap();
|
||||
gui.invalidate_all();
|
||||
}
|
||||
|
||||
game_events::pump();
|
||||
|
||||
check_victory(units,teams);
|
||||
|
|
298
src/team.cpp
298
src/team.cpp
|
@ -12,6 +12,7 @@
|
|||
*/
|
||||
|
||||
#include "game_config.hpp"
|
||||
#include "network.hpp"
|
||||
#include "replay.hpp"
|
||||
#include "team.hpp"
|
||||
#include "util.hpp"
|
||||
|
@ -138,13 +139,12 @@ team::team_info::team_info(const config& cfg)
|
|||
targets.push_back(target(**tgts.first));
|
||||
}
|
||||
|
||||
use_shroud = (cfg["shroud"] == "yes");
|
||||
use_fog = (cfg["fog"] == "yes");
|
||||
share_maps = (cfg["share_maps"] == "yes");
|
||||
share_vision = (cfg["share_vision"] == "yes");
|
||||
//share_view and share_maps can't both be enabled, so share_view overrides share_maps.
|
||||
share_view = (cfg["share_view"] == "yes");
|
||||
share_maps = !share_view && (cfg["share_maps"] != "no");
|
||||
|
||||
std::cerr << "use_shroud=" << use_shroud << ",use_fog=" << use_fog;
|
||||
std::cerr << ",share_maps=" << share_maps << ",share_vision=" << share_vision << '\n';
|
||||
std::cerr << "team_info::team_info(...): team_name: " << team_name;
|
||||
std::cerr << ", share_maps: " << share_maps << ", share_view: " << share_view << ".\n";
|
||||
|
||||
music = cfg["music"];
|
||||
}
|
||||
|
@ -213,10 +213,8 @@ void team::team_info::write(config& cfg) const
|
|||
|
||||
cfg["recruitment_pattern"] = recruit_pattern_str.str();
|
||||
|
||||
cfg["shroud"] = use_shroud ? "yes" : "no";
|
||||
cfg["fog"] = use_fog ? "yes" : "no";
|
||||
cfg["share_maps"] = share_maps ? "yes" : "no";
|
||||
cfg["share_vision"] = share_vision ? "yes" : "no";
|
||||
cfg["share_view"] = share_view ? "yes" : "no";
|
||||
|
||||
if(music.empty() == false)
|
||||
cfg["music"] = music;
|
||||
|
@ -224,6 +222,13 @@ void team::team_info::write(config& cfg) const
|
|||
|
||||
team::team(const config& cfg, int gold) : gold_(gold), auto_shroud_updates_(true), info_(cfg)
|
||||
{
|
||||
fog_.set_enabled(cfg["fog"] == "yes");
|
||||
shroud_.set_enabled(cfg["shroud"] == "yes");
|
||||
shroud_.read(cfg["shroud_data"]);
|
||||
|
||||
std::cerr << "team::team(...): team_name: " << info_.team_name;
|
||||
std::cerr << ", shroud: " << uses_shroud() << ", fog: " << uses_fog() << ".\n";
|
||||
|
||||
//gold is the maximum of 'gold' and what is given in the config file
|
||||
if(info_.gold.empty() == false)
|
||||
gold_ = maximum(gold,::atoi(info_.gold.c_str()));
|
||||
|
@ -233,24 +238,13 @@ team::team(const config& cfg, int gold) : gold_(gold), auto_shroud_updates_(true
|
|||
for(config::child_list::const_iterator v = villages.begin(); v != villages.end(); ++v) {
|
||||
villages_.insert(gamemap::location(**v));
|
||||
}
|
||||
|
||||
const std::string& shroud_data = cfg["shroud_data"];
|
||||
for(std::string::const_iterator sh = shroud_data.begin(); sh != shroud_data.end(); ++sh) {
|
||||
if(*sh == '|')
|
||||
shroud_.resize(shroud_.size()+1);
|
||||
|
||||
if(shroud_.empty() == false) {
|
||||
if(*sh == '1')
|
||||
shroud_.back().push_back(true);
|
||||
else if(*sh == '0')
|
||||
shroud_.back().push_back(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void team::write(config& cfg) const
|
||||
{
|
||||
info_.write(cfg);
|
||||
cfg["shroud"] = uses_shroud() ? "yes" : "no";
|
||||
cfg["fog"] = uses_fog() ? "yes" : "no";
|
||||
|
||||
char buf[50];
|
||||
sprintf(buf,"%d",gold_);
|
||||
|
@ -261,18 +255,7 @@ void team::write(config& cfg) const
|
|||
t->write(cfg.add_child("village"));
|
||||
}
|
||||
|
||||
std::stringstream shroud_str;
|
||||
for(std::vector<std::vector<bool> >::const_iterator sh = shroud_.begin(); sh != shroud_.end(); ++sh) {
|
||||
shroud_str << '|';
|
||||
|
||||
for(std::vector<bool>::const_iterator i = sh->begin(); i != sh->end(); ++i) {
|
||||
shroud_str << (*i ? '1' : '0');
|
||||
}
|
||||
|
||||
shroud_str << '\n';
|
||||
}
|
||||
|
||||
cfg["shroud_data"] = shroud_str.str();
|
||||
cfg["shroud_data"] = shroud_.write();
|
||||
}
|
||||
|
||||
void team::get_village(const gamemap::location& loc)
|
||||
|
@ -454,122 +437,73 @@ std::vector<team::target>& team::targets()
|
|||
|
||||
bool team::shrouded(size_t x, size_t y) const
|
||||
{
|
||||
bool res = side_shrouded(x,y);
|
||||
|
||||
if(!res || teams == NULL || info_.team_name == "" || !info_.share_maps)
|
||||
return res;
|
||||
if(!teams || !share_view())
|
||||
return shroud_.value(x,y);
|
||||
|
||||
for(std::vector<team>::const_iterator t = teams->begin(); t != teams->end(); ++t) {
|
||||
if(t->info_.team_name != info_.team_name)
|
||||
continue;
|
||||
if(t->uses_shroud() && !t->side_shrouded(x,y))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return shroud_.shared_value(ally_shroud(*teams),x,y);
|
||||
}
|
||||
|
||||
bool team::fogged(size_t x, size_t y) const
|
||||
{
|
||||
bool res = side_fogged(x,y);
|
||||
if(shrouded(x,y)) return true;
|
||||
|
||||
if(!res || !teams || info_.team_name.empty() || !info_.share_maps || !info_.share_vision) {
|
||||
return res;
|
||||
}
|
||||
if(!teams || !share_view())
|
||||
return fog_.value(x,y);
|
||||
|
||||
for(std::vector<team>::const_iterator t = teams->begin(); t != teams->end(); ++t) {
|
||||
if(t->info_.team_name != info_.team_name)
|
||||
continue;
|
||||
if(t->uses_fog() && !t->side_fogged(x,y))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
return fog_.shared_value(ally_fog(*teams),x,y);
|
||||
}
|
||||
|
||||
bool team::side_shrouded(size_t x, size_t y) const
|
||||
std::vector<const team::shroud_map*> team::ally_shroud(const std::vector<team>& teams) const
|
||||
{
|
||||
if(info_.use_shroud == false)
|
||||
return false;
|
||||
|
||||
if(x >= shroud_.size())
|
||||
return true;
|
||||
|
||||
if(y >= shroud_[x].size())
|
||||
return true;
|
||||
|
||||
return !shroud_[x][y];
|
||||
}
|
||||
|
||||
bool team::clear_shroud(size_t x, size_t y)
|
||||
{
|
||||
if(info_.use_shroud == false)
|
||||
return false;
|
||||
|
||||
if(x >= shroud_.size())
|
||||
shroud_.resize(x+1);
|
||||
|
||||
if(y >= shroud_[x].size())
|
||||
shroud_[x].resize(y+1);
|
||||
|
||||
if(shroud_[x][y] == false) {
|
||||
shroud_[x][y] = true;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
std::vector<const team::shroud_map*> maps;
|
||||
for(size_t i = 0; i < teams.size(); ++i) {
|
||||
if(!is_enemy(i+1))
|
||||
maps.push_back(&(teams[i].shroud_));
|
||||
}
|
||||
return maps;
|
||||
}
|
||||
|
||||
bool team::side_fogged(size_t x, size_t y) const
|
||||
std::vector<const team::shroud_map*> team::ally_fog(const std::vector<team>& teams) const
|
||||
{
|
||||
if(info_.use_fog == false)
|
||||
return side_shrouded(x,y);
|
||||
|
||||
if(x >= fog_.size())
|
||||
return true;
|
||||
|
||||
if(y >= fog_[x].size())
|
||||
return true;
|
||||
|
||||
if(fog_[x][y])
|
||||
return side_shrouded(x,y);
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
bool team::clear_fog(size_t x, size_t y)
|
||||
{
|
||||
if(info_.use_fog == false)
|
||||
return false;
|
||||
|
||||
if(x >= fog_.size())
|
||||
fog_.resize(x+1);
|
||||
|
||||
if(y >= fog_[x].size())
|
||||
fog_[x].resize(y+1);
|
||||
|
||||
if(fog_[x][y] == false) {
|
||||
fog_[x][y] = true;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
std::vector<const team::shroud_map*> maps;
|
||||
for(size_t i = 0; i < teams.size(); ++i) {
|
||||
if(!is_enemy(i+1))
|
||||
maps.push_back(&(teams[i].fog_));
|
||||
}
|
||||
return maps;
|
||||
}
|
||||
|
||||
void team::refog()
|
||||
{
|
||||
for(std::vector<std::vector<bool> >::iterator i = fog_.begin();
|
||||
i != fog_.end(); ++i) {
|
||||
std::fill(i->begin(),i->end(),false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool team::knows_about_team(size_t index) const
|
||||
{
|
||||
const team& t = (*teams)[index];
|
||||
|
||||
//We know about our own team
|
||||
if(this == &t) return true;
|
||||
//We know about any allied teams that we're sharing maps with.
|
||||
return !uses_shroud() || !is_enemy(index+1) && t.uses_shroud() && t.share_maps();
|
||||
|
||||
//If we aren't using shroud or fog, then we know about everyone
|
||||
if(!uses_shroud() && !uses_fog()) return true;
|
||||
|
||||
//We don't know about enemies
|
||||
if(is_enemy(index+1)) return false;
|
||||
|
||||
//We know our allies in multiplayer
|
||||
if(network::nconnections() > 0) return true;
|
||||
|
||||
//We know about allies we're sharing maps with
|
||||
if(share_maps() && t.uses_shroud()) return true;
|
||||
|
||||
//We know about allies we're sharing view with
|
||||
if(share_view() && (t.uses_fog() || t.uses_shroud())) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool team::copy_ally_shroud()
|
||||
{
|
||||
if(!teams || !share_maps())
|
||||
return false;
|
||||
|
||||
return shroud_.copy_from(ally_shroud(*teams));
|
||||
}
|
||||
|
||||
const std::string& team::music() const
|
||||
|
@ -625,3 +559,111 @@ void validate_side(int side)
|
|||
throw gamestatus::game_error("invalid side found in unit definition");
|
||||
}
|
||||
}
|
||||
|
||||
bool team::shroud_map::clear(size_t x, size_t y)
|
||||
{
|
||||
if(enabled_ == false)
|
||||
return false;
|
||||
|
||||
if(x >= data_.size())
|
||||
data_.resize(x+1);
|
||||
|
||||
if(y >= data_[x].size())
|
||||
data_[x].resize(y+1);
|
||||
|
||||
if(data_[x][y] == false) {
|
||||
data_[x][y] = true;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void team::shroud_map::reset()
|
||||
{
|
||||
for(std::vector<std::vector<bool> >::iterator i = data_.begin(); i != data_.end(); ++i) {
|
||||
std::fill(i->begin(),i->end(),false);
|
||||
}
|
||||
}
|
||||
|
||||
bool team::shroud_map::value(size_t x, size_t y) const
|
||||
{
|
||||
if(enabled_ == false)
|
||||
return false;
|
||||
|
||||
if(x >= data_.size())
|
||||
return true;
|
||||
|
||||
if(y >= data_[x].size())
|
||||
return true;
|
||||
|
||||
if(data_[x][y])
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
bool team::shroud_map::shared_value(const std::vector<const shroud_map*>& maps, size_t x, size_t y) const
|
||||
{
|
||||
if(enabled_ == false)
|
||||
return false;
|
||||
|
||||
for(std::vector<const shroud_map*>::const_iterator i = maps.begin(); i != maps.end(); ++i) {
|
||||
if((*i)->enabled_ == true && (*i)->value(x,y) == false)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string team::shroud_map::write() const
|
||||
{
|
||||
std::stringstream shroud_str;
|
||||
for(std::vector<std::vector<bool> >::const_iterator sh = data_.begin(); sh != data_.end(); ++sh) {
|
||||
shroud_str << '|';
|
||||
|
||||
for(std::vector<bool>::const_iterator i = sh->begin(); i != sh->end(); ++i) {
|
||||
shroud_str << (*i ? '1' : '0');
|
||||
}
|
||||
|
||||
shroud_str << '\n';
|
||||
}
|
||||
|
||||
return shroud_str.str();
|
||||
}
|
||||
|
||||
void team::shroud_map::read(const std::string& str)
|
||||
{
|
||||
for(std::string::const_iterator sh = str.begin(); sh != str.end(); ++sh) {
|
||||
if(*sh == '|')
|
||||
data_.resize(data_.size()+1);
|
||||
|
||||
if(data_.empty() == false) {
|
||||
if(*sh == '1')
|
||||
data_.back().push_back(true);
|
||||
else if(*sh == '0')
|
||||
data_.back().push_back(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool team::shroud_map::copy_from(const std::vector<const shroud_map*>& maps)
|
||||
{
|
||||
if(enabled_ == false)
|
||||
return false;
|
||||
|
||||
bool cleared = false;
|
||||
for(std::vector<const shroud_map*>::const_iterator i = maps.begin(); i != maps.end(); ++i) {
|
||||
if((*i)->enabled_ == false)
|
||||
continue;
|
||||
|
||||
const std::vector<std::vector<bool> >& v = (*i)->data_;
|
||||
for(size_t x = 0; x != v.size(); ++x) {
|
||||
for(size_t y = 0; y != v[x].size(); ++y) {
|
||||
if(v[x][y]) {
|
||||
cleared |= clear(x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return cleared;
|
||||
}
|
||||
|
|
46
src/team.hpp
46
src/team.hpp
|
@ -26,6 +26,27 @@
|
|||
//e.g. there is only one leader unit per team.
|
||||
class team
|
||||
{
|
||||
class shroud_map {
|
||||
public:
|
||||
shroud_map() : enabled_(false) {}
|
||||
|
||||
bool clear(size_t x, size_t y);
|
||||
void reset();
|
||||
|
||||
bool value(size_t x, size_t y) const;
|
||||
bool shared_value(const std::vector<const shroud_map*>& maps, size_t x, size_t y) const;
|
||||
|
||||
bool copy_from(const std::vector<const shroud_map*>& maps);
|
||||
|
||||
std::string write() const;
|
||||
void read(const std::string& shroud_data);
|
||||
|
||||
bool enabled() const { return enabled_; }
|
||||
void set_enabled(bool enabled) { enabled_ = enabled; }
|
||||
private:
|
||||
bool enabled_;
|
||||
std::vector<std::vector<bool> > data_;
|
||||
};
|
||||
public:
|
||||
|
||||
struct target {
|
||||
|
@ -61,7 +82,7 @@ public:
|
|||
|
||||
std::vector<target> targets;
|
||||
|
||||
bool use_shroud, use_fog, share_maps, share_vision;
|
||||
bool share_maps, share_view;
|
||||
|
||||
std::string music;
|
||||
};
|
||||
|
@ -118,14 +139,16 @@ public:
|
|||
bool shrouded(size_t x, size_t y) const;
|
||||
bool fogged(size_t x, size_t y) const;
|
||||
|
||||
bool uses_shroud() const { return info_.use_shroud; }
|
||||
bool uses_fog() const { return info_.use_fog; }
|
||||
bool clear_shroud(size_t x, size_t y);
|
||||
bool clear_fog(size_t x, size_t y);
|
||||
void refog();
|
||||
bool uses_shroud() const { return shroud_.enabled(); }
|
||||
bool uses_fog() const { return fog_.enabled(); }
|
||||
bool fog_or_shroud() const { return uses_shroud() || uses_fog(); }
|
||||
bool clear_shroud(size_t x, size_t y) { shroud_.clear(x,y); }
|
||||
bool clear_fog(size_t x, size_t y) { fog_.clear(x,y); }
|
||||
void refog() { fog_.reset(); }
|
||||
|
||||
bool knows_about_team(size_t index) const;
|
||||
|
||||
bool copy_ally_shroud();
|
||||
|
||||
bool auto_shroud_updates() const { return auto_shroud_updates_; }
|
||||
void set_auto_shroud_updates(bool value) { auto_shroud_updates_ = value; }
|
||||
|
||||
|
@ -136,17 +159,14 @@ public:
|
|||
private:
|
||||
//Make these public if you need them, but look at knows_about_team(...) first.
|
||||
bool share_maps() const { return info_.share_maps; }
|
||||
bool share_vision() const { return info_.share_vision; }
|
||||
bool share_view() const { return info_.share_view; }
|
||||
|
||||
//Return true if the hex is shrouded/fogged for this side only
|
||||
//Ignores allied teams.
|
||||
bool side_shrouded(size_t x, size_t y) const;
|
||||
bool side_fogged(size_t x, size_t y) const;
|
||||
std::vector<const shroud_map*> ally_shroud(const std::vector<team>& teams) const;
|
||||
std::vector<const shroud_map*> ally_fog(const std::vector<team>& teams) const;
|
||||
|
||||
int gold_;
|
||||
std::set<gamemap::location> villages_;
|
||||
|
||||
typedef std::vector<std::vector<bool> > shroud_map;
|
||||
shroud_map shroud_, fog_;
|
||||
|
||||
bool auto_shroud_updates_;
|
||||
|
|
Loading…
Add table
Reference in a new issue