Предыдущая статья.
http://forum.ggeek.r...рос-к-разрабам/
Продолжаем строить движок.
Остановился на том, что надо уметь видеть.
Принцып достаточно простой. рисуется прямая с точки А к точке Б. Если отрезок прямой попал в площину квадрата, то проверяем его свойства и реагируем соответствующим образом.
И дальше в зависимости от того, что нам надо (смотреть, выстрелить, метнуть гранату, вальнуть с рпг или станкового оружия), меняется метод обработки квадратиков.
Самый простый метод увидеть врага - по линии прямой иследуя нужные крадраты убираем пустоты по оси z. Ограничение по высоте у нас - высота цели.
Одиночный выстел, например, с пистолета - расчет точки попадания (x,y,z); анализ преград; анализ попадания по цели.
Очереди - множественные одиночные выстрелы.
Бросок гранаты - расчет оптимальной траектории дуги, анализ попадания по цели. Сила броска (нужная скорость для построения кривой) бойца от растояния к цели будет разной и имеет свой минимум и максимум. Если цель находится на близком растоянии но за высокой преградой, то парабола будет у нас сильно изогнутой но если силы не хватит (скорость влияет на длинну траектории), то не достаточно изогнутой для попадания в цель. Оптимум - кратчайшая возможная траектория к цели.
Выстрел с РПГ - тоже что и бросок гранатой только скорость будет высокой и постоянной. А значит дуга не будет так сильно изгибаться.
Станковый гранатомет - скоростьвысокая и постоянная. Парабола будет очень сильно изогнута и как следствие количество мертвых зон будет уменьшаться чем ближе будет мишень но есть ограничения по углу выстрела снаряда.
Еще раз поговорим о вечной проблеме - дискретизация. Тут я ее уже назвал "оцыфровкой".
Эта проблема присуща у нас при перенесении обьектов на доску (ширина/длинна обьектов не кратная длинне клетки, наклоны, круги в площине xy, и т.д.). С высотой у нас все впрорядке. Ее точность равна точности базовой системы координат движка.
Как я говорил в начале первой статьи, все дело в балансе между производительностью (быстрота обработки) и точностью отображания.
Не буду расказывать о правилах построения кругов (области видимости, дальность оружия, радиусу взрывов), отрезков под углом (полет пуль). Нарисуйте любой овал или отрезок под углом в Paint-е и увеличте изображение.
Правильное построение кругов нам нужно для записи в свойство клетки - "под прицелом"
Правильное построение кривых для вычисления - "куда же попали?"
Бойцы (фигуры).
Это оцыфрованные обьекты со своими свойствами и методами. Свойства бойца не передаются свойствам клетки. Боец может только говорить клетке "Я есть" спрашивать у нее не "под прицелом" ли она. Изменять свойство клетки "под прицелом"
Может ходить. А это:
1. Поиск кратчайшего пути.
2. Само перемещение с изучением свойства клетки.
Сопровождающие записи.
Это обыкновенные детальные логи всего, что происходит.
Подытожу.
Движок теперь может строить доску любой формы в площине xy; создать "оцыфрованные" обьекты в плоскости xyz; делать виртуальные (проработанного оружия пока нет) выстрелы, броски в нужное место (пока что без влияния рандома и других параметров) и записывает все события.
Вот теперь етого уже достаточно, чтобы создать демонстрационную среду и смотреть все ли работает.
А как же визуализация?
А визуализация у нас есть со старого движка. Все, что было сделано (если сделано правильно) должно смотреться как тюниг автомобиля.
Вы же не меняете кузов автомобиля если заменили двигатель на более мощный который подошел по размерам.
Пока на этом все. Продолжение следует.
P.S. О сложном. Пока никаких сложностей не наблюдается. Все принцыпы имитации боя в 3д мире давно отточены. Все что нужно для создания игры есть в интеренете. Новичку остается лишь поискать.