marikcool, а теперь я тебе открою секрет (как практик): в процедурном языке можно написать тот же самый ОО-код, только члены класса станут членами структур типа FooStruct, а методы вместо Foo::DoSomething() будут выглядеть как Foo_DoSomething(FooStruct foo). Посмотри в код ВМ первокваки, там именно так и сделано. Ну, может, с той разницей, что вместо FooStruct foo там используется глобальная self, вовремя подменяемая нужным представителем структуры. По строчкам ты сэкономишь даже штуки три на класс. И это будет хорошо читаться и расширятся.
ООП - это не ключевые слова, а методология моделирования.
А то, что плагины под КС наговнокодены без ООП, нисколько не означает, что с ООП они были бы менее говнокодны. Дай дураку, как говорится.
Первым делом я перенесу в серверную ВМ - pmove, а в клиентскую - тоже pmove и целиком ev_hldm. Это безо всяких классов, чистый процедурный код. А дальше поглядим.
Везде, во всех играх без исключения игрок и NPC ходят по ступенькам именно так. Ну то есть может со стороны оно выглядит иначе, но в действительности это рывок с небольшим движением вперед.
А для визуализации используется инверсная кинематика, например.
Вот бы Ксерокс взял и прикрутил инверсную кинематику в халфу.
Сам же хвастался, ему ничего не сложно. Подумаешь мовевитч!
А вот инверсная кинематика - да!
Не колоизируют, а выполняют обратное движение - от самого дальнего ребенка в иерархии движение передается родителю, с учётом лимитов движения всех костей в иерархии. Вот допустим нога становится на ступеньку - мы двигаем туда только стопу, а солвер сам рассчитывает как именно следует пододвинуть остальные кости. Поэтому кинематика и называется инверсной.
Ну да. Под "колоизируют" я имел в виду сталкиваются с препятствием.
А то под инверсной кинематикой можно понимать не только такую фичу, а ещё и в целом систему анимации на основе следования за маркерами, как в 3д-пакетах.
Дядя Миша
Спорить не буду - ничего сложного в этом нет.
Но мне это пока не интересно.
Может, потом и прикручу.
Добавлено 15-03-2013 в 22:29:
Только непонятно, кто будет в модельки соответствующую инфу заносить..
Добавлено 15-03-2013 в 22:31:
Цитата:
Дядя Миша писал: А вот инверсная кинематика - да!
Кстати, готов спорить на твою таёту, что народ не заметит никакой инверсной кинематики в халфе.
Я, например, в хл2 её ни разу не видел, хотя судя по коду - она там есть.
Видимо, очень хитро спрятана.
XaeroX писал: Я, например, в хл2 её ни разу не видел, хотя судя по коду - она там есть.
Ну здравствуйте. Ты видел как там NPC ставят ноги на ступеньки?
Причём с учётом высоты этих ступенек. А видел как в начале хл2 тётка держится пальцами за текстурную сетку-рабицу?
А как эти же NPC оружие с пола подбирают?
А ты говоришь - нету.
Дядя Миша писал: Ну здравствуйте. Ты видел как там NPC ставят ноги на ступеньки?
В том-то и дело, что ни разу не обратил внимания.
А тётка, что держится за сетку - это ж обычная анимация, не?
Добавлено 15-03-2013 в 23:36:
Цитата:
Дядя Миша писал: А ты говоришь - нету.
Где это я сказал - нету? Я сказал, что я её там не видел. В общем, это, имхо, какая-то мелочь. Если сделать анимацию, где непись переставляет ноги, чуть сгибая в колене, и двигать его вдоль лестницы плавно, а не резко, как делает SV_movestep, то выглядеть будет почти также, а расчётов на три порядка меньше.
XaeroX писал: А тётка, что держится за сетку - это ж обычная анимация, не?
Я бы так не сказал ))
Цитата:
XaeroX писал: Если сделать анимацию, где непись переставляет ноги, чуть сгибая в колене
Но веть и ступеньки-та разной высоты бывают! Кому же понравится что монстер утопает в полу?
К тому же, если ты сделаешь инверсную кинематику, можно будет делать игры про прокур, как Mirrors Edge - серъезный аргумент, чтобы уйти с ксаша
Вы про то, чтобы моделька двигалась реалистично, и движение совпадало с анимацией? Если да то это делается не так и трудно. Для каждой ноги надо хранить её скорость (а точней вектор скорости не ноги, а подошвы). А дальше надо сделать трение. Если что - у меня в физ. движке сделано трение, можно подсмотреть, файл solver.cpp (я трение комментарием // friction выделил). Если там сложно, а там сложно потому что я warmstarting юзаю, то лучше посмотреть на геймдеве статью суслика "Солверы физических движков". Не знаю на сколько моя идея правильная, но если бы это делал я, то сделал бы именно так