Модульные пушки (again, I believe it's the last time)

Я некоторое время назад снова вернулся к этой идее и в свободное время пилил механику, с помощью которой модульные стволы можно пилить и пилить независимо друг от друга.
Теперь немного о механике:
Каждый ствол состоит из модулей, каждый из которых выполняет ту функцию для которой создан изолированно от других модулей. Единственное взаимодействие между модулями, это то какой модуль к какому прикреплен и какие модули можно прикреплять к этому модулю.
ПРИЧИНА зачем я сделал проверку на возможность прикреплять модули, это модульные спрайты, которые могут крепится друг к другу по точкам соединений.

Модуль:
Механика модуля и его функция в процессе стрельбы, выражена с помощью компонент, которые выполняют свои функции.
Самый первый модуль в цепочке, который активировал выстрел, создает специальный датум, который является процессом стрельбы и он используется на протяжении всего выстрела из оружия.

Компонента:
Все компоненты получают первым параметром модуль, чтобы иметь возможность взаимодействовать с ним.
Компоненты бывают самых разных видов и они не ограничены этими типами:
data - информационная компонента, когда до нее доходит очередь в цепочке, то при своей активации вносит данные в кеш стрельбы, если же такая же компонента уже помещала свои данные в кеш, то вызывается функция на изменение данных этой компоненты, передавая новую компоненту в качестве аргумента. Внутри функции же данные преобразуются (по стандарту старое значение просто заменяется новым, но для всяких модификаторов оно прибавляет значение или его отнимает, зависит от контекста и это довольно гибко)
Дальнейшие компоненты, могут брать данные из кеша для проверок или функций. Кеш находится в датуме процесса стрельбы.

check - проверочная компонента, принимает в себя компоненту успеха и компоненту провала (могут быть null). При активации производит проверку внутри себя, где при успехе, следующей компонентой внедряется компонента успеха, а при провале компонента провала (при null ничего не внедряется)

proc - функциональная компонента, которая выполняет какую нибудь функцию. Там может быть все что угодно и как и любой компонент так же может внедрять новые компоненты в цепочку. Особенности у этого прока нет кроме того что это синтаксический сахар чтобы разделить проки от других компонент

awaiter - ожидающая компонента, принимает в себя ожидающую компоненту, которая будет внедрена в цепочку сразу после выполнения условия, проверяющая компонента (которая может быть совершенно любой, проком, информацией, но лучшее что можно запихнуть это все таки check), список сигналов которые может отправить проверяющая компонента и при получении которых ожидающая компонента внедряется в цепочку, и таймаут компонент который добавляется в цепочку когда вся цепочка прошла, все компоненты кончились, а условие не было выполнено. Ожидающая компонента после активации вызывается после каждой активации компоненты из цепочки и делает проверку, при успехе помещает следующим компонентом компоненту при успехе.

В качестве примера работы цепочки из 4-х модулей (рукоять, патронник, магазин и ствол) предоставлю эту картинку, где расписан порядок активаций:
Успешный выстрел:

Выстрел где магазин не вернул патрон:

Так вот для чего была создана темка, во первых мне нужно знать нужно ли это продолжать делать и нужно ли это.

  • Да
  • Нет

0 голосов

Во вторых я бы хотел послушать идеи модулей или паниши за несовместимые модули или еще что то, пофантазируйте и распишите, мне будет интересно почитать и реализовать это.

Особенность механики, это абсолютная мобильность и возможность изменения логики прямо на ходу работы оружия в зависимости от компонент, поэтому тут все очень гибко.

7 лайков

Очень круто, на ролях сб нечего делать, так хоть с модулями покопаются, но из темки многое непотнятно, т.к очень много написал про код.Объясни это так скажем на соле.

1 лайк

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

5 лайков

Звучит хайпово, можно будет делать что-то веселое на вардене в эксту

Так же дополню, что компоненты которые внедряются в цепочку, могут быть так же цепочками

1 лайк

Пушки будут взрываться? В них можно будет пихать +- любые патроны? Двухстволка с патроном от птра??!?!?

ага, а потом из за несовпадения калибра ствол оружия ВЗРЫВАЕТСЯ НАХУЙ

5 лайков

а так, че бы и нет, только придумай как отдачу компенсировать

Тк, в этом и рофл, от части. Дуло двухстволки/обреза не может дать пороху прогореть и создать давление, мб даже без взрыва будет, но мощность в раз 10 упадет. :peka:

1 лайк

Не очень понятно

Это как будто ты кодишь последовательный алгоритм из этих компонент, нажатием на курок запускаешь алгоритм, и дальше что получится?..

Почему что-то, если получится рантайм.

компоненты будут активироваться и могут внедрять дополнительные компоненты в цепочку (точнее могут при необходимости, это динамический код получается)

Если запихнешь модули в РнД и пошатнёшь AEGun supremacy, то я - за.

8 лайков

Я сделаю возможность как минимум поставить подобный реактор на другие энерго стволы

1 лайк

Обрез плазменного дробовика для одноручной стрельбы

8 лайков

Да вообще нахуй вырежу это разделение на плазму и на другое энерго оружие

7 лайков

Гранатомет-пулемет 50 каллибра
изображение

3 лайка

Найдешь способ компенсировать отдачу, будет эффективно, иначе пизда

Предлагаю добавить модуль по типу “Скиппи” из киберпанка. Если добавишь еще возможно в него вселяться как в пИИ, то вообще кайф.

12 лайков

Точно, Вода, нам срочно нужны сошки на нож. Сошки на нож, сошки на нож…

7 лайков