Пятничные факты #337 – Интерфейс статистики и отладчик модов

Поделиться

опубликовал Klonan, Oxyd, Justarandomgeek

Интерфейс статистики Klonan, Oxyd

Графический интерфейс статистики (статистика электрических сетей, производственная статистика и т. Д.) Является одним из тех графических интерфейсов, которые были в игре в течение очень долгого времени, и их функциональные возможности были разумно усовершенствованы в течение многих лет. Это было не так давно, когда Twinsen добавил выделение на графиках.

Учитывая это, а также относительно короткие сроки выпуска версии 1.0, обновление графического интерфейса статистики действительно было просто обновлением стиля, без каких-либо новых функций или переписывания сложной логики. Oxyd проделал большую часть работы, поэтому мы рады показать некоторые реальные игровые скриншоты того, как он выглядит:

Заметное изменение в электрической статистике заключается в том, что заряд Аккумулятор /Удовлетворенность / Производство  находится рядом друг с другом в одном ряду, в отличие от каждого в отдельном ряду. Метка для точного количества также была перемещена внутрь индикатора выполнения, который сам по себе намного толще.

Производственная статистика практически одинакова по функциональности. Одна новая кнопка, которую вы можете заметить, это кнопка поиска.

Однако есть некоторые проблемы с функцией поиска. Как видите, кадры производства и потребления имеют различное поле поиска, независимое друг от друга. Основная проблема заключается в нажатии клавиш CTRL + F для выполнения обычного поиска: как узнать, какой кадр открыть? Конечно, это может привести к различным решениям, таким как использование цикла для фокусировки поиска, при котором второй раз, когда вы нажимаете CTRL + F, фокус попадает на другой кадр. Или оба поля поиска открываются одновременно, но фокус только на одном. Или только один кадр получает фокус, а другой работает только при нажатии кнопки. Но давайте посмотрим правде в глаза, эти «решения» не являются твердыми вообще и создают несогласованность в основной конструкции.

Чтобы решить эту проблему, мы решили, что самый простой способ – использовать только одно окно поиска в заголовке панели. Это новое местоположение работает как общая функция для всей панели. Один поиск дает 2 результата, по одному на каждый кадр. Это решение используется в новом окне персонажа, которое скоро появится, что делает его совместимым со всем дизайном GUI.

Вы также можете видеть, что мы воспользовались этой возможностью, чтобы интегрировать статистику Kill с остальными, вместо того, чтобы создавать собственное окно со своей горячей клавишей.

Графический интерфейс статистики будет нуждаться в нескольких изменениях и корректировках, прежде чем он будет готов к выпуску, но, если не произойдет ничего неожиданного, вы можете ожидать его выхода в скором времени.

Обзор сообщества –  Отладчик модов justarandomgeek

Эта тема является гостевым сообщением нашего участника сообщества и разработчика модов justarandomgeek.

Исторически при разработке модов Factorio вам просто нужно было написать код и попробовать его, пока вы не получите одно из сообщений:

Затем вы возвращаетесь и находите это место в своем коде и пытаетесь выяснить, что пошло не так. Если ошибка особенно сбивает с толку, вы начинаете разбрызгивать log () или game.print (), чтобы попытаться выяснить, что происходит. И, конечно, когда вы обнаружите проблему, вы неизбежно забудете очистить все это, и теперь вы навечно спамите в журнале или чате.

Последние несколько месяцев я работал над отладчиком, чтобы улучшить это. Первым шагом было потратить некоторое время на библиотеку отладки Lua и протокол адаптера отладки VSCode, чтобы познакомить их друг с другом. Factorio не дает мне много опций, но функций Lua debug.debug () и print () достаточно для взаимодействия с (обычно невидимой) консолью.

VSCode может запускать Factorio и присоединяться к этой консоли, чтобы вводить команды, необходимые для чтения и манипулирования состоянием работающего кода. Это дает нам интерфейс отладчика VSCode со всеми встроенными инструментами для отображения переменных, установки точек останова и пошагового выполнения кода. Оборачивая некоторые API-интерфейсы игры, такие как remote.call () и большую часть скрипта, чтобы добавить немного дополнительной специальной обработки, мы получаем красивые метки для обработчиков событий в стеке вызовов и первую версию break-on-exception для случаев, когда что-то идет не так , Я даже создал несколько хороших подробных представлений переменных для наиболее распространенных объектов LuaObject:

Но есть одна загвоздка, и она важна: из-за того, как работают моды песочниц Factorio, отладчик (который сам по себе является модом) не может на самом деле добраться до вашего мода для установки всех этих хуков! Первое решение этого – просто добавить строку для загрузки отладчика, но это возвращает нас к тому, с чего мы начали с log () – вы добавляете что-то для отладки и забываете удалить это.

Чтобы решить эту проблему, нам нужно немного помощи от API, чтобы мод мог подключить любой другой мод. К сожалению, этот уровень хуков слишком силен, чтобы быть доступным для модов, поэтому он не может быть добавлен к обычному API модов (он позволяет довольно просто нарушить почти все предположения о жизненном цикле данных и изолированной среде модов) , После некоторого обсуждения с Rseding мы в конечном итоге пришли к Instrument Mode (выпущен с 0.18.10), специальному режиму, который позволяет выбранному моду перехватывать все экземпляры Lua, созданные Factorio, за счет отключения многопользовательской игры и одновременного разрешения только одного инструмента. , Это также обеспечивает ловушку для лучшей версии Break-On-exception.

Это позволяет нам полностью перейти к богатому опыту отладчика: когда вы запускаете под отладчиком, все загруженные моды автоматически получают отладочные хуки, установленные для сеанса (но не навсегда), и вы можете пройтись по коду и проверить все свои переменные!

Во время разработки инструментов я также добавил несколько маркеров для файлов локализации и журнала изменений и проверки для журналов изменений:

И, конечно же, это игра об автоматизации, поэтому нам также нужна некоторая автоматизация создания модов

Мододелы, пожалуйста, попробуйте и дайте мне знать, что вы думаете!


Поделиться

Комментарии: