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

Форум библиотеки BeaRLib

Модератор: Apromix

Tookser
Сообщения: 155
Зарегистрирован: 08 апр 2010, 11:09

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

Сообщение Tookser » 05 май 2018, 08:04

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

Аватара пользователя
Apromix
Мастер
Сообщения: 1188
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 27 июн 2018, 17:52

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

Аватара пользователя
Apromix
Мастер
Сообщения: 1188
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 01 ноя 2018, 07:34

А как сделать счелчок мышкой по слову?

Аватара пользователя
Apromix
Мастер
Сообщения: 1188
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 22 янв 2019, 07:16

Кто-то знает, как можно организовать плавный полет стрелы/болта в терминале?

Аватара пользователя
karagy
Сообщения: 1093
Зарегистрирован: 10 янв 2007, 14:13

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

Сообщение karagy » 22 янв 2019, 12:18

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

Аватара пользователя
Cfyz
Сообщения: 767
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Cfyz » 22 янв 2019, 17:18

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

altmax
Сообщения: 136
Зарегистрирован: 15 сен 2012, 11:59

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

Сообщение altmax » 16 фев 2019, 07:57

Cfyz писал(а):
22 янв 2019, 17:18

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

altmax
Сообщения: 136
Зарегистрирован: 15 сен 2012, 11:59

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

Сообщение altmax » 23 фев 2019, 17:00

Подумал, что реализовать плавное перемещение героя будет не так просто - как правило он всегда в центре отображаемой карты, и придется плавно скроллить всю карту, а его оставлять на месте.

liername
Сообщения: 17
Зарегистрирован: 03 май 2014, 11:02

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

Сообщение liername » 20 июл 2019, 17:51

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

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

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

liername
Сообщения: 17
Зарегистрирован: 03 май 2014, 11:02

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

Сообщение liername » 22 июл 2019, 19:15

Выскажу свое мнение о мелькавшей тут идее перевести BearLibTerminal на рельсы SDL2.
Лично мое мнение: отличная идея.

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

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

altmax
Сообщения: 136
Зарегистрирован: 15 сен 2012, 11:59

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

Сообщение altmax » 10 окт 2019, 18:47

Как в python вызвать функцию terminal_print? Пишет, что не находит такой.

Аватара пользователя
Cfyz
Сообщения: 767
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Cfyz » 11 окт 2019, 19:17

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

altmax
Сообщения: 136
Зарегистрирован: 15 сен 2012, 11:59

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

Сообщение altmax » 12 окт 2019, 16:19

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 никогда ранее не связывался, ребенок им увлекся, теперь и я изучаю, чтобы хоть что-то уметь объяснить.

vapekreng
Сообщения: 58
Зарегистрирован: 22 фев 2016, 22:33

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

Сообщение vapekreng » 12 окт 2019, 22:49

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

Аватара пользователя
Cfyz
Сообщения: 767
Зарегистрирован: 30 ноя 2006, 10:03
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Cfyz » 13 окт 2019, 16:43

А, так бы сразу и говорили. Тогда все немного хитрее и с 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 сделан -- там и импорт двух вариантов функции (для простой строки и юникодной) и сокрытие лишних аргументов от пользователя.
Пытается раскуклиться

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость