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

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

Модератор: Apromix

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

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

Сообщение Apromix » 11 мар 2017, 15:54

Посмотрел 8 и 9 и сделал проще :) С print'ом, выводящим в область так вообще просто получилось.

Код: Выделить всё

procedure TMsgLog.Render;
var
  L: string;
begin
  if (Trim(MsgLog.Msg) = '') then
    L := '' else L := '[color=yellow]' + FMsg + '[/color]';
  Terminal.ForegroundColor(clGray);
  Terminal.Print(Log.Left, Log.Top,
  Log.Width, Log.Height, FLog.Text + L,
  TK_ALIGN_BOTTOM);
end;

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

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

Сообщение Apromix » 12 апр 2017, 20:49

Похоже на ошибку. Строка

Код: Выделить всё

1 [color=red] 2 [color=green] 3 [/color] 2 [/color] 1
в принте не корректно работает. То есть не соблюдается вложенность. Или так было задумано?

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

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

Сообщение Cfyz » 13 апр 2017, 12:31

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

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

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

Сообщение Apromix » 20 апр 2017, 20:06

Как вывести свое сообщение в лог терминала? В группе log нету чего-то типа msg или text?

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

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

Сообщение Cfyz » 24 апр 2017, 11:28

Так функций по работе с логом и вовсе нет, я вообще про лог не сильно пока задумывался. В принципе можно добавить какой-нибудь terminal_log(...). Правда так у каждой либы по своему логу может быть и неплохо бы придумать какой-то способ писать сообща, но это не так просто.
Пытается раскуклиться

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

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

Сообщение Apromix » 26 апр 2017, 19:26

Пока в лог такой код:

Код: Выделить всё

Game.Log(Format('Village: %dx%d', [AX, AY]));
... пишется так:

Код: Выделить всё

22:21:02.984 [info] Trying to set "Log: Village: 34x90"
22:21:02.984 [debug] Group "Log":
22:21:02.984 [debug] * "_" = "Village: 34x90"
22:21:02.984 [error] Failed to set some options: Failed to parse tileset offset 
Содержимое метода лог предельно простое:

Код: Выделить всё

procedure TGame.Log(S: string);
begin
  terminal_set('Log: ' + S);
end;
Может можно как то улучшить без внес. правок в код терминала?

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

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

Сообщение Cfyz » 27 апр 2017, 11:28

Ммм, пока никак нельзя. Тут вообще непонятно, что с записью через terminal_set могло пойти так, функция-то совсем не для этого предназначена >_<. Терминал вроде бы (так задумано, но серьезно не проверялось) открывает файл лога таким образом, что в этот файл можно писать параллельно и другим приложениям. Если при каждой записи в лог файл лога открыть для shared write, записать и закрыть, то должен получиться один аккуратный общий лог. Но я наверняка добавлю и terminal_log (когда доберусь вообще, ибо плотненько со временем нынче, даже багов успело накопиться на bitbucket).
Пытается раскуклиться

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

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

Сообщение Apromix » 28 апр 2017, 15:42

Я думаю terminal_log не особо и нужен, усложняет API. Достаточно terminal_set доработать для группы log (ведь есть же file, level). По аналогии можно добавить скажем msg и писать в лог через нее. Нечто подобное я искал и сейчас, интуитивно получается, но нет пока.

Код: Выделить всё

terminal_set("log.msg=Пишем сообщение в лог");
Да и через конфигурационный файл подобным образом можно что-то записать в лог :)

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

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

Сообщение Cfyz » 14 май 2017, 12:48

Апдейт 0.15.3: Windows / Linux / OS X / PyPi
С момента последнего отчета в этой ветке накопилась целая куча фиксов:
  • Поправлено задание нескольких альтернативных шрифтов в одном вызове set() (issue #34).
  • Поправлена генерация Box Drawing/Block Elements тайлов для альтернативных шрифтов (issue #32).
  • Поправлено добавление больших тайлов-спрайтов (issue #30).
  • Поправлена неоптимальная работа в случае с большим количеством отсутствуюших в шрифте символов.
  • Добавлена функция font(), которой можно задать текущий шрифт по имени, аналогично цвету/слою (issue #33).
  • Враппер Python ищет .dll в том числе и рядом с бинарником (теперь можно паковать в standalone .exe)
  • Для TrueType шрифтов добавлен параметр hinting (), разные шрифты выглядят лучше с тем или иным. Дефолтный теперь native.
  • Поправлен баг с зависанием на повторном open() под MacOS.
  • Поправлен вывод символа табуляции в print(), ширина таба задается output.tab-width.
  • Установка input.cursor-blink-rate в 0 выключает мигание курсора в read_str().
  • Поправлена работа с кодовой страницей растровых тайлсетов (для не-шрифтов можно по аналогии с truetype выбирать отдельные тайлы из картинки).
  • Добавлено чтение буфера обмена через terminal_get("clipboard"). Записи нет.

Apromix писал(а):По аналогии можно добавить скажем msg и писать в лог через нее.
Я было дело хотел сказать, что это какая-то порнография, и terminal_set не для этого и вообще это вам не микроконтроллеры, чтобы записью в регистры выполнять активные действия. Но потом полез делать terminal_log и увидел, что как обычно для принимающей строку функции надо будет сделать три точки входа в .dll, реализовать их на стороне С, добавить соответствующие методы (по несколько разных штук) в C++, C#, Go, Lua, Pascal, Python и Ruby, потом для каждого языка проверить, что оно работает (как минимум не имеет опечаток и компилируется). И мне стало грустно.

Черт с вами, подумал я и добавил обработку msg. Но сразу же оказалось, что просто поле в группе опций работает некрасиво: функция set диагностики ради сначала выводит в лог всю строку, потом ее парсит и выводит полученную таблицу опций и только потом применяет ее. Получается, что к моменту обработки msg в логе уже куча "мусора" и деталей работы. И выключать это нельзя, потому что дебаг.

Потом я еще раз вспомнил про добавление функции в API и мне еще раз стало грустно =). В итоге родилась такая вот химера (присутствует в текущем апдейте, но не афишируется):

Код: Выделить всё

terminal_set('log("message text")');
Которая выглядит как "текстовый" вызов функции и обрабатывается отдельно (легко отличить от установки опций). В данный момент синтаксис выражения (кавычки, аргументы) не проверяется никак, но я допускаю появление всамделишных вызовов функций. Так сказать, задел на будущее =/.
Пытается раскуклиться

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

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

Сообщение Apromix » 18 май 2017, 19:19

Хорошая новость. По логу тож сойдет, лучше уже. А что насчет вложенности цветов?

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

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

Сообщение Apromix » 29 май 2017, 17:55

Как через конфигурационный файл config.ini запустить терминал в полный экран?

Ответ:

Код: Выделить всё

window: fullscreen=true
А вообще нужно какой-то стандартный config.ini с сами частыми опциями сделать и распространять с библиотекой, чтобы не собирать опции по справке.

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

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

Сообщение altmax » 10 июл 2017, 12:43

Это нормально, что при наложении тайлов (при включенном режиме композиции или в разных слоях), если исходная яркость была не 0xff, а меньше, то в точках наложения изображений получается большая яркость, чем в исходных тайлах? Или это таки баг?

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

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

Сообщение Cfyz » 20 июл 2017, 11:48

altmax писал(а):Это нормально, что при наложении тайлов <...> в точках наложения изображений получается большая яркость, чем в исходных тайлах?
А альфа-канала там нет? С полупрозрачностью (этих пикселей) так и должно быть. Без полупрозрачности по формуле будет строго исходное значение цвета пикселя.
Пытается раскуклиться

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

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

Сообщение altmax » 21 июл 2017, 11:56

Cfyz писал(а):
20 июл 2017, 11:48
А альфа-канала там нет? С полупрозрачностью (этих пикселей) так и должно быть. Без полупрозрачности по формуле будет строго исходное значение цвета пикселя.
Это стандартный встроенный шрифт с цветом ColorOff = 0x7fffffff; т.е. первый байт - это альфа-канал?
Вложения
testgame.jpg
testgame.jpg (35.86 КБ) 5935 просмотров

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

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

Сообщение Cfyz » 21 июл 2017, 13:01

altmax писал(а):Это стандартный встроенный шрифт с цветом ColorOff = 0x7fffffff; т.е. первый байт - это альфа-канал?
Да, бинарное представление идет как 0xAARRGGBB (располагается в памяти как BGRA). Очевидно, что серый цвет можно получить простым 0xFF7F7F7F.

А еще рамоки (которые кстати по большей части одинаково генерятся для всех шрифтов) вроде бы должны стыковаться ровно, а не внахлест. Используется пиксельные смещение?
Пытается раскуклиться

Ответить

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

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