removed class gamestatus
This commit is contained in:
parent
3df78744d4
commit
774f87d807
2 changed files with 0 additions and 389 deletions
|
@ -170,270 +170,6 @@ std::string generate_game_uuid()
|
|||
}
|
||||
#endif
|
||||
|
||||
void gamestatus::add_time_area(const config& cfg)
|
||||
{
|
||||
areas_.push_back(area_time_of_day());
|
||||
area_time_of_day &area = areas_.back();
|
||||
area.id = cfg["id"];
|
||||
area.xsrc = cfg["x"];
|
||||
area.ysrc = cfg["y"];
|
||||
std::vector<map_location> const& locs = parse_location_range(area.xsrc, area.ysrc);
|
||||
std::copy(locs.begin(), locs.end(), std::inserter(area.hexes, area.hexes.end()));
|
||||
time_of_day::parse_times(cfg, area.times);
|
||||
}
|
||||
|
||||
void gamestatus::add_time_area(const std::string& id, const std::set<map_location>& locs,
|
||||
const config& time_cfg)
|
||||
{
|
||||
areas_.push_back(area_time_of_day());
|
||||
area_time_of_day& area = areas_.back();
|
||||
area.id = id;
|
||||
area.hexes = locs;
|
||||
time_of_day::parse_times(time_cfg, area.times);
|
||||
}
|
||||
|
||||
void gamestatus::remove_time_area(const std::string& area_id)
|
||||
{
|
||||
if(area_id.empty()) {
|
||||
areas_.clear();
|
||||
} else {
|
||||
// search for all time areas that match the id.
|
||||
std::vector<area_time_of_day>::iterator i = areas_.begin();
|
||||
while(i != areas_.end()) {
|
||||
if((*i).id == area_id) {
|
||||
i = areas_.erase(i);
|
||||
} else {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gamestatus::gamestatus(const config& time_cfg, int num_turns, game_state* s_o_g) :
|
||||
teams(0),
|
||||
times_(),
|
||||
areas_(),
|
||||
turn_(1),
|
||||
numTurns_(num_turns),
|
||||
currentTime_(0),
|
||||
state_of_game_(s_o_g)
|
||||
{
|
||||
std::string turn_at = time_cfg["turn_at"];
|
||||
std::string current_tod = time_cfg["current_tod"];
|
||||
std::string random_start_time = time_cfg["random_start_time"];
|
||||
if (s_o_g)
|
||||
{
|
||||
turn_at = utils::interpolate_variables_into_string(turn_at, *s_o_g);
|
||||
current_tod = utils::interpolate_variables_into_string(current_tod, *s_o_g);
|
||||
|
||||
}
|
||||
|
||||
if(turn_at.empty() == false) {
|
||||
turn_ = atoi(turn_at.c_str());
|
||||
}
|
||||
|
||||
time_of_day::parse_times(time_cfg,times_);
|
||||
|
||||
set_start_ToD(const_cast<config&>(time_cfg),s_o_g);
|
||||
|
||||
foreach (const config &t, time_cfg.child_range("time_area")) {
|
||||
this->add_time_area(t);
|
||||
}
|
||||
}
|
||||
|
||||
void gamestatus::write(config& cfg) const
|
||||
{
|
||||
std::stringstream buf;
|
||||
buf << turn_;
|
||||
cfg["turn_at"] = buf.str();
|
||||
buf.str(std::string());
|
||||
buf << numTurns_;
|
||||
cfg["turns"] = buf.str();
|
||||
buf.str(std::string());
|
||||
buf << currentTime_;
|
||||
cfg["current_tod"] = buf.str();
|
||||
|
||||
std::vector<time_of_day>::const_iterator t;
|
||||
for(t = times_.begin(); t != times_.end(); ++t) {
|
||||
t->write(cfg.add_child("time"));
|
||||
}
|
||||
|
||||
|
||||
for(std::vector<area_time_of_day>::const_iterator i = areas_.begin(); i != areas_.end(); ++i) {
|
||||
config& area = cfg.add_child("time_area");
|
||||
area["x"] = i->xsrc;
|
||||
area["y"] = i->ysrc;
|
||||
for(t = i->times.begin(); t != i->times.end(); ++t) {
|
||||
t->write(area.add_child("time"));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
time_of_day gamestatus::get_time_of_day_turn(int nturn) const
|
||||
{
|
||||
VALIDATE(times_.size(), _("No time of day has been defined."));
|
||||
|
||||
int time = (currentTime_ + nturn - turn())% times_.size();
|
||||
|
||||
if (time < 0)
|
||||
{
|
||||
time += times_.size();
|
||||
}
|
||||
|
||||
return times_[time];
|
||||
}
|
||||
|
||||
time_of_day gamestatus::get_time_of_day() const
|
||||
{
|
||||
VALIDATE(times_.size(), _("No time of day has been defined."));
|
||||
|
||||
return times_[currentTime_];
|
||||
}
|
||||
|
||||
time_of_day gamestatus::get_previous_time_of_day() const
|
||||
{
|
||||
return get_time_of_day_turn(turn()-1);
|
||||
}
|
||||
|
||||
time_of_day gamestatus::get_time_of_day(int illuminated, const map_location& loc, int n_turn) const
|
||||
{
|
||||
time_of_day res = get_time_of_day_turn(n_turn);
|
||||
|
||||
if(loc.valid()) {
|
||||
for(std::vector<area_time_of_day>::const_iterator i = areas_.begin(); i != areas_.end(); ++i) {
|
||||
if(i->hexes.count(loc) == 1) {
|
||||
|
||||
VALIDATE(i->times.size(), _("No time of day has been defined."));
|
||||
|
||||
res = i->times[(n_turn-1)%i->times.size()];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(illuminated) {
|
||||
res.bonus_modified=illuminated;
|
||||
res.lawful_bonus += illuminated;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
time_of_day gamestatus::get_time_of_day(int illuminated, const map_location& loc) const
|
||||
{
|
||||
return get_time_of_day(illuminated,loc,turn());
|
||||
}
|
||||
|
||||
bool gamestatus::set_time_of_day(int newTime)
|
||||
{
|
||||
// newTime can come from network so have to take run time test
|
||||
if( newTime >= static_cast<int>(times_.size())
|
||||
|| newTime < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
currentTime_ = newTime;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool gamestatus::is_start_ToD(const std::string& random_start_time)
|
||||
{
|
||||
return !random_start_time.empty()
|
||||
&& utils::string_bool(random_start_time, true);
|
||||
}
|
||||
|
||||
void gamestatus::set_start_ToD(config &level, game_state* s_o_g)
|
||||
{
|
||||
if (!level["current_tod"].empty())
|
||||
{
|
||||
set_time_of_day(atoi(level["current_tod"].c_str()));
|
||||
return;
|
||||
}
|
||||
std::string random_start_time = level["random_start_time"];
|
||||
if (s_o_g)
|
||||
{
|
||||
random_start_time = utils::interpolate_variables_into_string(random_start_time, *s_o_g);
|
||||
}
|
||||
if (gamestatus::is_start_ToD(random_start_time))
|
||||
{
|
||||
std::vector<std::string> start_strings =
|
||||
utils::split(random_start_time, ',', utils::STRIP_SPACES | utils::REMOVE_EMPTY);
|
||||
|
||||
if (utils::string_bool(random_start_time,false))
|
||||
{
|
||||
// We had boolean value
|
||||
set_time_of_day(rand()%times_.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
set_time_of_day(atoi(start_strings[rand()%start_strings.size()].c_str()) - 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We have to set right ToD for oldsaves
|
||||
|
||||
set_time_of_day((turn() - 1) % times_.size());
|
||||
}
|
||||
// Setting ToD to level data
|
||||
|
||||
std::stringstream buf;
|
||||
buf << currentTime_;
|
||||
level["current_tod"] = buf.str();
|
||||
|
||||
}
|
||||
|
||||
void gamestatus::next_time_of_day()
|
||||
{
|
||||
VALIDATE(times_.size(), _("No time of day has been defined."));
|
||||
|
||||
currentTime_ = (currentTime_ + 1)%times_.size();
|
||||
}
|
||||
|
||||
size_t gamestatus::turn() const
|
||||
{
|
||||
return turn_;
|
||||
}
|
||||
|
||||
int gamestatus::number_of_turns() const
|
||||
{
|
||||
return numTurns_;
|
||||
}
|
||||
void gamestatus::modify_turns(const std::string& mod)
|
||||
{
|
||||
numTurns_ = std::max<int>(utils::apply_modifier(numTurns_,mod,0),-1);
|
||||
}
|
||||
void gamestatus::add_turns(int num)
|
||||
{
|
||||
numTurns_ = std::max<int>(numTurns_ + num,-1);
|
||||
}
|
||||
|
||||
void gamestatus::set_turn(unsigned int num)
|
||||
{
|
||||
VALIDATE(times_.size(), _("No time of day has been defined."));
|
||||
const unsigned int old_num = turn_;
|
||||
// Correct ToD
|
||||
currentTime_ = (num - 1) % times_.size();
|
||||
if (currentTime_ < 0) {
|
||||
currentTime_ += times_.size();
|
||||
}
|
||||
if(static_cast<int>(num) > numTurns_ && numTurns_ != -1) {
|
||||
this->add_turns(numTurns_ - num);
|
||||
}
|
||||
turn_ = num;
|
||||
|
||||
LOG_NG << "changed current turn number from " << old_num << " to " << num << '\n';
|
||||
}
|
||||
|
||||
bool gamestatus::next_turn()
|
||||
{
|
||||
next_time_of_day();
|
||||
++turn_;
|
||||
return numTurns_ == -1 || turn_ <= size_t(numTurns_);
|
||||
}
|
||||
|
||||
static player_info read_player(const config &cfg)
|
||||
{
|
||||
player_info res;
|
||||
|
|
|
@ -185,131 +185,6 @@ private:
|
|||
game_classification classification_;
|
||||
};
|
||||
|
||||
/**
|
||||
* Contains the global status of the game.
|
||||
*
|
||||
* Namely the current turn, the number of turns, and the time of day.
|
||||
*/
|
||||
class gamestatus
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Reads turns and time information from parameters.
|
||||
*
|
||||
* It sets random starting ToD and current_tod to config.
|
||||
*/
|
||||
gamestatus(const config& time_cfg, int num_turns, game_state* s_o_g = NULL);
|
||||
void write(config& cfg) const;
|
||||
|
||||
/** Returns time of day object for current turn. */
|
||||
time_of_day get_time_of_day() const;
|
||||
time_of_day get_previous_time_of_day() const;
|
||||
time_of_day get_time_of_day(int illuminated, const map_location& loc) const;
|
||||
|
||||
/**
|
||||
* Returns time of day object in the turn.
|
||||
*
|
||||
* It first tries to look for specified. If no area time specified in
|
||||
* location, it returns global time.
|
||||
*/
|
||||
time_of_day get_time_of_day(int illuminated, const map_location& loc, int n_turn) const;
|
||||
|
||||
/**
|
||||
* Sets global time of day in this turn.
|
||||
*
|
||||
* Time is a number between 0 and n-1, where n is number of ToDs.
|
||||
*/
|
||||
bool set_time_of_day(int newTime);
|
||||
size_t turn() const;
|
||||
int number_of_turns() const;
|
||||
void modify_turns(const std::string& mod);
|
||||
void add_turns(int num);
|
||||
|
||||
/** Dynamically change the current turn number. */
|
||||
void set_turn(unsigned int num);
|
||||
|
||||
/**
|
||||
* Function to move to the next turn.
|
||||
*
|
||||
* @returns True if time has not expired.
|
||||
*/
|
||||
bool next_turn();
|
||||
|
||||
static bool is_start_ToD(const std::string&);
|
||||
|
||||
/**
|
||||
* Adds a new local time area from config, making it follow its own
|
||||
* time-of-day sequence.
|
||||
*
|
||||
* @param cfg Config object containing x,y range/list of
|
||||
* locations and desired [time] information.
|
||||
*/
|
||||
void add_time_area(const config& cfg);
|
||||
|
||||
/**
|
||||
* Adds a new local time area from a set of locations, making those
|
||||
* follow a different time-of-day sequence.
|
||||
*
|
||||
* @param id Identifier string to associate this time area
|
||||
* with.
|
||||
* @param locs Set of locations to be affected.
|
||||
* @param time_cfg Config object containing [time] information.
|
||||
*/
|
||||
void add_time_area(const std::string& id, const std::set<map_location>& locs,
|
||||
const config& time_cfg);
|
||||
|
||||
/**
|
||||
* Removes a time area from config, making it follow the scenario's
|
||||
* normal time-of-day sequence.
|
||||
*
|
||||
* @param id Identifier of time_area to remove. Supply an
|
||||
* empty one to remove all local time areas.
|
||||
*/
|
||||
void remove_time_area(const std::string& id);
|
||||
|
||||
/**
|
||||
* @todo FIXME: since gamestatus may be constructed with NULL game_state* (by default),
|
||||
* you should not rely on this function to return the current game_state.
|
||||
*/
|
||||
const game_state& sog() const{return(*state_of_game_);}
|
||||
|
||||
std::vector<team> *teams;
|
||||
|
||||
private:
|
||||
void set_start_ToD(config&, game_state*);
|
||||
|
||||
/**
|
||||
* Returns time of day object in the turn.
|
||||
*
|
||||
* Correct time is calculated from current time.
|
||||
*/
|
||||
time_of_day get_time_of_day_turn(int nturn) const;
|
||||
void next_time_of_day();
|
||||
|
||||
std::vector<time_of_day> times_;
|
||||
|
||||
struct area_time_of_day {
|
||||
area_time_of_day() :
|
||||
xsrc(),
|
||||
ysrc(),
|
||||
id(),
|
||||
times(),
|
||||
hexes()
|
||||
{}
|
||||
|
||||
std::string xsrc, ysrc;
|
||||
std::string id;
|
||||
std::vector<time_of_day> times;
|
||||
std::set<map_location> hexes;
|
||||
};
|
||||
|
||||
std::vector<area_time_of_day> areas_;
|
||||
|
||||
size_t turn_;
|
||||
int numTurns_;
|
||||
int currentTime_;
|
||||
const game_state* state_of_game_;
|
||||
};
|
||||
|
||||
std::string generate_game_uuid();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue