bool has_seen(unsigned int index) const { if(!uses_shroud() && !uses_fog()) return true; if(index < seen_.size()) { return seen_[index]; } else { return false; } }
void team::build(const config& cfg, const gamemap& map, int gold) { gold_ = gold; info_.read(cfg); fog_.set_enabled(cfg["fog"].to_bool()); fog_.read(cfg["fog_data"]); shroud_.set_enabled(cfg["shroud"].to_bool()); shroud_.read(cfg["shroud_data"]); auto_shroud_updates_ = cfg["auto_shroud"].to_bool(auto_shroud_updates_); LOG_NG << "team::team(...): team_name: " << info_.team_name << ", shroud: " << uses_shroud() << ", fog: " << uses_fog() << ".\n"; // Load the WML-cleared fog. const config& fog_override = cfg.child("fog_override"); if(fog_override) { const std::vector<map_location> fog_vector = map.parse_location_range(fog_override["x"], fog_override["y"], true); fog_clearer_.insert(fog_vector.begin(), fog_vector.end()); } // To ensure some minimum starting gold, // gold is the maximum of 'gold' and what is given in the config file gold_ = std::max(gold, info_.gold); if(gold_ != info_.gold) { info_.start_gold = gold; } // Old code was doing: // info_.start_gold = std::to_string(gold) + " (" + info_.start_gold + ")"; // Was it correct? // Load in the villages the side controls at the start for(const config& v : cfg.child_range("village")) { map_location loc(v); if(map.is_village(loc)) { villages_.insert(loc); } else { WRN_NG << "[side] " << current_player() << " [village] points to a non-village location " << loc << std::endl; } } countdown_time_ = cfg["countdown_time"]; action_bonus_count_ = cfg["action_bonus_count"]; planned_actions_.reset(new wb::side_actions()); planned_actions_->set_team_index(info_.side - 1); }
void team::write(config& cfg) const { info_.write(cfg); cfg["auto_shroud"] = auto_shroud_updates_; cfg["shroud"] = uses_shroud(); cfg["fog"] = uses_fog(); cfg["gold"] = gold_; // Write village locations for(const map_location& loc : villages_) { loc.write(cfg.add_child("village")); } cfg["shroud_data"] = shroud_.write(); cfg["fog_data"] = fog_.write(); if(!fog_clearer_.empty()) write_location_range(fog_clearer_, cfg.add_child("fog_override")); cfg["countdown_time"] = countdown_time_; cfg["action_bonus_count"] = action_bonus_count_; }
void team::write(config& cfg) const { info_.write(cfg); cfg["auto_shroud"] = auto_shroud_updates_; cfg["shroud"] = uses_shroud(); cfg["fog"] = uses_fog(); cfg["gold"] = gold_; // Write village locations for(std::set<map_location>::const_iterator t = villages_.begin(); t != villages_.end(); ++t) { t->write(cfg.add_child("village")); } cfg["shroud_data"] = shroud_.write(); cfg["fog_data"] = fog_.write(); if ( !fog_clearer_.empty() ) write_location_range(fog_clearer_, cfg.add_child("fog_override")); cfg["countdown_time"] = countdown_time_; cfg["action_bonus_count"] = action_bonus_count_; }
bool team::knows_about_team(size_t index) const { const team& t = resources::gameboard->teams()[index]; // We know about our own team if(this == &t) { return true; } // 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 human allies. if(t.is_human()) { 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 fog_or_shroud() const { return uses_shroud() || uses_fog(); }