Разделитель, выбор названия и прочие мелочи

Добавлен , опубликован
Итак, очередное обновление, в котором вы можете наблюдать новое здание - Разделитель. Кроме того, вы можете узнать первое название игры, пока рабочее, но перспективное, а также узнать о прочих мелочах, имевших место во время разработки.

Начнем непосредственно с видеодемонстрации.
Теперь по пунктам:
  • Добавлен Разделитель - здание, делящее луч на два (после апгреда - три) луча, деля интенсивность изначального луча между ними. Лучи всегда под одинаковым углом (иначе реализация сильно бы осложнилась).
  • Игре наконец-то подобрано название. Оно еще не окончательное, но шанс, что к концу разработки оно поменяется, очень мал. Отныне игра носит название Refraction. Прошу любить и жаловать.
  • Появилась возможность приближать и отдалять камеру. При чем, чувствительность перемещения камеры меняется непосредственно с расстоянием.
  • Заменен интерфейс, правда, теперь он состоит из одного курсора и отладочного текста. Тем не менее, именно к нему я буду лепить необходимые элементы.
  • Значительно переработан базовый код башен, в ходе чего устранен серьезный баг, не замеченный мною ранее.

Технические подробности

Решенные проблемы

  • Именно об этом баге я упоминал в последнем пункте описания нововведений. Вот в чем полагалась суть бага. При повороте башни для луча рассчитывалось положение выходного луча, а также то, попал ли он в какой-то объект или нет. Сюда входила и ситуация, попадает ли луч на другую башню или нет. Раньше я как проверял - если в кого-то попал, значит, просчитать влияние на этот объект отдельной функцией (сюда входило обновление информации о питающем луче башни, в которую луч непосредственно попадал), если не попал - проверяем, питал ли он перед этим какую-то башню, и если питал, то сделать так, чтобы он ее не питал. На деле же оказалось, что такое условие пропускает ситуацию, когда луч перескакивает с одной башни на другую. В итоге, если луч попадал с одной башни на другую, срабатывало условие "луч в кого-то попал", и этот луч все равно считался питающим для первой башни, пусть уже и не попадал в нее. Когда же, после длительного дебага я понял в чем проблема, она была решена довольно просто. Вместо связки "если-иначе" теперь используются два условия "если". Первое срабатывает, если луч ни с чем не столкнулся, или же столкнулся с объектом, не являющимся башней, которую он питал, и таком случае, в этой башни обнуляется питающий луч. А вот уже второе проверяет непосредственно сам объект, с которым столкнулся луч, и запускает влияние на этот объект.
Больше багов, по сути, нет. Проблемы же нерешенные пока не изменились, поэтому их я писать не буду.

Лирическое отступление

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

Ну что же, теперь я буду приниматься за следующую башню, которая будет соединять несколько лучей в один. А пока жду ваших отзывов.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
0
ScorpioT1000, эта башня, в принципе, просто перенаправляет луч по необходимому направлению. Если тебе от этого станет легче, можешь считать, что там внутри есть особая оптическая система, которая направляет любой полученный луч именно по направлению башни.
0
38
0
ну в общем, я так понял что тебе влом над этим работать =)
0
26
0
ScorpioT1000, дотошность - это не мое)) Тем более, мне еще минимум над двумя башнями работать.
0
29
0
ScorpioT1000, lentinant, там система, которая автоматически поворачивает нужные линзы, призмы, зеркала и прочии оптические штучки, так как надо.
0
38
0
alexprey, суть чтобы юзер сам головой подумал как лучше)
0
26
0
ScorpioT1000, думаю, когда будут переть толпы монстров, и ему нужно будет корректно расставить углы лучей, ему будет не до погрешности на угол преломления.
1
34
1
Идея лучей мне лично очень интересна. Я даже как то хотел сделать карту в sc2 по этой тематики. Суть было в многократных (до 32х раз) отражениях луча от поверхностей. Сами поверхности что-то вроде зеркал, а луч является энергией. Суть была что бы аккуратно применять луч (не допустив того что бы он попал в героя, иначе теряются хелзы) но при попадании по разным энерго элементов он способен открывать проходы, убивать врагов и решать прочие задачи.
Даже пришлось написать оптимизированную библиотеку лучей xgm.ru/p/sc2/lightning-galaxy
Правда на этой идеи все и кончилось )
0
26
0
Hellcore, ну, мне почему-то показалось, что сделать на этой основе ТД будет хорошей идеей. Насчет аккуратности - есть идея сделать расширенные настройки сложности, в которых, в том числе, была бы возможность включить урон по собственным зданиям, если луч попадает в "мертвую зону" (часть боковой поверхности башни, на которой нет принимающих элементов).

Уже готов сумматор, но для демонстрации его функционала лучше всего использовать не тестовые лучи, а источники частиц, с которыми я пока не разобрался. Так что, думаю, новость будет уже совмещена с усилителем.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.