Карта, демонстрирующая реализацию кастомного управления для варкрафта.
Тема
20 4.6K
30
ZlaYa1000, отрефакторю и закину обратно, да. Сейчас душа лежит героя допилить =)
35
так назад верни, быстро)
а гора комментов потому что наработка в аду с точки зрения навигации
вот невнятные модельки сотнями комментируют
13
окей, буду текстом код закидывать
Вполне здравая мысль же, кидай под кат код. Считаю это внегласным правилом.
Алсо, у тебя файл убежал.
29
Просто не осталось здесь таких же азартный гуру jass кода, которым не лень скачать и посмотреть что там внутри.
30
Недавно пообщался с одним чуваком, и в разговоре выяснилось, что его зовут Гора Комментов. Больше как-то не связывались, и я хз, где он сейчас, но уверен, что на этом сайте его найти не получится при всём желании
Самый эффективный способ найти степень двойки.
Делал для себя, делюсь со всеми.
Тема
1 971
30
В Си это же делается ещё быстрее и без массивов через побитовый сдвиг влево.
Небольшая наработка, реализующая достаточно высокоэффективную одновременную обработку множества снарядов, движущихся с соблюдением основных законов кинематики.
Тема
20 4.4K
30
обработка объектов идет в PhysObj
В нём писывается логика движения, однако свой .update() он самостоятельно никаким образом не вызывает.

Кстати, технически вектор "impulse" выражает m*v, поскольку в карте-примере из поста масса фактически не имеет значения (видимо, просто забыл удалить её из кода) и её хранение отдельным используемым скаляром приведёт только к увеличению числа рассчётов; при увеличении функционала, например, при добавлении взаимных столкновений, массу нужно будет вынести из вектора в отдельный скаляр, а вектор назвать "velocity". Показанная карта-пример, конечно, не лучшая из возможных, но, на мой взгляд, вполне адекватна (если оставить за скобками утверждение о полноценности модели в ней).

Попробую популярно пояснить лежащий в основе архитектуры подход.
Физический объект является описанием поведения игрового объекта (behavior; VisObj и DmgObj - тоже behavior по сути), он содержит в себе только те данные, которые касаются непосредственно связанного с физикой поведения игрового объекта (определение и движение объекта в пространстве), и никаких более. Этими данными являются: радиус-вектор, вектор импульса, радиус столкновений и логика движения. Последнюю в теории можно вынести из объекта, но тогда система несколько потеряет в модульности. Кроме того, хранить логику движения внутри метода полезно тем, что в случае её отсутствия/отключения у какого-либо объекта код движения даже читаться не будет.
Как абсолютно верно заметил Doc, результаты движения должны обрабатываться не в движимом теле или его компоненте, а в движущей системе, так как в результате перемещения игрового объекта он может вступить в те или иные взаимодействия с другими сущностями, обладающими физическим компонентом. Их сам по себе объект обработать не способен и не должен быть способен, он не "божественный".
Сам игровой объект - оболочка, через которую связаны все его компоненты. Система обработки ("стак" в GameField) обращается к нему с командой на апдейт, все взаимодействия между компонентами производятся в нём и нигде более.

Замечание про именование как причину ошибки было хорошим, однако в целом советую более вдумчиво анализировать архитектуру перед тем, как высказаться о её несостоятельности или неверном распределении функциональной нагрузки по её элементам.

Оптимизация это вообще дело последнее, которое выполняется уже после реализации всего, что хотели реализовать, поскольку добавлять что-нибудь еще к оптимизированному коду - это чистое мучение.
В карте-примере отсутствует преждевременная оптимизация. Ощущение её наличия могло возникнуть из-за того, что данные, которые никак не задействованы в логике примера, были удалены из неё целиком. Массу вот только пропустил.