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