Add a 'temporary unit mover'.

This commit is contained in:
Ali El Gariani 2009-11-30 21:49:53 +00:00
parent c15d9cb2fc
commit d39556e2d5
2 changed files with 31 additions and 0 deletions

View File

@ -2830,6 +2830,20 @@ temporary_unit_placer::~temporary_unit_placer()
} }
} }
temporary_unit_mover::temporary_unit_mover(unit_map& m, const map_location& src, const map_location& dst)
: m_(m), src_(src), dst_(dst), temp_(m.extract(dst))
{
m.move(src_, dst_);
}
temporary_unit_mover::~temporary_unit_mover()
{
m_.move(dst_, src_);
if(temp_) {
m_.insert(temp_);
}
}
std::string unit::image_mods() const{ std::string unit::image_mods() const{
std::stringstream modifier; std::stringstream modifier;
if(flag_rgb_.size()){ if(flag_rgb_.size()){

View File

@ -522,6 +522,23 @@ private:
std::pair<map_location,unit> *temp_; std::pair<map_location,unit> *temp_;
}; };
/**
* This object is used to temporary move a unit in the unit map, swapping out
* any unit that is already there. On destruction, it restores the unit map to
* its original.
*/
struct temporary_unit_mover
{
temporary_unit_mover(unit_map& m, const map_location& src, const map_location& dst);
~temporary_unit_mover();
private:
unit_map& m_;
const map_location& src_;
const map_location& dst_;
std::pair<map_location,unit> *temp_;
};
/** /**
* Gets a checksum for a unit. * Gets a checksum for a unit.
* *