Zkillboard 3D BR Viewer v1.0: Погружение в битвы EVE Online

Откройте для себя новый инструмент для визуализации боев в EVE Online с Zkillboard 3D BR Viewer. Узнайте, как использовать API EVE для создания захватывающих 3D

Zkillboard 3D BR Viewer v1.0: Погружение в битвы EVE Online

Привет, друзья! На днях я решил попробовать свои силы в разработке небольшого инструмента, который позволяет визуализировать бои в EVE Online. Всё началось с простого желания создать 3D-графический движок на Python, следуя учебнику. И тут я вспомнил о Zkillboard — источнике, который содержит массу данных о потерях кораблей, и о том, что ESI API может предоставить координаты этих потерь. Так возникла идея объединить эти два элемента и создать 3D-репрезентацию боёв.

Хочу отдать должное своему старому корпорату и другу Akee, который когда-то создал более продвинутую версию этого инструмента на C++. Это вдохновило меня на создание своей вариации. Если вам интересно, вот код на GitHub. Сразу отмечу, что моя версия работает довольно медленно. Если бы я хотел сделать это правильно, я бы выбрал другой движок и, возможно, не использовал Python, который, как вы знаете, не самый быстрый.

Теперь давайте разберем, как работает этот инструмент. Я собрал несколько шагов, которые проходят в процессе создания 3D-сцены:

  1. Открывается окно Tkinter, где можно ввести BR с Zkillboard (не сохранённый BR).
  2. Вы можете задать множитель, чтобы увеличить или уменьшить размеры кубов-обломков.
  3. Есть опция выбора между рендерингом кораблей или портретов персонажей, которые были убиты.
  4. На основе отчета о битве инструмент обращается к API Zkillboard, получая список потерь.
  5. Для каждой потери сохраняется killID и hash. С помощью этих данных обращаемся к ESI API, чтобы получить координаты каждой потери и другую информацию, такую как имя персонажа, тип корабля и его стоимость.
  6. Эти данные затем обрабатываются и очищаются перед сохранением в специальный класс.
  7. В зависимости от выбора (корабль или персонаж) загружаются соответствующие текстуры.
  8. Создаются текстуры OpenGL на основе загруженных PNG и добавляются в графический движок.
  9. Обломки масштабируются на основе заранее определённых размеров, которые я добавил в инструмент.
  10. Наконец, все эти элементы объединяются в функцию build_scene, которая добавляет кубы в сцену, выставляя их в нужные позиции и масштабе.

Этот процесс оказался довольно увлекательным. Один из вопросов, который мне задавали, - это "Как же вы получаете позиции?". Как я уже упоминал, EVE предоставляет очень большие координаты, например, 10111235521 или -512300499212. Чтобы получить более удобное представление, я применяю модуль 10000 к этим значениям. Это позволяет получить локальные позиции на сетке, а не в системе в целом. Затем я уменьшаю эти значения, деля их на 1000, чтобы сделать их более наглядными в контексте игры.

Надеюсь, вы получите удовольствие от использования этого инструмента. Если у вас есть идеи по улучшению или вы найдёте баги, буду рад, если вы отправите pull request. И вот ещё одна интересная находка: если в функции масштабирования задать отрицательное значение, то получите кубы внутри-наружу! Это выглядит довольно забавно и позволяет увидеть, кто погиб внутри другого корабля (например, капсула внутри большого корабля).

Если вам понравился мой проект, подписывайтесь на мой Telegram, а также присоединяйтесь к моим стримам на Twitch и YouTube. Буду рад видеть вас на своих трансляциях!

Всех вас, обнял, приподнял - до хруста! =)