function CTransAccel(a_ioptDistanceToTravel, a_ioptTimeToTravel)
{ var m_iDistanceToTravel = (a_ioptDistanceToTravel > 0) ? a_ioptDistanceToTravel : 0; this.m_iDistanceToTravel = m_iDistanceToTravel; var m_iAccelInterval = 10; this.m_iAccelInterval = m_iAccelInterval; var m_iTimeToTravel = (a_ioptTimeToTravel > 0) ? a_ioptTimeToTravel : 500; this.m_iTimeToTravel = m_iTimeToTravel; var m_iDistanceTraveled = null; this.m_iDistanceTraveled = m_iDistanceTraveled; var m_iAccelConstant = m_iDistanceToTravel / m_iTimeToTravel / m_iTimeToTravel; var m_iAccelIntervalID = -1; var m_iStartTravelTime = null; var m_bArrived = null; function isDone()
{ return m_bArrived;}
this.isDone = isDone; function run(a_optiNewDistanceToTravel, a_optiTimeToTravel)
{ if(a_optiNewDistanceToTravel)
{ m_iDistanceToTravel = a_optiNewDistanceToTravel;}
if(a_optiTimeToTravel && a_optiTimeToTravel > 0)
{ m_iTimeToTravel = a_optiTimeToTravel;}
m_iAccelConstant = m_iDistanceToTravel / m_iTimeToTravel / m_iTimeToTravel; m_bArrived = false; m_iStartTravelTime = (new Date()).getTime();}
this.run = run; function getDistanceTraveled()
{ var iElapsedTravelTime = (new Date()).getTime() - m_iStartTravelTime; var iTimeLeft; if(m_iTimeToTravel >= iElapsedTravelTime)
{ iTimeLeft = m_iTimeToTravel - iElapsedTravelTime
}
else
{ iTimeLeft = 0;}
var curve = Math.round(Math.pow(iTimeLeft, 2) * m_iAccelConstant); m_iDistanceTraveled = m_iDistanceToTravel - curve; if(m_iDistanceTraveled >= m_iDistanceToTravel)
{ m_bArrived = true; return m_iDistanceToTravel;}
return m_iDistanceTraveled;}
this.getDistanceTraveled = getDistanceTraveled;}
