Меня интересует, как внутри организованы игры серии Worms
.
Для упрощения, я рассматриваю Worms World Party
и Worms Armageddon
. Найти сакральные коды, чтобы хотя бы одним глазком посмотреть на них, мне не удалось.
Опытным путем я разобрался с тем, как реализована механика коллизий и взрывов, навигация червя по растровому ландшафту и даже планирование действий AI системой. Но есть и то, над чем я очень плотно думаю уже довольно долго.
А именно: как объекты взаимодействуют между собой?
Ведь типов объектов довольно много, они разные, но в тоже время и очень похожи. Например, на все действует баллистика (кроме пуль). Черви, гранаты, мины - ведут себя одинаково при воздействии на них импульса. В то же время, мины взрываются при контакте с червями, и только при контакте с ними. Ящики при контакте с червями что-то им дают, и так далее.
Все эти взаимодействия происходят постоянно.
Я попытался построить такое взаимодействие при помощи паттерна Entity-Component-System
, хотя и сильно сомневаюсь, что в 2001 году такое использовали. Даже элементарная система баллистики превратилась в лапшу, которую не получается упростить. Постоянно возникают неудобные моменты при попытке разделить сущности на компоненты, а системы на подсистемы.
В теории это конечно хорошо, когда объект представлен набором компонентов, которыми можно управлять прямо в рантайме. Проблема в том, что при использовании ECS
(вместо ООП
) зависимости и логика никуда не исчезают, а только размалываются на более мелкие части, которые расплываются во все стороны и перепутываются.
Безусловно, если ECS
уже реализована, то это очень удобно для дизайнера, который может взять компоненты A
, B
и C
, и сделать собираемый ящик, гранату с запалом или взрывающуюся бочку с напалмом. Но программировать это невероятно тяжело, потому что приходится мыслить совсем другими категориями.
Затем я попытался построить взаимодействие между объектами при помощи различных ООП
подходов. Проблемы тоже были.
В общем, я очень хочу понять, как все это делается правильно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Всем приветВообщем задачка нужно сделать маску как на https://www
У меня есть коллекция классов с полями