BearLibTerminal - псевдоконсольное окно для рогалика
Модератор: Apromix
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Нашел на гитхабе обертку для go, но не получается скомпилить, показывает ошибку:
Никто не знает, что может быть? Как устанавливал go? Скачал msi и установил. Как IDE использую LiteIDE.
Скрытый текст: ПОКАЗАТЬ
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Обертка для Go есть и в репозитории терминала. Она более официальная, как минимум в том смысле что будет обновляться и исправляться моими силами.
Ошибка на скриншоте из-за того, что cgo не может найти GCC (лодку мне). "cgo" -- это такая штука, которая использует GCC для того, чтобы склеить С и GO, оно натурально компилирует BearLibTerminal.h как ANSI C в процессе. Логично, что без доступного в системе GCC это не сработает. Btw, в .h из "релизных" архивов ошибка, из-за которой cgo будет ругаться. Пока надо брать .h из репозитория.
Ошибка на скриншоте из-за того, что cgo не может найти GCC (лодку мне). "cgo" -- это такая штука, которая использует GCC для того, чтобы склеить С и GO, оно натурально компилирует BearLibTerminal.h как ANSI C в процессе. Логично, что без доступного в системе GCC это не сработает. Btw, в .h из "релизных" архивов ошибка, из-за которой cgo будет ругаться. Пока надо брать .h из репозитория.
Пытается раскуклиться
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Все понятно. Спасибо. Не ожидал, что для запуска go еще и C нужен Дальше я думаю сам разберусь.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Apromix писал(а): ↑11 авг 2016, 05:05Можно добавить в терминал рисование точки, линии, прямоугольника и круга орп. цветом. Так можно будет отрисовать рамку для тайла и полоску здоровья Вообще эти два элемента наверное можно добавить в терминал тоже, думаю почти в каждом рогалике будут использоваться))
Так уже все реализовано с первой версии )))
Не знаю, писали об это или нет, но сегодня я открыл для себя всю мощь функции terminal_put_ext с включенным terminal_composition. Можно рисовать что угодно и как угодно, для этого нужен всего лишь символ в виде точки (из одного или нескольких пикселов) и написанные функции, которые будут этим символом рисовать по определенному алгоритму - хоть круги определенного радиуса, хоть линии, хоть рамки, правда без сглаживания. Я, например, с помощью этой функции нарисовал миникарту уровня как в Dungeon Crawl, т.к. весь уровень не умещается в окно терминала (см. в правом нижнем углу, место для неё выбрал первое попавшееся для тестирования, потому кривовато выглядит, для рисования использовался символ 0x02D9(729) - точка 2х2 символа).
- Вложения
-
- tempmap.jpg (85.88 КБ) 6168 просмотров
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Я тоже чуть не поперхнулся. В голову полезли всякие пословицы о ... нецелевом использовании инструментов, черезмерном некритичном усердии и о пожарной безопастности для несовршеннолетних.
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Восхитительно! А если точку взять размытую, то еще и со сглаживанием получится >_<.
Но нет :-). Миникарту можно отрисовать немного более прямолинейно, ведь в терминале можно делать спрайты из массива пикселей:
А если хочется миникарту с большими пикселями, то надо добавить resize=%dx%d в N раз и resize-filter=nearest чтобы пиксели не расплылись.
Про это даже пример есть (правда я там немного переборщил, надо более наглядно сделать).
Но нет :-). Миникарту можно отрисовать немного более прямолинейно, ведь в терминале можно делать спрайты из массива пикселей:
Код: Выделить всё
int width, height;
std::vector<color_t> pixels; // size = width * height
terminal_setf("U+E000: %#p, raw-size=%dx%d", (void*)pixels.data(), width, height);
Про это даже пример есть (правда я там немного переборщил, надо более наглядно сделать).
Пытается раскуклиться
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Да, документация достаточно лаконична. Но это обычно всегда так, поскольку для создателя библиотеки многие функции очевидны и об них даже не упоминается. Но теперь стало понятно, как это делается.Cfyz писал(а): ↑01 мар 2017, 00:28
Про это даже пример есть (правда я там немного переборщил, надо более наглядно сделать).
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Было бы хорошо для дампа персонажа чтобы терминал умел делать скриншоты (текстовые) выбранной области
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Текстовые скриншоты? А как вы себе это представляете для сцены с тайлами? =)
Я сейчас (помимо мелочей тут и там) кубаторю над реализацией субконсолей, там функциональность сохранения/загрузки из файла (например, в довольно популярном формате RexPaint) будет точно, ибо очень хорошо сочетается. Но с тайлами все равно беда будет, конечно.
Я сейчас (помимо мелочей тут и там) кубаторю над реализацией субконсолей, там функциональность сохранения/загрузки из файла (например, в довольно популярном формате RexPaint) будет точно, ибо очень хорошо сочетается. Но с тайлами все равно беда будет, конечно.
Пытается раскуклиться
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Не, именно для сцены с символами. Результатом такой операции должна быть строка, а не картинка.
А сейчас графические скриншоты экрана можно делать?
А сейчас графические скриншоты экрана можно делать?
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Apromix писал(а):Не, именно для сцены с символами. Результатом такой операции должна быть строка, а не картинка.
Код: Выделить всё
program SaveScreen;
uses
BearLibTerminal, SysUtils;
procedure SaveScreen(filename: String);
var
output: TextFile;
x, y, c: Integer;
begin
Assign(output, filename);
Rewrite(output);
for y := 0 to terminal_state(TK_HEIGHT) do begin
for x := 0 to terminal_state(TK_WIDTH) do begin
c := terminal_pick(x, y, 0);
if (c >= 32) and (c < 126) then
Write(output, Chr(c))
else
Write(output, ' ');
end;
WriteLn(output);
end;
Close(output);
end;
begin
terminal_open();
// ...
// Draw some stuff here
// ...
terminal_refresh();
SaveScreen('dump.txt');
while (terminal_read() <> TK_CLOSE) do;
terminal_close();
end.
Вообще я про картинки и не говорил. Формат, в который сохраняет RexPaint, хоть и бинарный, но содержит символы и цвета. С честно текстовым дампом беда в том, что так можно представить только строго ограниченное подмножество вывода. Черт с ними с тайлами, но что делать с цветом, со слоями, с символами за пределами ASCII? Бесцветное ASCII же сдампить дело нехитрое, см. выше.
Можно конечно, Alt+PrintScreen =). Linux так даже сразу "сохранить как..." окошко откроет. Честно говоря, этот пункт у меня где-то далеко в конце списка, потому что надо тащить в код запись PNG при том, что все и так в общем-то работает.Apromix писал(а):А сейчас графические скриншоты экрана можно делать?
Пытается раскуклиться
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Да хотелось бы задать самому кнопочку, нажав на которую получим скриншот
- Apromix
- Мастер
- Сообщения: 1236
- Зарегистрирован: 04 июл 2011, 10:44
- Откуда: Украина, Черновцы
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Спасибо за сниппет. Их неплохо было бы где-то собирать, скажем на вики терминала, в отдельном разделе snippets Ну это так, хотелка, а вот реально нужна помощь. Мне нужно выводить лог в определенную зону, справа внизу экрана, в виде столбика. Мне форматировать самому строки, или терминал сам умеет? Задача казалось бы простая, но со сменой API print'ов чет не въезжаю как сделать
- Cfyz
- Сообщения: 776
- Зарегистрирован: 30 ноя 2006, 10:03
- Откуда: Санкт-Петербург
- Контактная информация:
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Умеет. Можно печатать как обычно (переносы в самой строке учитываются), с выравниванием текста относительно x, y и еще с автопереносом строк по указанной ширине. Без картинок словами довольно бестолково, так что посмотри пункт "8. Text Alignment" в SampleOmni. Размер строки на экране с учетом всех переносов и тегов можно узнать заранее с помощью Measure.Apromix писал(а):Мне форматировать самому строки, или терминал сам умеет?
При этом в процессе форматирования учитываются теги цвета, вставки и наложения произвольных тайлов, смены шрифта (в том числе на шрифт другого размера или пропорций). В итоге можно малой кровью сделать довольно пестрый лог, это можно подсмотреть в "9. Formatted Log".
Пытается раскуклиться
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 24 гостя