Beispiel #1
0
void Player::filterCurSelectedObjects(ObjectList &selected_objs, int select_cnt_limit) const
{
	int stats[ObjectType::SIZE] = {0, };
	int my_unit_cnt = 0;
	for(ObjectList::const_iterator it = selected_objs.begin(); 
		it != selected_objs.end(); ++it)
	{
		const ObjectPtr &obj = *it;
		stats[obj->getObjectType()]++;
		if(obj->getOwner() == this)
			my_unit_cnt++;
	}

	for(ObjectList::iterator it = selected_objs.begin(); 
		it != selected_objs.end(); )
	{
		const ObjectPtr &obj = *it;
		
		// if there are at least one selected unit, deselect non-unit objects.
		if(stats[ObjectType::Unit] > 0)
		{
			if(obj->getObjectType() != ObjectType::Unit)
				selected_objs.erase(it++);
			else
				++it;
		}
		else if(my_unit_cnt != 0)
		{
			if(obj->getOwner() != this)
				selected_objs.erase(it++);
			else
				++it;
		}
		else
		{
			++it;
		}
	} /* for(ObjectList::iterator it = selected_objs.begin(); */
	
	if(select_cnt_limit > 0)
	{
		ObjectList::iterator end = selected_objs.end();
		ObjectList::iterator it = selected_objs.begin();
		
		// skip first nth object
		for(int i = 0; i < select_cnt_limit && it != end; i++)
			++it;
		
		// erase everything else
		while(it != end)
			selected_objs.erase(it++);
	}
}
Beispiel #2
0
void Player::mergeObjectList(ObjectList &orig, const ObjectList &newobjs, SelectionFlags_t flags)
{
	if(flags == SelectionFlags::SET)
	{
		orig = newobjs;
	}
	else if(flags == SelectionFlags::ADD)
	{
		for(ObjectList::const_iterator it = newobjs.begin(); it != newobjs.end(); ++it)
		{
			ObjectList::const_iterator it2 = std::find(orig.begin(), orig.end(), *it);
			if(it2 == orig.end())
				orig.addObject(*it);
		}
	} /* else if(flags == SelectionFlags::ADD) */
	else if(flags == SelectionFlags::REMOVE)
	{
		for(ObjectList::const_iterator it = newobjs.begin(); it != newobjs.end(); ++it)
		{
			ObjectList::iterator it2 = std::find(orig.begin(), orig.end(), *it);
			if(it2 != orig.end())
				orig.erase(it2);
		}
	} /* else if(flags == SelectionFlags::REMOVE) */
}
Beispiel #3
0
void Object::InsertAndRemoveDuplicates(ObjectList& set,
					      int old)  {
  cout << "******* Object::InsertAndRemoveDuplicates() " << endl;
  // This _is_ still used by Query::GatherNewObjects() by CombineMapsVQ().
  // I think no place uses this nomore.  Should be obsoleted ???

  for (size_t i=old; i<set.size(); i++) {
    size_t p = i, q = i;
    double val = set[i].Value();
    for (int j=old-1; j>=0; j--) {
      if (val>set[j].Value())
	p = j;
      else if (q!=i)
	break;
      if (q==i && set[j].Match(set[i])) {
	val = set[j].AddValue(val);  // OBS! AddValue()
	p = q = j;
      }
    }
    set.move(q, p);
    if (q==i)
      old++;
    else {
      set.swap_objects(i, set.size()-1);
      set.erase(set.size()-1);
      i--;
    }
  }
}
Beispiel #4
0
void excludeByType( ObjectList& list, const Set& set )
{
  for( auto it=list.begin(); it != list.end(); )
  {
    if( set.count( (*it)->type() ) > 0 ) { it=list.erase( it ); }
    else { ++it; }
  }
}
Beispiel #5
0
void dtDeleteObject(DtObjectRef object) {
  ObjectList::iterator i = objectList.find(object);
  if (i != objectList.end()) {
    if (currentObject == (*i).second) currentObject = 0;
    delete (*i).second;
    objectList.erase(i);
  }
  respTable.cleanObject(object);
}
void DataManager::removeGridObject(int x, int y, ObjectPtr object) {
	CellData* cd = &GET_GRID_ITEM(grid,x,y);
	ObjectList* objects = &cd->objects;
	for (ObjectList::iterator it = objects->begin(); it != objects->end(); it++) {
		if (*it == object) {
			objects->erase(it);
			gridChanged(x, y, cd);
			break;
		}
	}
}