#include "actor.h" #include "animationmanager.h" #include #include #include #include #include static QVariant myBooleanInterpolator(const bool &start, const bool &end, qreal progress) { return (progress == 1.0) ? end : start; } Actor::Actor(Color color, QGraphicsItem *parent) : PixmapItem(parent), m_color(color), m_direction(Actor::None) { m_pix = ":/" + QString("actor%1").arg(m_color); // DON'T set any pixmap here. we've a pixmap in the animation //setPixmap(m_pix); // higher player "over" lower player setZValue(m_color * 10); /* setup icon for player */ m_icon.setPixmap(m_pix); m_icon.setSprite(SPRITE_MARGIN, SPRITE_MARGIN, SPRITE_WIDTH, SPRITE_HEIGHT); m_direction = Actor::Left; qRegisterAnimationInterpolator(myBooleanInterpolator); QSequentialAnimationGroup *eating = new QSequentialAnimationGroup(this); QParallelAnimationGroup *moving = new QParallelAnimationGroup(this); eating->setLoopCount(-1); for (int i = 0; i < 4; i++) { PixmapItem *img = new PixmapItem(m_pix, this); int x = i * 20 + SPRITE_MARGIN; int y = m_direction * 20 + SPRITE_MARGIN; img->setSprite(x, y, SPRITE_WIDTH, SPRITE_HEIGHT); img->setZValue(zValue()); img->setVisible(false); img->setPos(QPointF(200, 0)); QPropertyAnimation *fadein = new QPropertyAnimation(img, "visible", eating); fadein->setDuration(0); fadein->setEndValue(true); eating->addPause(100); QPropertyAnimation *fadeout = new QPropertyAnimation(img, "visible", eating); fadeout->setDuration(0); fadeout->setEndValue(false); QPropertyAnimation *move = new QPropertyAnimation(img, "pos", moving); move->setDuration(5000); move->setEndValue(QPointF(0, 0)); } AnimationManager::self()->registerAnimation(eating); eating->start(); moving->start(); } PixmapItem &Actor::getIcon() { return m_icon; }