Playermet, я подошел к самому главному - коду интеракции. Пока пытался понять твои изложения, мне в голову пришла такая мысль - что если вместо физики сдвигов сделать физику импульсов?
Ведь в Мк сущностям кроме позиции уже прописаны такие переменные, как скорость, ускорение...
Функция приложения импульса довольна проста - я уже написал ее, сейчас отлаживаю.
А сам механизм мне видится так - для простоты, считаем, что у вагона две оси, и нет тележек (тоесть, оси не вращаются по оси OY), итого, 4 колеса.
Колеса жестко связаны с вагоном, поэтому мы задаем четыре точки в локальных координатах (тоесть, относительно центра вагона), которые соответствуют колесам. Специальная функция (она тоже уже готова), конвертирует координаты из локальных в глобальные, учитывая координаты вагона и его угол поворота.
Также потребуется функция, или массив с координатами опорных точек (тех, о которых ты говорил). Т.е. мы задаем matrixID блока и направление его установки (эти данные у меня есть, и хранятся в TileEntity), a функция просчитывает и возвращает глобальные координаты двух опор, которые соответствуют этому блоку. Точнее, лучше пусть сразу возвращает вектор этих координат.
Потом, зная глобальные координаты колес и опор, мы для каждого выполняем примерно следующее -
Если блок под колесом - рельс{ 1[paste][/paste] через функцию, получаем координаты вектора опоры 2[paste][/paste] определяем скалярное произведение вектора опоры и вектора из первой точки опоры в точку колеса 3[paste][/paste] определяем угол наклона вектора опоры, прибавляем 90, и высчитываем направление полученного перпендикуляра 4[paste][/paste] прикладываем к вагону в точке колеса импульс, с направлением перпендикуляра (п3) и величиной скалярного произведения векторов (п2)} иначе{ хз что[paste][/paste] что-нибудь, чтобы сымитировать сход с рельс[paste][/paste][paste][/paste][paste][/paste]}
Что думаешь по этому поводу?
Всё вышесказанное является сугубо моим мнением и не обязательно правильным.