コード例 #1
0
ファイル: Creep.cpp プロジェクト: GunshipPenguin/term3-ids
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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: Creep.cpp プロジェクト: GunshipPenguin/term3-ids
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;
}
コード例 #4
0
ファイル: mapitem.cpp プロジェクト: ihuangx/tiled
/**
 * 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
}
コード例 #5
0
bool IntersectionGeometry::isBelow(float angle) {
	return !isAbove(angle);
}