kurtdn, Буду делать писать пример сразу давая значения с хэш таблицей
При получении приказа smart\move\attack (point) в хэш записываются данные
2. = ставим угол движения
3. = скорость движения ((скорость юнита + скорость юнита\2 ) \ 30 ) = получим нужную скорость скольжения для цикла длинной в 0.03 секунды.
4. = ставим текущее значение цикла
5. = сохраняем самого юнита
действия в самом цикле
выгружаем из хэша данные в локалку
скорость движения ставим на (количество из хэша - (количество из хэша \ 10 * значение цикла)
сначала проверяем разницу углов - поворот юнита и изначальный угол движения. Если есть разница - снижаем текущую скорость на небольшое количество, зависящее от самой разницы. Желательно не дать скорости упасть ниже 1.
далее - двигаем точку на полученное значени.
перемещаем юнита
пересохраняем все данные и подчищаем локалки.
Если делать все через таймеры и хэш - получится достаточно плавное скольжение при попытке повернуться.
Для того что бы обойти умножение скорости при тыканье в одну точку можно просто напросто сверять разницу углов (если разница меньше 50 - не запускать триггер).
вроде бы все.