Вопрос: как вы определяете, есть ли неделя в 2012 году или в 2013 году? Ваше предположение, я думаю, состоит в том, что с 6 дней недели в 2013 году эта неделя должна быть отмечена как первая неделя 2013 года.
Не уверен, что это правильный путь. Эта неделя началась в 2012 году (понедельник 31 декабря), поэтому она должна быть отмечена как последняя неделя 2012 года, поэтому она должна быть 53-м 2012 года. Первая неделя 2013 года должна начаться в понедельник 7-м.
Теперь вы можете обработать конкретный случай крайних недель (первая и последняя неделя года) с использованием информации дня недели. Все зависит от вашей логики.
Вы не хотите, чтобы xDirection и yDirection были только 1 или -1. Они должны быть пропорциональны разнице между положением мыши и прямоугольника.
Отредактировано с учетом комментариев.
function changeDir()
{
xDiff = mouseXCoord - x;
yDiff = mouseYCoord - y;
// Scale the smallest diff to be 1 (or less)
minDiff = max(min(xDiff, yDiff), 1);
deltaX = xDiff / minDiff;
deltaY = yDiff / minDiff;
// Scale the deltas to limit the largest to mainThrust
maxDelta = max(max(deltaX, deltaY), 1)
if (maxDelta>mainThrust)
{
deltaX = deltaX * mainThrust / maxDelta;
deltaY = deltaY * mainThrust / maxDelta;
}
if(mouseXCoord-5<x && x<mouseXCoord+5)
{
xDirection = 0;//stop moving if close to mouse
}
else
{
xDirection = deltaX;
}
if(mouseYCoord-5<y && y<mouseYCoord+5)
{
yDirection = 0;//stop moving if close to mouse
}
else
{
yDirection = deltaY;
}
}
Вместо того, чтобы иметь xDirection
и yDirection
(синус и косинус вашего направления, фактически), резко определенные как 0, 1, или -1, вам нужно более точно определить направление, в котором вы должны в конечном итоге двигаться, и вспомнить, в каком направлении вы двигались в последний раз и сколько "угловых шагов" вы сделали, чтобы изменить направление от того, что было, к тому, что должно быть.
Сколько таких угловых шагов вы хотите сделать для изменения направления, и должен ли каждый шаг быть одинакового размера или зависеть от того, как быстро вы двигаетесь и/или как резко вы поворачиваете и т.д., это то, что вы должны адаптировать методом проб и ошибок, поскольку, похоже, что вы в основном стремитесь к тому, чтобы все "выглядело" правильно, поэтому трудно дать точный рецепт (для того, что выглядит правильно для вас; -).