Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
void GraphGraphicsView::drawPath(NodeGraphicsItem *from, NodeGraphicsItem *to)
{
    QPen pen(QColor(qrand()%256,qrand()%256,qrand()%256));

    double Pi = 3.1415926535897932384626433832795028;
    qreal x1, x2, y1, y2;
    if (isBelow(from, to))
    {
        x1 = from->pos().x()+15;
        y1 = from->pos().y()+10;
        x2 = to->pos().x()+15;
        y2 = to->pos().y()-20;
    }
    else
    {
        x1 = from->pos().x()+15;
        y1 = from->pos().y()-20;
        x2 = to->pos().x()+15;
        y2 = to->pos().y()+10;
    }

    lines.push_back(scene.addLine(x1, y1,
                                  x2, y2,pen));
    qreal arrowsize = 15;
    QGraphicsLineItem* line = lines.last();


    // I HAVE NO IDEA WHAT I'M CALCULATING MODE ON

    double angle = ::acos(line->line().dx() / line->line().length());

    if (line->line().dy() >= 0)
             angle = (Pi * 2) - angle;

    QPointF arrowP1 = line->line().p1()  + QPointF(sin(angle + Pi / 3 ) * arrowsize,
                                                   cos(angle+Pi/3)*arrowsize);
    QPointF arrowP2 = line->line().p1() + QPointF(sin(angle + Pi - Pi / 3) * arrowsize,
                                            cos(angle + Pi - Pi / 3) * arrowsize);

    // I HAVE NO IDEA WHAT I'M CALCULATING MODE OFF


    arrows.push_back(scene.addLine(line->line().p1().x(), line->line().p1().y(),
                                   arrowP1.x(), arrowP1.y(),pen));
    arrows.push_back(scene.addLine(line->line().p1().x(), line->line().p1().y(),
                                   arrowP2.x(), arrowP2.y(),pen));
}