Пример #1
0
void Square::getViewIndex(const CreatureView* c, ViewIndex& ret) const {
  double fireSize = 0;
  if (creature && (c->canSee(creature) || creature->isPlayer())) {
    ret.insert(copyOf(creature->getViewObject()));
  }
  else if (creature && contains(c->getUnknownAttacker(), creature))
    ret.insert(copyOf(ViewObject::unknownMonster()));
  if (c->canSee(position)) {
    for (Item* it : inventory.getItems())
      fireSize = max(fireSize, it->getFireSize());
    fireSize = max(fireSize, fire.getSize());
    if (backgroundObject)
      ret.insert(*backgroundObject);
    ret.insert(getViewObject());
    for (const PTrigger& t : triggers)
      if (auto obj = t->getViewObject(c))
        ret.insert(copyOf(*obj).setAttribute(ViewObject::Attribute::BURNING, fireSize));
    if (Item* it = getTopItem())
      ret.insert(copyOf(it->getViewObject()).setAttribute(ViewObject::Attribute::BURNING, fireSize));
    ret.setHighlight(HighlightType::NIGHT, 1.0 - level->getLight(position));
    if (poisonGas.getAmount() > 0)
      ret.setHighlight(HighlightType::POISON_GAS, min(1.0, poisonGas.getAmount()));
    if (fog)
      ret.setHighlight(HighlightType::FOG, fog);
  } else
    ret.setHiddenId(getViewObject().id());
}
Пример #2
0
int ConnectivityTester::computeConnectivity(NodeArray<NodeArray<int>> &Connectivity)
{
	node v = m_graph->firstNode();
	int result = m_graph->numberOfNodes();

	if(m_graphCopied) {
		v = ((GraphCopy*)m_graph)->original().firstNode();
	}

	for (; v != nullptr; v = v->succ()) {
		Connectivity[v][v] = 0;

		for (node u = v->succ(); u != nullptr; u = u->succ()) {
			Connectivity[v][u] = computeConnectivity(copyOf(v, true), copyOf(u));
			result = min(result, Connectivity[v][u]);

			if (m_directed) {
				Connectivity[u][v] = computeConnectivity(copyOf(u, true), copyOf(v));
				result = min(result, Connectivity[u][v]);
			} else {
				Connectivity[u][v] = Connectivity[v][u];
			}
		}
	}

	return result;
}
Пример #3
0
void Level::replaceSquare(Vec2 pos, PSquare square, bool storePrevious) {
  squares[pos]->onConstructNewSquare(square.get());
  Creature* c = squares[pos]->getCreature();
  if (c)
    squares[pos]->removeCreature();
  for (Item* it : copyOf(squares[pos]->getItems()))
    square->dropItem(squares[pos]->removeItem(it));
  addLightSource(pos, squares[pos]->getLightEmission(), -1);
  square->setPosition(pos);
  square->setLevel(this);
  for (PTrigger& t : squares[pos]->removeTriggers())
    square->addTrigger(std::move(t));
  square->setBackground(squares[pos].get());
  if (const Tribe* tribe = squares[pos]->getForbiddenTribe())
    square->forbidMovementForTribe(tribe);
  if (storePrevious)
    oldSquares[pos] = std::move(squares[pos]);
  squares[pos] = std::move(square);
  if (c) {
    squares[pos]->setCreature(c);
  }
  addLightSource(pos, squares[pos]->getLightEmission(), 1);
  updateVisibility(pos);
  squares[pos]->updateSunlightMovement(isInSunlight(pos));
  updateConnectivity(pos);
}
Пример #4
0
QgsFeatureList QgsClipboard::transformedCopyOf( QgsCoordinateReferenceSystem destCRS )
{
  QgsFeatureList featureList = copyOf();
  QgsCoordinateTransform ct( crs(), destCRS );

  QgsDebugMsg( "transforming clipboard." );
  for ( QgsFeatureList::iterator iter = featureList.begin(); iter != featureList.end(); ++iter )
  {
    iter->geometry()->transform( ct );
  }

  return featureList;
}
Пример #5
0
EventGenerator<Listener>::~EventGenerator<Listener>() {
  for (Listener* l : copyOf(listeners))
    l->unsubscribeFromCreature(this);
}
Пример #6
0
vector<PItem> Equipment::removeItems(const vector<WItem>& items, WCreature c) {
  vector<PItem> ret;
  for (WItem& it : copyOf(items))
    ret.push_back(removeItem(it, c));
  return ret;
}
Пример #7
0
//     Compound }}}
//     Generic {{{
TransientDatatype Datatype::copy() {
    return TransientDatatype(copyOf(*this));
}