Как-то раз решил поиграть в игру Dwarf Fortress, показалось очень интересно. Это несмотря на неудобное управление, которое возможно будет переделано в новой реинкарнации игры. Но речь о другом: взаимодействие с игроком во многом опирается на сообщения, которые появляются на отдельном экране и приходится постоянно делать переключения на него и обратно в игру.
Для решения проблемы прибегают к сторонним утилитам, которые отображают лог игры в отдельном окне. Попробовав два варианта таких утилит (один включен в PeridexisErrant's Starter Pack), я пришел к выводу, что оба варианта не могут полностью устроить.
Вот то, что мне бы хотелось, но чего нет в каком-либо варианте или в обоих сразу.
До 4 отдельных окон для различных типов записей.
Гибкая настройка цветов и распределения типов записей по окнам.
Временное или постоянное скрытие каких-либо типов записей (желательно без перезапуска программы).
Настройка отображения имен: отображение или скрытие псевдонимов или профессий.
Указание относительного времени появления записей.
В результате, решил сделать свой вариант вьювера. Так как основным языком программирования сейчас для меня является Haskell, то стал искать возможности сделать утилиту именно на нем.
Для начала, надо было найти подходящий графический фреймворк для того, чтобы программа работала в тех же операционных системах, что и игра. После поиска вариантов, я остановился на Monomer.
Для парсинга логов я выбрал вариант с использованием Parsec. Хотя в Haskell разработке есть возможность использования регулярных выражений, я предпочел более функциональный подход (на самом деле, это почти прямое использование подхода конечных автоматов, только нет явных определений состояний автомата в программе).
Сейчас утилита уже в рабочем состоянии. Домашняя страница проекта на гитхаб.
Дистрибутив с исполняемым файлом для Windows. Дополнительная информация по использованию утилиты в install.txt. Ниже скриншоты экранов утилиты.
Комментарии (7)
Crazy22
28.04.2022 11:05-2Не совсем понятно зачем это здесь в таком виде: судя по URL это новость, но больше похоже на <я пиарюсь>. Насколько легитимно анонсировать свой проект как новость на Хабре?
Я понимаю, что до поста не дотягивает, нет интересной информации, процесса, деталей - но и как и новостью я бы назвал это с натяжкой
FeNUMe
За старания конечно +, но в статье на хабре хотелось бы видеть больше технических деталей, а не простой анонс свого "велосипеда".
igor720 Автор
Я планировал, что сначала дам простой анонс. А какой вопрос бы Вам хотелось, что бы я осветил более подробно? Из тех, что были применены: парсинг с Parsec, хаскел гуи с Monomer или линзы?
FeNUMe
Лично мне было бы интересно почитать про варианты гуя для Хаскеля, почему выбрали конкретно этот, возможно какие-то примеры работы с ним, минусы/плюсы/подводные камни. Про парсинг можно если там есть что-то не тривиальное.