Страница 48 из 54
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 11 мар 2017, 15:54
Apromix
Посмотрел 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;
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 12 апр 2017, 20:49
Apromix
Похоже на ошибку. Строка
Код: Выделить всё
1 [color=red] 2 [color=green] 3 [/color] 2 [/color] 1
в принте не корректно работает. То есть не соблюдается вложенность. Или так было задумано?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 13 апр 2017, 12:31
Cfyz
Это не то, чтобы было задумано, но да, вложенности нет. Это даже в доках отмечено. Вроде бы это по какой-то причине получилось, но почему именно вспомнить не могу. Выглядит довольно неинтуитивно, надо исправить будет.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 20 апр 2017, 20:06
Apromix
Как вывести свое сообщение в лог терминала? В группе log нету чего-то типа msg или text?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 24 апр 2017, 11:28
Cfyz
Так функций по работе с логом и вовсе нет, я вообще про лог не сильно пока задумывался. В принципе можно добавить какой-нибудь terminal_log(...). Правда так у каждой либы по своему логу может быть и неплохо бы придумать какой-то способ писать сообща, но это не так просто.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 26 апр 2017, 19:26
Apromix
Пока в лог такой код:
Код: Выделить всё
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;
Может можно как то улучшить без внес. правок в код терминала?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 27 апр 2017, 11:28
Cfyz
Ммм, пока никак нельзя. Тут вообще непонятно, что с записью через terminal_set могло пойти так, функция-то совсем не для этого предназначена >_<. Терминал вроде бы (так задумано, но серьезно не проверялось) открывает файл лога таким образом, что в этот файл можно писать параллельно и другим приложениям. Если при каждой записи в лог файл лога открыть для shared write, записать и закрыть, то должен получиться один аккуратный общий лог. Но я наверняка добавлю и terminal_log (когда доберусь вообще, ибо плотненько со временем нынче, даже багов успело накопиться на bitbucket).
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 28 апр 2017, 15:42
Apromix
Я думаю
terminal_log не особо и нужен, усложняет API. Достаточно
terminal_set доработать для группы
log (ведь есть же
file,
level). По аналогии можно добавить скажем
msg и писать в лог через нее. Нечто подобное я искал и сейчас, интуитивно получается, но нет пока.
Код: Выделить всё
terminal_set("log.msg=Пишем сообщение в лог");
Да и через конфигурационный файл подобным образом можно что-то записать в лог
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 14 май 2017, 12:48
Cfyz
Апдейт 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 и мне еще раз стало грустно =). В итоге родилась такая вот химера (присутствует в текущем апдейте, но не афишируется):
Которая выглядит как "текстовый" вызов функции и обрабатывается отдельно (легко отличить от установки опций). В данный момент синтаксис выражения (кавычки, аргументы) не проверяется никак, но я допускаю появление всамделишных вызовов функций. Так сказать, задел на будущее =/.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 18 май 2017, 19:19
Apromix
Хорошая новость. По логу тож сойдет, лучше уже. А что насчет вложенности цветов?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 29 май 2017, 17:55
Apromix
Как через конфигурационный файл config.ini запустить терминал в полный экран?
Ответ:
А вообще нужно какой-то стандартный config.ini с сами частыми опциями сделать и распространять с библиотекой, чтобы не собирать опции по справке.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 10 июл 2017, 12:43
altmax
Это нормально, что при наложении тайлов (при включенном режиме композиции или в разных слоях), если исходная яркость была не 0xff, а меньше, то в точках наложения изображений получается большая яркость, чем в исходных тайлах? Или это таки баг?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 20 июл 2017, 11:48
Cfyz
altmax писал(а):Это нормально, что при наложении тайлов <...> в точках наложения изображений получается большая яркость, чем в исходных тайлах?
А альфа-канала там нет? С полупрозрачностью (этих пикселей) так и должно быть. Без полупрозрачности по формуле будет строго исходное значение цвета пикселя.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 21 июл 2017, 11:56
altmax
Cfyz писал(а): ↑20 июл 2017, 11:48
А альфа-канала там нет? С полупрозрачностью (этих пикселей) так и должно быть. Без полупрозрачности по формуле будет строго исходное значение цвета пикселя.
Это стандартный встроенный шрифт с цветом ColorOff = 0x7fffffff; т.е. первый байт - это альфа-канал?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 21 июл 2017, 13:01
Cfyz
altmax писал(а):Это стандартный встроенный шрифт с цветом ColorOff = 0x7fffffff; т.е. первый байт - это альфа-канал?
Да, бинарное представление идет как 0xAARRGGBB (располагается в памяти как BGRA). Очевидно, что серый цвет можно получить простым 0xFF7F7F7F.
А еще рамоки (которые кстати по большей части одинаково генерятся для всех шрифтов) вроде бы должны стыковаться ровно, а не внахлест. Используется пиксельные смещение?