Ошибка в логике к 3-му пункту? Метод CanUserMove() - в самом низу. Перепроверил, вроде бы всё в порядке..