insilmaril@47: #include "animpoint.h" insilmaril@47: insilmaril@47: #include insilmaril@47: insilmaril@47: AnimPoint::AnimPoint() insilmaril@47: { insilmaril@47: init(); insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::operator= ( const AnimPoint & other ) insilmaril@47: { insilmaril@47: copy (other); insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::operator= ( const QPointF & other ) insilmaril@47: { insilmaril@47: init(); insilmaril@47: setX (other.x() ); insilmaril@47: setY (other.x() ); insilmaril@47: } insilmaril@47: insilmaril@47: bool AnimPoint::operator== ( const QPointF& other ) insilmaril@47: { insilmaril@47: QPointF p( x(),y()); insilmaril@47: return p == other; insilmaril@47: } insilmaril@47: insilmaril@47: bool AnimPoint::operator== ( AnimPoint other ) insilmaril@47: { insilmaril@47: if (rx() != other.rx() ) return false; insilmaril@47: if (ry() != other.ry() ) return false; insilmaril@47: if (startPos != other.startPos) return false; insilmaril@47: if (destPos != other.destPos) return false; insilmaril@47: if (animated != other.animated ) return false; insilmaril@47: insilmaril@47: return true; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::init () insilmaril@47: { insilmaril@47: animated=false; insilmaril@47: n=0; insilmaril@47: startPos=QPointF(0,0); insilmaril@47: destPos=QPointF(0,0); insilmaril@47: vector=QPointF(0,0); insilmaril@47: animTicks=10; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::copy (AnimPoint other) insilmaril@47: { insilmaril@47: setX (other.x() ); insilmaril@47: setY (other.x() ); insilmaril@47: startPos=other.startPos; insilmaril@47: destPos=other.destPos; insilmaril@47: vector=other.vector; insilmaril@47: animated=other.animated; insilmaril@47: n=other.n; insilmaril@47: animTicks=other.animTicks; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::setStart(const QPointF &p) insilmaril@47: { insilmaril@47: startPos=p; insilmaril@47: initVector(); insilmaril@47: } insilmaril@47: insilmaril@47: QPointF AnimPoint::getStart() insilmaril@47: { insilmaril@47: return startPos; insilmaril@47: } insilmaril@47: insilmaril@47: insilmaril@47: void AnimPoint::setDest(const QPointF &p) insilmaril@47: { insilmaril@47: destPos=p; insilmaril@47: initVector(); insilmaril@47: } insilmaril@47: insilmaril@47: QPointF AnimPoint::getDest() insilmaril@47: { insilmaril@47: return destPos; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::setTicks (const uint &t) insilmaril@47: { insilmaril@47: animTicks=t; insilmaril@47: } insilmaril@47: insilmaril@47: uint AnimPoint::getTicks() insilmaril@47: { insilmaril@47: return animTicks; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::setAnimated(bool b) insilmaril@47: { insilmaril@47: animated=b; insilmaril@47: if (b) n=0; insilmaril@47: } insilmaril@47: insilmaril@47: bool AnimPoint::isAnimated() insilmaril@47: { insilmaril@47: return animated; insilmaril@47: } insilmaril@47: insilmaril@47: bool AnimPoint::animate() insilmaril@47: { insilmaril@47: if (!animated) return animated; insilmaril@47: n++; insilmaril@47: if (n>animTicks) insilmaril@47: { insilmaril@47: vector=QPointF(0,0); insilmaril@47: animated=false; insilmaril@47: return animated; insilmaril@47: } insilmaril@47: insilmaril@47: // Some math slow down the movement insilmaril@47: qreal f=1-n/animTicks; insilmaril@47: qreal ff=1-f*f*f; insilmaril@47: setX (startPos.x() + vector.x()*ff ); insilmaril@47: setY (startPos.y() + vector.y()*ff ); insilmaril@47: insilmaril@47: return animated; insilmaril@47: } insilmaril@47: insilmaril@47: void AnimPoint::initVector() insilmaril@47: { insilmaril@47: vector.setX (destPos.x()-startPos.x() ); insilmaril@47: vector.setY (destPos.y()-startPos.y() ); insilmaril@47: } insilmaril@47: insilmaril@47: