Всем привет! Меня зовут Назар, и я занимаюсь разработкой собственного игрового проекта под названием Sivers. Это RPG-рогалик в векторном стиле, где вам предстоит сражаться с монстрами, используя систему строительства и заклинания.
Сегодня у меня был действительно насыщенный рабочий день — я добавил в игру новую пассивную способность: рикошет.
Когда наш герой попадает в врага, пуля отскакивает и летит к другому врагу. Рикошет, как и другие заклинания, также стакается с аурами, такими как вампиризм и т.д.
Что было самым сложным в процессе разработки данной пассивной способности?
Самым сложным оказалось определить врага и развернуть пулю в его сторону. С одной стороны, это не кажется сложным, но с другой, у меня возникла ошибка при поиске новой цели. Первоначальная цель выбиралась как следующая, в результате чего пуля рикошетила от себя же к себе же.
Если вы программист и подумали, что достаточно просто задать условие, чтобы не выбирать уже выбранный объект, вы абсолютно правы. Однако реализовать это было намного сложнее, чем кажется на первый взгляд. При написании такого условия пуля рикошетилась от объекта, и как только выходила за пределы вражеского юнита, разворачивалась и летела обратно к нему.
В итоге мне удалось исправить это, переписав метод с десятой попытки. Кроме того, нужно было рассчитывать угол, под которым пуля должна лететь. Если речь идет о обычной пуле, то всем понятно, что она вылетает из точки А в точку Б. Но если говорить о самонаводящейся пуле, которую я использую для рикошета, ситуация сложнее. В таком алгоритме есть точка, куда должна прилететь наша пуля, но точка, с которой она вылетела, не может быть использована для измерения угла.
Потому что враг движется, а точка прилета в таком случае должна оставаться статичной. Поэтому мне пришлось разработать алгоритм для определения угла между точкой рикошета и точкой прилета пули.
В общем, день выдался насыщенным!
Надеюсь, вы не устали от этого рассказа. Если у вас есть какие-либо вопросы, идеи или предложения, жду вас в комментариях!
Спасибо всем, и до завтра!