#include "client/math/Ray.h"
#include "client/utils/Utils.h"

Ray::Ray() : lastLengthAngle(0), lengthAngle(0), lastWidthAngle(0), widthAngle(0) {
}

void Ray::store() {
    lastPosition = position;
    lastLengthAngle = lengthAngle;
    lastWidthAngle = widthAngle;
}

void Ray::set(const Vector& position, float lengthAngle, float widthAngle) {
    Ray::position = position;
    Ray::lengthAngle = lengthAngle;
    Ray::widthAngle = widthAngle;
}

Vector Ray::getPosition(float lag) const {
    Vector pos(lastPosition);
    pos.addMul(position, lag).addMul(lastPosition, -lag);
    return pos;
}

Vector Ray::getDirection(float lag) const {
    Vector direction;
    direction.setAngles(interpolate(lag, lastLengthAngle, lengthAngle), interpolate(lag, lastWidthAngle, widthAngle));
    return direction;
}