void Creep::draw(sf::RenderWindow &window) { if (tileSet_) { sf::Sprite creepSprite = tileSet_->getSpriteById(1); sf::Vector2f position = getPosition(); int drawnSize = TileSet::getDrawnSize(); creepSprite.setOrigin(drawnSize/2.f,drawnSize/2.f); position.x += drawnSize/2.f; position.y += drawnSize/2.f; creepSprite.setPosition(position); int goingTo = paths_.getNextByID(comingFrom_); if (isAbove(comingFrom_,goingTo)) { creepSprite.setRotation(180); }else if (isBelow(comingFrom_,goingTo)) { creepSprite.setRotation(0); }else if (isLeft(comingFrom_,goingTo)) { creepSprite.setRotation(90); }else if (isRight(comingFrom_,goingTo)) { creepSprite.setRotation(270); } window.draw(creepSprite); } return; }
bool GameObject::onTopOf(GameObject *gameObject) { if (!active || gameObject->isNotActive()) return false; if (isAbove(gameObject)) if (position.y - gameObject->position.y > 1.95f && position.y - gameObject->position.y < 2.05f) { return true; } return false; }
sf::Vector2f Creep::getFuturePosition(double timeDelta) { int drawnSize = TileSet::getDrawnSize(); sf::Vector2f pos = getPosition(); float distanceDelta(timeDelta*speed_*drawnSize); while (distanceDelta > 0) { int goingTo = paths_.getNextByID(comingFrom_); if (isLeft(comingFrom_,goingTo)) { //coming from left of goingTo float distanceIntoTile = pos.x - (comingFrom_%paths_.getNumTilesX())*drawnSize; if (distanceDelta >= drawnSize - distanceIntoTile) { distanceDelta -= (drawnSize-distanceIntoTile); pos.x = (goingTo%paths_.getNumTilesX())*drawnSize; comingFrom_ = goingTo; }else { pos.x += distanceDelta; distanceDelta = 0; } }else if (isRight(comingFrom_,goingTo)) { //coming from right of goingTo float distanceIntoTile = (comingFrom_%paths_.getNumTilesX())*drawnSize - pos.x; if (distanceDelta >= drawnSize - distanceIntoTile) { distanceDelta -= (drawnSize - distanceIntoTile); pos.x = (goingTo%paths_.getNumTilesX())*drawnSize; comingFrom_ = goingTo; }else { pos.x -= distanceDelta; distanceDelta = 0; } }else if (isAbove(comingFrom_,goingTo)) {//coming from above goingTo float distanceIntoTile = pos.y - comingFrom_/paths_.getNumTilesX() * drawnSize; if (distanceDelta >= drawnSize - distanceIntoTile) { distanceDelta -= (drawnSize - distanceIntoTile); pos.y = (goingTo/paths_.getNumTilesX()) * drawnSize; comingFrom_ = goingTo; }else { pos.y += distanceDelta; distanceDelta = 0; } }else if (isBelow(comingFrom_,goingTo)) {//coming from below goingTo float distanceIntoTile = comingFrom_/paths_.getNumTilesX() * drawnSize - pos.y; if (distanceDelta >= drawnSize - distanceIntoTile) { distanceDelta -= (drawnSize - distanceIntoTile); pos.y = (goingTo/paths_.getNumTilesX()) * drawnSize; comingFrom_ = goingTo; }else { pos.y -= distanceDelta; distanceDelta = 0; } }else if (comingFrom_ == goingTo) { distanceDelta = 0; leaked_ = true; } } return pos; }
/** * A layer has changed. This can mean that the layer visibility, opacity or * offset changed. */ void MapItem::layerChanged(Layer *layer) { Preferences *prefs = Preferences::instance(); QGraphicsItem *layerItem = mLayerItems.value(layer); Q_ASSERT(layerItem); layerItem->setVisible(layer->isVisible()); qreal multiplier = 1; if (prefs->highlightCurrentLayer() && isAbove(mapDocument()->currentLayer(), layer)) multiplier = opacityFactor; layerItem->setOpacity(layer->opacity() * multiplier); layerItem->setPos(layer->offset()); updateBoundingRect(); // possible layer offset change }
bool IntersectionGeometry::isBelow(float angle) { return !isAbove(angle); }