Страница 51 из 54

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 05 май 2018, 08:04
Tookser
Tookser писал(а):
04 май 2018, 19:28
Понял, спасибо.
Ещё один вопрос. У меня есть цикл, в котором key = t.read() и проверка состояния клавиш, это основная часть интерфейса. Включена опция input.filter = keyboard+ , как в каком-то примере. Но эта опция мешает в другой части программы ждать нажатия любой клавиши с помощью terminal_read (так как туда попадает отжатие клавиши). Как проще всего разрешить этот конфликт?:?
Нашёл совсем очевидное решение, перед ожиданием нажатия клавиши ставить опцию input.filter = keyboard , чтобы отжатия клавиш перестали ловиться.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 27 июн 2018, 17:52
Apromix
Пришла в голову идея :D Сделать в терминале переназначение клавиш через конфигурационный файл. А также добавить виртуальные клавиши для самых основных функций рогалика, как поднятие предметов (TK_PICKUP), выход из сцены (TK_QUIT), открытие инвентаря (TK_INVENTORY) и т.д.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 01 ноя 2018, 07:34
Apromix
А как сделать счелчок мышкой по слову?

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 22 янв 2019, 07:16
Apromix
Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 22 янв 2019, 12:18
karagy
Поочередно перерисовывать спрайт стрелы по траектории движения оной?
Причем если летит медленно - перерисовывать с учетом окрестных спрайтов. Ну, что-бы летела трела а не квадрат с изображением стрелы на нем.
А если летит быстро - можно попробовать и "квадрат со стрелой". Авось не заметят.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 22 янв 2019, 17:18
Cfyz
Apromix писал(а):Пришла в голову идея :D Сделать в терминале переназначение клавиш через конфигурационный файл. А также добавить виртуальные клавиши для самых основных функций рогалика, как поднятие предметов (TK_PICKUP), выход из сцены (TK_QUIT), открытие инвентаря (TK_INVENTORY) и т.д.
Ага, мне тоже эта идея приходила. Кажется, что можно довольно гибко сделать. Проблема в том, что набора предзаготовленных констант не хватит в общем виде. Получается нужно как-то связать конфиг со значениями, которые будет выбирать разработчик, но в конфиге это строчки, а в коде цифры.
Apromix писал(а):А как сделать счелчок мышкой по слову?
Всмысле понять, что щелкнули по слову? Тут помощи от терминала мало, он может подсказать разве что символ и цвет, куда щелкнули. Можно пытаться читать символы влево и вправо до пробела или переноса, но не факт что это будет работать надежно. Чую есть куда подумать в этом направлении, возможность отличать одни тайлы от других по некоторой незаметной дополнительной информации о них может быть полезной.
Apromix писал(а):Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?
karagy прав, нужно рисовать спрайт по траектории. Разве что "с учетом окрестных спрайтов" это в терминале из коробки, и в произвольном месте спрайт нарисовать это тоже просто, но все равно рисовать самому. Анимацию тоже хотелось бы как-нибудь приделать, например мне очень нравится плавное перемещение действующих лиц между клетками, снаряды и прочие эффекты опять же. Но анимация за пределами (или поперек) сетки знакомест -- это допущение, которое расшатывает все повествование =(. Помимо того, что это непросто включить в лаконичный API, есть еще проблема где остановиться, ведь начав плавно перемещать спрайты из клетки в клетку, хочется добавить красивостей и остальным элементам.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 16 фев 2019, 07:57
altmax
Cfyz писал(а):
22 янв 2019, 17:18

Apromix писал(а):Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?
karagy прав, нужно рисовать спрайт по траектории. Разве что "с учетом окрестных спрайтов" это в терминале из коробки, и в произвольном месте спрайт нарисовать это тоже просто, но все равно рисовать самому. Анимацию тоже хотелось бы как-нибудь приделать, например мне очень нравится плавное перемещение действующих лиц между клетками, снаряды и прочие эффекты опять же. Но анимация за пределами (или поперек) сетки знакомест -- это допущение, которое расшатывает все повествование =(. Помимо того, что это непросто включить в лаконичный API, есть еще проблема где остановиться, ведь начав плавно перемещать спрайты из клетки в клетку, хочется добавить красивостей и остальным элементам.
Так есть функция в терминале put_ext, которая рисует спрайт с нужным смещением. С помощью неё достаточно легко можно реализовать плавное перемещение и полет стрелы. Только терминал скорее всего надо будет блокироваться на время отрисовки анимации.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 23 фев 2019, 17:00
altmax
Подумал, что реализовать плавное перемещение героя будет не так просто - как правило он всегда в центре отображаемой карты, и придется плавно скроллить всю карту, а его оставлять на месте.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 20 июл 2019, 17:51
liername
Есть проблема с фулскрином на линуксе: если передавать в terminal_set(...) "window.fullscreen=true" до первого рефреша (но, естественно, после terminal_open), то в полноэкранный режим окно не переходит. Если после рефреша - то переходит, но без ресайза ячеек (т.е. полосы не только по бокам экрана, но и сверху/снизу). В случае с alt+enter все работает как надо.

Также касательно проблемы растягивания символов при фулскрине: т.к. это портит изображение было бы неплохо дать пользователю возможность перезагрузить шрифты в более высоком разрешении. Технически, это уже сейчас возможно, но неизвестно какой size оптимален. Можно, конечно, получать размер ячеек в пикселях, но в фуллскрине они возвращают те же значения, что и в обычном режиме.

P.S. Проверял на linux mint 19.1. Библиотека 64 бит, версия 0.15.7

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 22 июл 2019, 19:15
liername
Выскажу свое мнение о мелькавшей тут идее перевести BearLibTerminal на рельсы SDL2.
Лично мое мнение: отличная идея.

Переход на SDL сделает библиотеку стабильней и гарантирует что она будет работать и через 10 лет, так как SDL будет продолжать обновляться под новые версии ОС. Например, линуксы хотят массово перейти на Wayland. Если BearLibTerminal будет работать на SDL, то переход произойдет максимально гладко.
Мне кажется, небольшая зависимость - это наименьшее зло.
К тому же у библиотеки останется самое главное, из-за чего она интересна: поддержка ttf и юникода из коробки + минимализм интерфейса (ну и поддержка фуллскрина, лично для меня).

На данный момент, для тех кто хочет иметь простую библиотеку терминала без лишних наворотов, но с нормальной поддержкой шрифтов и рендерингом через openGL - BearLibTerminal, ИМХО, безальтернативен.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 10 окт 2019, 18:47
altmax
Как в python вызвать функцию terminal_print? Пишет, что не находит такой.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 11 окт 2019, 19:17
Cfyz
altmax писал(а):Как в python вызвать функцию terminal_print? Пишет, что не находит такой.
Возможно, это в Python 2.x? Для Python3 есть print, но в Python2 это ключевое слово и не может быть реиспользовано нигде. Поэтому для Python2 в модуле есть функция _print (с подчеркиванием) как быстрый костыль. Или puts (для строк) как симметричная put (для отдельных символов). Или printf (с форматированием). Я все не мог решить как лучше и в итоге вышло то, что вышло =(.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 12 окт 2019, 16:19
altmax
Cfyz писал(а):
11 окт 2019, 19:17
altmax писал(а):Как в python вызвать функцию terminal_print? Пишет, что не находит такой.
Возможно, это в Python 2.x? Для Python3 есть print, но в Python2 это ключевое слово и не может быть реиспользовано нигде. Поэтому для Python2 в модуле есть функция _print (с подчеркиванием) как быстрый костыль. Или puts (для строк) как симметричная put (для отдельных символов). Или printf (с форматированием). Я все не мог решить как лучше и в итоге вышло то, что вышло =(.
Python 3.7, вроде как самая последняя версия. До этого на C++ писал - там всё работало нормально.Решил попробовать Python - если импортировать функции из прилагаемого к библиотеке файла - то всё работает, а ежели напрямую из dll вызывать, то к примеру terminal_put работает, а terminal_print - пишет, что нет такой функции.
C Python никогда ранее не связывался, ребенок им увлекся, теперь и я изучаю, чтобы хоть что-то уметь объяснить.

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 12 окт 2019, 22:49
vapekreng
Используй terminal.printf(x, y, text)
Тут работающее приложение, можешь посмотреть пример. https://github.com/Vapekreng/Mafia

Re: BearLibTerminal - псевдоконсольное окно для рогалика

Добавлено: 13 окт 2019, 16:43
Cfyz
А, так бы сразу и говорили. Тогда все немного хитрее и с Python напрямую не связано. Библиотека (.dll/.so) экспортирует ряд функций, terminal_xxx. Некоторые функции имеют сигнатуры, "готовые к употреблению" в большинстве языков, например put (аргументы это три обычных int), и можно просто указать компилятору мол есть put и он сам возьмёт соответствующую из библиотеки.

А некоторые функции напрямую так не мапятся, потому что типы не соответствуют (или автоматически не переводятся) или потому что точно такой функции в библиотеке на самом деле вообще нет.

print в этом случае выделяется по обеим причинам. Во-первых, строка в целевом ЯП может иметь символы размером 1, 2 или 4 байта. Поэтому все функции, принимающие или возвращающие строки, в библиотеке экспортированы в трёх вариантах с суффиксами 8, 16 или 32. Например, terminal_set16.

Во-вторых, print может иметь несколько необязательных аргументов, например выравнивание или размер области печати, да ещё возвращает получившийся на самом деле размер (что тоже приходится через аргументы возвращать). Но экспортировать несколько вариантов (несколько наборов по 8/16/32 бит вариантов) нерационально. Поэтому экспортируется только одна самая общая функция, а остальные получаются из нее во враппере. Реальная же функция в библиотеке имеет жуткий вид void terminal_print_ext8(int x, int y, int width, int height, int align, char8_t* str, int* out_width, int* out_height).

Посмотри во враппере Python как puts сделан -- там и импорт двух вариантов функции (для простой строки и юникодной) и сокрытие лишних аргументов от пользователя.