TDS: теперь более развернуто

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

Сейчас я в основном занят тем, что наполняю игру контентом, то есть добавляю врагов и оружие. К счастью, это не очень сложно. Если вы помните мой последний конкурсный пост, то в нем я писал, что методика создания оружия у меня не очень гибкая, и хотелось бы сделать ее гибче. Так вот, это мне удалось, еще в прошлом году, причем решение данной проблемы — старый-добрый принцип «предпочитайте композицию наследованию» — лежало на самой поверхности, я только не совсем знал, как его применить.

Теперь же, вместо того, чтобы создавать подкласс пули каждый раз, когда мне от нее требуется какое-либо новое поведение, я просто создаю новый компонент и «прикрепляю» его к пуле. У пули же есть несколько массивов с компонентами: одни вызываются каждый кадр, другие — при столкновении, третьи — при смерти и т. д. Получается что-то вроде сущностно-компонентной архитектуры с шаблоном типа «наблюдатель». С такой системой, правда, тоже есть свои проблемы: например, это делает невозможным создание компонентов, реагирующих на какое-либо принципиально новое событие (например, получение урона) без модификации кода самих сущностей. Или осложняет клонирование компонентов, реагирующих на несколько событий одновременно.

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

Самонаводящиеся ракеты. Они используют два основных компонента: один кренит их то влево то вправо, делая траекторию «пьяной"(тот же компонент используют и враги, кстати), а второй, собственно, отвечает за самонаведение. За взрыв при попадании тоже отвечает компонент, причем он всего лишь выстреливает оружием, которое создает сам взрыв.

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

Оружие бывает двух типов: автоматическое, выпускающее пули с определенным интервалом, и «заряжающееся», заряд которого повышается с удержанием кнопки мыши. При отпускании мыши заряд передается коллбэк-функции, которая уже и спавнит пули. Можно заспавнить больше пуль. Или повысить их урон. Или вообще менять их на другие. Ограничением является лишь воображение.

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

Но я справлюсь. Скорее всего.