Страница 47 из 54
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 22 фев 2017, 08:29
Apromix
Нашел на гитхабе
обертку для go, но не получается скомпилить, показывает
ошибку:
Код: Выделить всё
package ddd
//import "fmt"
import "gopherlibterminal"
func main() {
/*glt.Open()
defer glt.Close()
glt.Print(0, 0, "Hello, world!")
glt.Refresh()
glt.Delay(1000)*/
//fmt.Println("Hello++++, world!")
}
Никто не знает, что может быть? Как устанавливал go? Скачал msi и установил. Как IDE использую
LiteIDE.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 22 фев 2017, 09:12
Cfyz
Обертка для Go есть и в репозитории терминала. Она более официальная, как минимум в том смысле что будет обновляться и исправляться моими силами.
Ошибка на скриншоте из-за того, что cgo не может найти GCC (лодку мне). "cgo" -- это такая штука, которая использует GCC для того, чтобы склеить С и GO, оно натурально компилирует BearLibTerminal.h как ANSI C в процессе. Логично, что без доступного в системе GCC это не сработает. Btw, в .h из "релизных" архивов ошибка, из-за которой cgo будет ругаться. Пока надо брать .h из репозитория.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 22 фев 2017, 09:35
Apromix
Все понятно. Спасибо. Не ожидал, что для запуска go еще и C нужен
Дальше я думаю сам разберусь.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 28 фев 2017, 18:28
altmax
Apromix писал(а): ↑11 авг 2016, 05:05
Можно добавить в терминал рисование точки, линии, прямоугольника и круга орп. цветом. Так можно будет отрисовать рамку для тайла и полоску здоровья
Вообще эти два элемента наверное можно добавить в терминал тоже, думаю почти в каждом рогалике будут использоваться))
Так уже все реализовано с первой версии )))
Не знаю, писали об это или нет, но сегодня я открыл для себя всю мощь функции terminal_put_ext с включенным terminal_composition. Можно рисовать что угодно и как угодно, для этого нужен всего лишь символ в виде точки (из одного или нескольких пикселов) и написанные функции, которые будут этим символом рисовать по определенному алгоритму - хоть круги определенного радиуса, хоть линии, хоть рамки, правда без сглаживания. Я, например, с помощью этой функции нарисовал миникарту уровня как в Dungeon Crawl, т.к. весь уровень не умещается в окно терминала (см. в правом нижнем углу, место для неё выбрал первое попавшееся для тестирования, потому кривовато выглядит, для рисования использовался символ 0x02D9(729) - точка 2х2 символа).
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 28 фев 2017, 18:41
Apromix
Неожиданно
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 28 фев 2017, 18:45
karagy
Я тоже чуть не поперхнулся. В голову полезли всякие пословицы о ... нецелевом использовании инструментов, черезмерном некритичном усердии и о пожарной безопастности для несовршеннолетних.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 01 мар 2017, 00:28
Cfyz
Восхитительно! А если точку взять размытую, то еще и со сглаживанием получится >_<.
Но нет :-). Миникарту можно отрисовать немного более прямолинейно, ведь в терминале можно делать спрайты из массива пикселей:
Код: Выделить всё
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);
А если хочется миникарту с большими пикселями, то надо добавить resize=%dx%d в N раз и resize-filter=nearest чтобы пиксели не расплылись.
Про это даже
пример есть (правда я там немного переборщил, надо более наглядно сделать).
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 01 мар 2017, 06:04
altmax
Cfyz писал(а): ↑01 мар 2017, 00:28
Про это даже
пример есть (правда я там немного переборщил, надо более наглядно сделать).
Да, документация достаточно лаконична. Но это обычно всегда так, поскольку для создателя библиотеки многие функции очевидны и об них даже не упоминается. Но теперь стало понятно, как это делается.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 07 мар 2017, 20:23
Apromix
Было бы хорошо для дампа персонажа чтобы терминал умел делать скриншоты (текстовые) выбранной области
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 07 мар 2017, 21:27
Cfyz
Текстовые скриншоты? А как вы себе это представляете для сцены с тайлами? =)
Я сейчас (помимо мелочей тут и там) кубаторю над реализацией субконсолей, там функциональность сохранения/загрузки из файла (например, в довольно популярном формате
RexPaint) будет точно, ибо очень хорошо сочетается. Но с тайлами все равно беда будет, конечно.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 07 мар 2017, 22:51
Apromix
Не, именно для сцены с символами. Результатом такой операции должна быть строка, а не картинка.
А сейчас графические скриншоты экрана можно делать?
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 08 мар 2017, 00:59
Cfyz
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 же сдампить дело нехитрое, см. выше.
Apromix писал(а):А сейчас графические скриншоты экрана можно делать?
Можно конечно, Alt+PrintScreen =). Linux так даже сразу "сохранить как..." окошко откроет. Честно говоря, этот пункт у меня где-то далеко в конце списка, потому что надо тащить в код запись PNG при том, что все и так в общем-то работает.
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 08 мар 2017, 20:09
Apromix
Да хотелось бы задать самому кнопочку, нажав на которую получим скриншот
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 10 мар 2017, 15:13
Apromix
Спасибо за сниппет. Их неплохо было бы где-то собирать, скажем на вики терминала, в отдельном разделе snippets
Ну это так, хотелка, а вот реально нужна помощь. Мне нужно выводить лог в определенную зону, справа внизу экрана, в виде столбика. Мне форматировать самому строки, или терминал сам умеет? Задача казалось бы простая, но со сменой API print'ов чет не въезжаю как сделать
Re: BearLibTerminal - псевдоконсольное окно для рогалика
Добавлено: 10 мар 2017, 15:47
Cfyz
Apromix писал(а):Мне форматировать самому строки, или терминал сам умеет?
Умеет. Можно печатать как обычно (переносы в самой строке учитываются), с выравниванием текста относительно x, y и еще с автопереносом строк по указанной ширине. Без картинок словами довольно бестолково, так что посмотри пункт "8. Text Alignment" в SampleOmni. Размер строки на экране с учетом всех переносов и тегов можно узнать заранее с помощью Measure.
При этом в процессе форматирования учитываются теги цвета, вставки и наложения произвольных тайлов, смены шрифта (в том числе на шрифт другого размера или пропорций). В итоге можно малой кровью сделать довольно пестрый лог, это можно подсмотреть в "9. Formatted Log".