Пример #1
0
std::string PatternString::str() const{
  std::string str;
  for(ModuleList::const_iterator _it = const_begin();
	  _it != const_end(); _it++)
		 str += _it->str();
  return str;
}
Пример #2
0
std::string ObjectMap::Dump() const {
    std::ostringstream dump_stream;
    dump_stream << "ObjectMap contains UniverseObjects: " << std::endl;
    for (const_iterator<> it = const_begin(); it != const_end(); ++it)
        dump_stream << it->Dump() << std::endl;
    dump_stream << std::endl;
    return dump_stream.str();
}
Пример #3
0
std::vector<int> ObjectMap::FindObjectIDs(const UniverseObjectVisitor& visitor) const {
    std::vector<int> result;
    for (const_iterator<> it = const_begin(); it != const_end(); ++it) {
        if (it->Accept(visitor))
            result.push_back(it->ID());
    }
    return result;
}
Пример #4
0
std::vector<TemporaryPtr<const UniverseObject> > ObjectMap::FindObjects(const UniverseObjectVisitor& visitor) const {
    std::vector<TemporaryPtr<const UniverseObject> > result;
    for (const_iterator<> it = const_begin(); it != const_end(); ++it) {
        if (TemporaryPtr<UniverseObject> obj = it->Accept(visitor))
            result.push_back(Object(obj->ID()));
    }
    return result;
}
Пример #5
0
std::string PatternString::repr() const{
  std::string str = "PatternString(";
  for(ModuleList::const_iterator _it = const_begin();
	  _it != const_end(); _it++)
		 str += _it->repr();
  str +=')';
  return str;
}
Пример #6
0
double RuleList::highestPosition() const
{
	double result = 0;
	for (ConstIterator iter = const_begin(); iter != const_end(); ++iter) {
		CPRule rule = CONST_COMMITABLE_CAST(Rule, *iter);
		if (rule->isActive()) {
			result = max(rule->getPosition(), result);
		}
	}
	return result;
}
Пример #7
0
bool RuleList::hasActiveRule() const
{
	bool result = false;
	for (ConstIterator iter = const_begin(); iter != const_end(); ++iter) {
		if (CONST_COMMITABLE_CAST(Rule, *iter)->isActive()) {
			result = true;
			break;
		}
	}
	return result;
}
Пример #8
0
void ObjectMap::AuditContainment(const std::set<int>& destroyed_object_ids) {
    // determine all objects that some other object thinks contains them
    std::map<int, std::set<int> >   contained_objs;
    std::map<int, std::set<int> >   contained_planets;
    std::map<int, std::set<int> >   contained_buildings;
    std::map<int, std::set<int> >   contained_fleets;
    std::map<int, std::set<int> >   contained_ships;
    std::map<int, std::set<int> >   contained_fields;

    for (const_iterator<> it = const_begin (); it != const_end(); ++it) {
        TemporaryPtr<const UniverseObject> contained = *it;
        if (destroyed_object_ids.find(contained->ID()) != destroyed_object_ids.end())
            continue;

        int contained_id = contained->ID();
        int sys_id = contained->SystemID();
        int alt_id = contained->ContainerObjectID();    // planet or fleet id for a building or ship, or system id again for a fleet, field, or planet
        UniverseObjectType type = contained->ObjectType();
        if (type == OBJ_SYSTEM)
            continue;

        // store systems' contained objects
        if (this->Object(sys_id)) { // although this is expected to be a system, can't use Object<System> here due to CopyForSerialize not copying the type-specific objects info
            contained_objs[sys_id].insert(contained_id);

            if (type == OBJ_PLANET)
                contained_planets[sys_id].insert(contained_id);
            else if (type == OBJ_BUILDING)
                contained_buildings[sys_id].insert(contained_id);
            else if (type == OBJ_FLEET)
                contained_fleets[sys_id].insert(contained_id);
            else if (type == OBJ_SHIP)
                contained_ships[sys_id].insert(contained_id);
            else if (type == OBJ_FIELD)
                contained_fields[sys_id].insert(contained_id);
        }

        // store planets' contained buildings
        if (type == OBJ_BUILDING && this->Object(alt_id))
            contained_buildings[alt_id].insert(contained_id);

        // store fleets' contained ships
        if (type == OBJ_SHIP && this->Object(alt_id))
            contained_ships[alt_id].insert(contained_id);
    }

    // set contained objects of all possible containers
    for (iterator<> it = begin(); it != end(); ++it) {
        TemporaryPtr<UniverseObject> obj = *it;
        if (obj->ObjectType() == OBJ_SYSTEM) {
            TemporaryPtr<System> sys = boost::dynamic_pointer_cast<System>(obj);
            if (!sys)
                continue;
            sys->m_objects =    contained_objs[sys->ID()];
            sys->m_planets =    contained_planets[sys->ID()];
            sys->m_buildings =  contained_buildings[sys->ID()];
            sys->m_fleets =     contained_fleets[sys->ID()];
            sys->m_ships =      contained_ships[sys->ID()];
            sys->m_fields =     contained_fields[sys->ID()];
        } else if (obj->ObjectType() == OBJ_PLANET) {
            TemporaryPtr<Planet> plt = boost::dynamic_pointer_cast<Planet>(obj);
            if (!plt)
                continue;
            plt->m_buildings =  contained_buildings[plt->ID()];
        } else if (obj->ObjectType() == OBJ_FLEET) {
            TemporaryPtr<Fleet> flt = boost::dynamic_pointer_cast<Fleet>(obj);
            if (!flt)
                continue;
            flt->m_ships =      contained_ships[flt->ID()];
        }
    }
}