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

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

Модератор: Apromix

Аватара пользователя
Maelstraz
Сообщения: 46
Зарегистрирован: 27 янв 2011, 22:41
Контактная информация:

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

Сообщение Maelstraz » 24 сен 2013, 14:52

Да я просто в юните ансишные версии функций затолкал в скобки комментариев, чтобы не мучаться.

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

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

Сообщение Cfyz » 24 сен 2013, 21:02

Maelstraz писал(а):Инстарепорт: Лазарь не может определить, какую функцию terminal_print() из двух ему использовать, ансишную или юникодную.
Или вы что-то путаете, или я совсем не понимаю как это работает =_=
Скрытый текст: ПОКАЗАТЬ
AnsiUnicodeTest.pas:

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

program AnsiUnicodeTest;

{$mode objfpc}
{$H+}
{$apptype gui}
{$codepage UTF8}

uses
    BearLibTerminal;

begin
    terminal_open(CODEPAGE_DEFAULT);
    terminal_options('size=12x5');
    terminal_print(1, 1, 'ABCDEF');
    terminal_print(1, 2, 'Яблоко');
    terminal_print(1, 3, 'αβγδε');
    terminal_refresh();
    terminal_get();
    terminal_close();
end.
Три строки с разным набором символов, на всякий случай. Как оказалось, не зря.

Кусочек из BearLibTerminal.pas:

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

function terminal_print(X, Y: Integer; const S: AnsiString): Cardinal;
begin
    terminal_color(color_from_name('light red'));
    terminal_print := terminal_print_impl(X, Y, PChar(S));
end;

function terminal_print(X, Y: Integer; const S: UnicodeString): Cardinal;
begin
    terminal_color(color_from_name('light green'));
    terminal_print := terminal_wprint_impl(X, Y, PUnicodeChar(S));
end;
Две перегруженные функции, причем в каждую добавлено выставление цвета, чтоб уж наверняка.

1. Если файл в UTF-8 с BOM или в начале файла есть директива {$codepage UTF8}, то вывод такой:
strings_with_marker.png
strings_with_marker.png (7.46 КБ) 3695 просмотров
2. Если нет ни BOM, ни директивы, то вывод такой:
strings_wo_marker.png
strings_wo_marker.png (9.04 КБ) 3695 просмотров
Запускалось из Lazarus 1.0.12
Пытается раскуклиться

Аватара пользователя
Maelstraz
Сообщения: 46
Зарегистрирован: 27 янв 2011, 22:41
Контактная информация:

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

Сообщение Maelstraz » 29 сен 2013, 12:49

Кстати, кто-то жаловался, что не помешает плавное перемещение спрайтов по терминалу?

Выход элементарен, пусть и является костылём - просто выставляем в настройках размер шрифта поменьше, а сам терминал расширяем до нужного разрешения - и, вуаля, спрайты ползают по экрану с куда большей точностью, знакомест-то вагон и маленькая тележка. А дальше проблема исключительно в допиливании кода, который позволит этому великолепию вменяемо отображаться. Ну, и муторная механическая работа в посимвольном добавлении "больших" букв, потому что размер нормального шрифта мы сделали крохотным и он уже никуда не подойдёт.

А дальше хоть своего мегамена пили. :3

Аватара пользователя
warchief
Сообщения: 300
Зарегистрирован: 11 янв 2008, 09:55
Откуда: Озеро снов

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

Сообщение warchief » 30 сен 2013, 04:22

Когда будет справка? хотя бы по этим долбонутым (а по другому я не знаю как их назвать) конфигам через строчку (terminal_options)? Хотел поэксперементировать с загрузкой шрифта - и не знаю что вводить...

Я тут вот с каким вопросом - как узнать по количеству знакомест и размеру шрифта, какого размера будет окно? Ну то есть чтобы вон тот фон который в демке подгонять под размеры... Потому что у меня 17 широкоформатный монитор, мне при стандартном размере окна ничего не видно. Я сначала решил увеличить размер. Вообщем ваш пример имеет размер 640х400. Это при 80х25 знакомест. Нехитро подсчитав можно понять что размер шрифта
640/80=8
400/25=16
Теперь я пишу так

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

terminal_options("font.name=media/consola.ttf; font.size=%d; font.mode=lcd", 12);
(правильно хоть шрифт описываю то?)
По предыдущим расчетам должно было быть
80*12=960
25*12*2=600.
Ну, я так подсчитал по предыдущему, потому что доки ведь нет, вот и гадай
Вот только нифига не так, размер окна 720х472.
Так, делю
720/80=9
472/25=18,88
Что за фигня? В терминале есть возможность узнать текущую высоту и ширину символа?

Если что, мне надо как-то получить окно, хотя бы близкое к 800х600 и к 1024х768 (то есть с возможностью выбирать одно из этих двух), и соответственно большим (то есть ну ни как не 8) размером шрифта

Написал размер шрифта 16

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

terminal_options("font.name=media/consola.ttf; font.size=%d; font.mode=lcd", 16);
Размер окна 960х624
960/80=12
624/25=24,96

Почему размер шрифта не совпадает с введенным?

Вопрос второй, получается, что при таких расширениях выкидывается полноэкранность, ибо там будут проблемы с такими расширениями?

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

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

Сообщение Феникc » 30 сен 2013, 04:28

Скрытый текст: ПОКАЗАТЬ
http://rlgclub.ru/wiki/BearLibTerminal#terminal_options
Данная функция представляет собой универсальный способ задания разнообразных настроек библиотеки. Опции задаются в виде строки с парами параметр-значение, разделенными точкой с запятой:
option1=value1; option2=value2; ...

В библиотеке имеются два варианта функции, с суффиксом "noformat" и без. Вариант без суффикса (с переменным числом аргументов) позволяет использовать в С/С++ привычное форматирование передаваемой строки:

terminal_options("size=%dx%d", width, height);

Вариант с суффиксом "noformat" не производит подобного форматирования и может быть использован при вызове функций из программы, написанной на других языках программирования, предоставляющих собственные механизмы форматирования строк.
Перечень доступных параметров
Наименование Значение по умолчанию Описание
Настройки окна
size 80x25 Размер окна терминала в знакоместах, в формате ШИРИНАxВЫСОТА.
title BearLibTerminal Заголовок окна терминала.
icon app.ico Имя .ico-файла с иконкой, которая будет использована для окна.
Настройки шрифта
font.name default Имя файла шрифта, векторного .ttf или тайлового .bmp/.png
font.size 10 Размер шрифта: высота символа для векторного шрифта, размер одного тайла для тайлового шрифта.
font.mode normal Режим растеризации при использовании векторного шрифта: monochrome, normal или lcd.
font.codepage utf-8 Кодовая страница тайлового шрифта.
Настройки ввода
input.events keypress Фильтр событий ввода, комбинация из флагов none, keypress, keyrelease, mousemove, mousescroll, all.
input.timeout infinite Таймаут ожидания события ввода: infinite, immediate или численное значение в миллисекундах.
input.precise_mousemove false Флаг, указывающий, будет ли считаться движением мыши попиксельное (true) или познакоместное (false) перемещение указателя.
input.cursor_symbol 95 (ASCII 0x5F, подчеркивание) Код символа, используемого в качестве курсора в terminal_get_str.
input.cursor_blink_rate 500 Скорость мерцания курсора в terminal_get_str, в миллисекундах.
Настройки вывода
output.postformat true Флаг, включающий или выключающий постформатирование при выводе текста.
Настройки логгирования
log.file bearlibterminal.log Имя файла, куда в библиотека будет писать свой лог. Файл не ротируется, логгирование попросту производится в конец указанного файла.
log.level error Уровень важности логгирования: none, fatal, error, warning, info, debug, trace
http://rlgclub.ru/wiki/BearLibTerminal#terminal_state
terminal_state

int terminal_state(int code);

Данная функция позволяет получить текущее состояние некоторых переменных терминала. Код переменной берется из перечисления VK_xxx.

Состояние клавиш: коды VK_ESCAPE, VK_0, VK_NUMPAD0, VK_A и т. д. Функция возвращает 1, если клавиша нажата или 0, если отпущена.
Состояние мыши: VK_MOUSE_X и VK_MOUSE_Y (в знакоместах), VK_MOUSE_PIXEL_X, VK_MOUSE_PIXEL_Y (в пикселях), VK_MOUSE_WHEEL (в шагах колесика).
Размеры знакоместа: VK_CELL_WIDTH и VK_CELL_HEIGHT (в пикселях).
ЕМНИП, размер шрифта измеряется в пунктах (кои есть ~1/72 дюйма), а не в пикселях. И "размер шрифта" - это (ЕМНИП №2) средняя высота букв, а не максимальный их размер.
Но вообще, лучше дождаться Cfyz'а, он объяснит.
Последний раз редактировалось Феникc 30 сен 2013, 04:44, всего редактировалось 1 раз.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
warchief
Сообщения: 300
Зарегистрирован: 11 янв 2008, 09:55
Откуда: Озеро снов

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

Сообщение warchief » 30 сен 2013, 04:40

Спс.

И как я и говорю, эта дебильная система конфигов, до такой степени узерфрендли, что без документации тупо не понятно что, куда и как. (если вдруг что, я когда пишу код, я закрываю все, в том числе и браузер, поэтому у меня нет справки с вики). Но автору она нравится, так что придется дальше жрать кактус. Видать о совете писать код так чтобы он сам себя документировал, автор никогда не слышал. Каким макаром я должен был догадаться что дефайны (по сути константа) VK_CELL_WIDTH и VK_CELL_HEIGHT нужно передать в какую-то функцию (чье имя не дает подсказку) terminal_state() чтобы получить искомое, а самое главное как понять что я получил. И конечно же он никогда не слышал о втором совете - каждая функция должна делать ровно одну задачу и должна быть как можно меньшего размера вплоть (в идеале) до 1 строки (если что книга "Идеальный код", а также тыщи других по рефакторингу). Нет, вместо этого нужно было сделать одну универсальную. Ведь пользователю так лень запомнить что размер ширины символа можно получить через:

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

GetWidthCellInPixel();
поэтому сделаем одну функцию terminal_state(), пусть мучается.
Последний раз редактировалось warchief 30 сен 2013, 04:51, всего редактировалось 1 раз.

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

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

Сообщение Феникc » 30 сен 2013, 04:50

По моему, ты малость не справедлив к автору. Ну да, без доков опции вряд ли задашь (особенно если это первый проект на BearLibTerminal), но это требуется лишь раз, в начале программы. И этот один раз можно написать и с открытым браузером.
Хотя мне тоже больше импонирует подход аля HGE, но и там без документации сложно. К тому же я не знаю как у других языков с функциями с переменным числом параметров, так что кроссязычность может и пострадать.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
warchief
Сообщения: 300
Зарегистрирован: 11 янв 2008, 09:55
Откуда: Озеро снов

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

Сообщение warchief » 30 сен 2013, 04:54

>>По моему, ты малость не справедлив к автору. Ну да, без доков опции вряд ли задашь (особенно если это первый проект на BearLibTerminal), но это требуется лишь раз, в начале программы
Мне тоже автор говорил что в начале. Только почему-то я до сих пор натыкаюсь на эти конфиги, то там, то сям
К тому же я не знаю как у других языков с функциями с переменным числом параметров, так что кроссязычность может и пострадать.
Зачем нужны функции с переменным числом параметров? (кстати, в винде это источник уязвимости и не рекомендуется, даже иногда варнинг проскакивает вроде) В консоли миллион параметров что-ли? Если пользователю нужно, пусть сверху сам напишет

Почему нельзя для каждого параметра сделать свой гет и сет? Тогда достаточно будет глянуть в исходники чтобы сразу понять что и где и как настраивать

Аватара пользователя
Феникc
Сообщения: 679
Зарегистрирован: 27 ноя 2010, 15:01
Откуда: Челябинск

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

Сообщение Феникc » 30 сен 2013, 05:00

На мой взгляд, необходимость вызывать функцию несколько раз может возникнуть только для трёх параметров:
input.events keypress Фильтр событий ввода, комбинация из флагов none, keypress, keyrelease, mousemove, mousescroll, all.
input.timeout infinite Таймаут ожидания события ввода: infinite, immediate или численное значение в миллисекундах.
input.precise_mousemove false Флаг, указывающий, будет ли считаться движением мыши попиксельное (true) или познакоместное (false) перемещение указателя.
Остальные параметры обычно задаются раз и навсегда. Зачем на лету менять шрифт или размер окна кроме как для демонстрации?

И в любом случае, если тебе так припекает, да напиши ты эти геты и сеты сам, на десять минут делов-то.
Всё вышесказанное - ИМХО, если не указано обратное.

Аватара пользователя
warchief
Сообщения: 300
Зарегистрирован: 11 янв 2008, 09:55
Откуда: Озеро снов

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

Сообщение warchief » 30 сен 2013, 05:07

Я и так вместо игры до сих пор пишу оболочку над этим всем (хотя больше ради того чтобы потом если совсем припечет, выкинуть безболезненно, заменив чем-нибудь другим).

>>Зачем на лету менять шрифт или размер окна кроме как для демонстрации?
Заголовки, названия меню

А так, не считая этой проблемы с конфигами пока все нравится. Ну ладно, пойду дальше писать код

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

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

Сообщение Cfyz » 30 сен 2013, 13:24

Maelstraz писал(а):Кстати, кто-то жаловался, что не помешает плавное перемещение спрайтов по терминалу?
Выход элементарен, пусть и является костылём - просто выставляем в настройках размер шрифта поменьше, а сам терминал расширяем до нужного разрешения
Ха, какой занятный хак, мне даже в голову не приходило. Но нет =). Размер терминала в знакоместах ограничен 256x256, в том числе, чтобы оставить место для оптимизаций. В следующей версии будет менее костыльная возможность.
warchief писал(а):Я тут вот с каким вопросом - как узнать по количеству знакомест и размеру шрифта, какого размера будет окно? Ну то есть чтобы вон тот фон который в демке подгонять под размеры...
Внешний размер окна узнать нет никакой возможности. Внутренний размер окна, как уже отмечалось, может быть получен через размер окна в знакоместах и размер знакоместа (VK_CELL_WIDTH/VK_CELL_HEIGHT).
warchief писал(а):Почему размер шрифта не совпадает с введенным?
Феникс писал(а):ЕМНИП, размер шрифта измеряется в пунктах (кои есть ~1/72 дюйма), а не в пикселях. И "размер шрифта" - это (ЕМНИП №2) средняя высота букв, а не максимальный их размер.
Тут такое дело, что "размер шрифта" это понятие весьма субъективное. Пусть размер шрифта -- 12 пикселей. Двенадцать пикселей где? В любом шрифте есть буквы весьма разной высоты. Где-то самая крупная это A, но часто f или k чуть выше ее, а еще есть символы вроде Ґ (кириллический, между прочем, символ), явно более длинные, чем остальные. Так от каких букв отсчитывать размер -- строчных, прописных, по медиане, по выносным элементам? Далее, буквы нельзя лепить граница к границе. Есть f, которая выступает вверх, а есть и j, которая выступает вниз. Размеры этих выносов являются свойством конкретного шрифта и даже если взять два шрифта такого размера, чтобы их медиана была одинакова, выносы будут разные. Аналогично с шириной, но она у поддерживаемых терминалом моноширинных шрифтов хотя бы [как правило] одинаковая у всех символов. Итого, заранее сказать какого размера будет знакоместо невозможно, в зависимости от шрифта оно будет любого размера.

В следующей версии будет возможность задать размер шрифта "подгоном", т. е. сказать, что знакоместо будет такого-то размера, а терминал попытается выбрать размер шрифта максимального влезающего размера. Однако качество результата нельзя гарантировать из-за соблюдения пропорций и хинтинга.
warchief писал(а):И как я и говорю, эта дебильная система конфигов, до такой степени узерфрендли, что без документации тупо не понятно что, куда и как. (если вдруг что, я когда пишу код, я закрываю все, в том числе и браузер, поэтому у меня нет справки с вики). Но автору она нравится, так что придется дальше жрать кактус. Видать о совете писать код так чтобы он сам себя документировал, автор никогда не слышал. Каким макаром я должен был догадаться что дефайны (по сути константа) VK_CELL_WIDTH и VK_CELL_HEIGHT нужно передать в какую-то функцию (чье имя не дает подсказку) terminal_state() чтобы получить искомое, а самое главное как понять что я получил. И конечно же он никогда не слышал о втором совете - каждая функция должна делать ровно одну задачу и должна быть как можно меньшего размера вплоть (в идеале) до 1 строки (если что книга "Идеальный код", а также тыщи других по рефакторингу). Нет, вместо этого нужно было сделать одну универсальную. Ведь пользователю так лень запомнить что размер ширины символа можно получить через:

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

GetWidthCellInPixel();
поэтому сделаем одну функцию terminal_state(), пусть мучается.
Это просто несерьезно. На протяжении треда я неоднократно обосновывал свой выбор. Кроме того, слишком много субъективности и откровенных придирок к мелочам.

Если ты закрываешь все, в том числе и браузер и у тебя даже нет справки с вики, то тебе придется жрать свой кактус еще долго. API любого программного продукта требует документации. В С/С++ контекстная справка до сих пор не является идиоматической и практически никакая IDE не подскажет ничего. Открой MSVS, набери CreateFile, поставь скобку и посмотри сколько именно справки выдаст тебе IDE по той куче флагов и параметров, что эта функция принимает. Не нравится WinAPI, можешь попробовать функции POSIX (варианты второго параметра вызова fopen), boost, STL. Или даже совсем сторонние библиотеки, например что означает flags в TCOD_console_set_custom_font или state в HGE/System_SetStateBool? Смирись, писать без справки под рукой это бессмысленная бравада.

Самодокументируемый код -- это ты что-то явно путаешь. Вот несамодокументируемый код:

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

int set_blocking_mode(int s, int v)
{
    return ioctl(s, FIONBIO, &v);
}
А вот самодокументируемый код:

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

int set_socket_blocking_mode(int socket_fd, bool nonblocking)
{
    int option_value = nonblocking;
    return ioctl(socket_fd, FIONBIO, &option_value);
}
Возможно, не самый лучший пример, но уж что было под рукой. Во втором варианте по коду понятно что означают параметры функции, очевидно какое входное значение к чему приводят. Самодокументируемый код -- это тот, который легко читать, а не тот, который легко писать.

И конечно же автор слышал о том, что каждый инструмент должен выполнять одну задачу и выполнять ее хорошо, Unix-way, все дела. terminal_state выполняет одну конкретную задачу: доступ к текущему состоянию некоторых переменных терминала (при необходимости с учетом очереди ввода). И выполняет эту задачу хорошо.
warchief писал(а):Почему нельзя для каждого параметра сделать свой гет и сет? Тогда достаточно будет глянуть в исходники чтобы сразу понять что и где и как настраивать
Потому что это бессмысленно замусорит API библиотеки. Не надо смотреть в исходники, надо смотреть максимум в хидер, а лучше в доки. Доки правда не ах пока, либа все еще в стадии беты.

Если тебе психологически сложно принять чужой выбор и необходимо за что-то зацепиться, то могу привести такой аргумент. Пять параметров (треть доступных) принимает строку в качестве значения. Так как библиотека динамическая и может быть использована из разных языков, это требует трех вариантов вызова для каждого строкового аргумента -- ANSI/UTF-8 (С/C++, многие скрипты), UTF-16 (C/C++ под Windows, Pascal, C#), UTF-32 (C/C++ под Linux). Задание через один вызов позволяет удержать это в рамках разумного (да, сейчас вызовов два, char* и wchar_t*; в следующей версии их будет три).

Найти в этом треде остальную аргументацию в пользу выбранного подхода я оставлю в качестве домашнего задания.
warchief писал(а):>>Зачем на лету менять шрифт или размер окна кроме как для демонстрации?
Заголовки, названия меню
Названия меню?
Пытается раскуклиться

Аватара пользователя
warchief
Сообщения: 300
Зарегистрирован: 11 янв 2008, 09:55
Откуда: Озеро снов

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

Сообщение warchief » 01 окт 2013, 00:33

API любого программного продукта требует документации.
Нет, не требует, вся документация прямо в коде. это и есть самодокументирующий код. тем более современная документация после появления всяких doxygen, суть тот же самый код
В С/С++ контекстная справка до сих пор не является идиоматической и практически никакая IDE не подскажет ничего. Открой MSVS, набери CreateFile, поставь скобку и посмотри сколько именно справки выдаст тебе IDE по той куче флагов и параметров, что эта функция принимает. Не нравится WinAPI, можешь попробовать функции POSIX (варианты второго параметра вызова fopen), boost, STL
В этих местах мне не нужна справка
Возможно, не самый лучший пример, но уж что было под рукой. Во втором варианте по коду понятно что означают параметры функции, очевидно какое входное значение к чему приводят. Самодокументируемый код -- это тот, который легко читать, а не тот, который легко писать.
А я об этом и говорю, ведь легко читать, это означает легко понять для чего он написан. Стейты такими не являются.
terminal_state выполняет одну конкретную задачу: доступ к текущему состоянию некоторых переменных терминала (при необходимости с учетом очереди ввода)
Нет, он меняет свое поведение (возвращает значения в разных контекстах), то есть неоднозначна. Нельзя быть уверенным что именно вернет (даже если это в инте), особенно если ты вдруг что-нибудь там изменишь
Если тебе психологически сложно принять чужой выбор и необходимо за что-то зацепиться, то могу привести такой аргумент. Пять параметров (треть доступных) принимает строку в качестве значения. Так как библиотека динамическая и может быть использована из разных языков, это требует трех вариантов вызова для каждого строкового аргумента -- ANSI/UTF-8 (С/C++, многие скрипты), UTF-16 (C/C++ под Windows, Pascal, C#), UTF-32 (C/C++ под Linux). Задание через один вызов позволяет удержать это в рамках разумного (да, сейчас вызовов два, char* и wchar_t*; в следующей версии их будет три).
И при чем тут стейты?
Названия меню?
Если я хочу сделать пункты меню большим шрифтом чем осталной

Аватара пользователя
Maelstraz
Сообщения: 46
Зарегистрирован: 27 янв 2011, 22:41
Контактная информация:

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

Сообщение Maelstraz » 01 окт 2013, 08:51

Cfyz писал(а):Но нет =). Размер терминала в знакоместах ограничен 256x256
So close.
warchief писал(а):Если я хочу сделать пункты меню большим шрифтом чем остальное
Буквы верхнего регистра для слабаков?

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

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

Сообщение Cfyz » 01 окт 2013, 11:11

warchief писал(а):Нет, не требует, вся документация прямо в коде. это и есть самодокументирующий код. тем более современная документация после появления всяких doxygen, суть тот же самый код
Ну что значит не требует, я выше привел пример API которые именно требуют. И doxygen тут не сильно помогает, документация-в-коде попросту позволит тебе автоматически сгенерировать документацию-не-в-коде.
warchief писал(а):В этих местах мне не нужна справка
Не слишком субъективно? В этих местах не нужна и можно без справки, а в этом нужна и что за безобразный несамодокументируемый код? Или, быть может, ты утверждаешь, что во всех перечисленных случаях ты обойдешься без документации?
warchief писал(а):А я об этом и говорю, ведь легко читать, это означает легко понять для чего он написан. Стейты такими не являются.
Чем в плане читаемости terminal_get_cell_width() фундаментально отличается от terminal_state(VK_CELL_WIDTH)? Первое выглядит чуть глаже, но большая общность механизма перевешивает.
Кроме того, как было отмечено выше, если уж очень хочется иного наименования, то долго ли написать inline terminal_get_cell_width() {return terminal_state(VK_CELL_WIDTH);}?
warchief писал(а):Нет, он меняет свое поведение (возвращает значения в разных контекстах), то есть неоднозначна. Нельзя быть уверенным что именно вернет (даже если это в инте), особенно если ты вдруг что-нибудь там изменишь
Пожалуйста, пример неоднозначности, где вызов меняет свое поведение. Что именно вернет, можно быть уверенным, это документировано (ссылка); рано или поздно будут и doxygen-комментарии, где будет наисано то же самое, только покороче и на английском.
warchief писал(а):
Cfyz писал(а):Если тебе психологически сложно принять чужой выбор и необходимо за что-то зацепиться, то могу привести такой аргумент. Пять параметров (треть доступных) принимает строку в качестве значения. <...>
И при чем тут стейты?
Как ты с такой памятью без документации обходишься-то? =)
Cfyz писал(а):
warchief писал(а):хотя бы по этим долбонутым (а по другому я не знаю как их назвать) конфигам через строчку (terminal_options)?
warchief писал(а):И как я и говорю, эта дебильная система конфигов, до такой степени узерфрендли, что без документации тупо не понятно что, куда и как.
warchief писал(а):Почему нельзя для каждого параметра сделать свой гет и сет? Тогда достаточно будет глянуть в исходники чтобы сразу понять что и где и как настраивать
Если тебе психологически сложно принять чужой выбор и необходимо за что-то зацепиться, то могу привести такой аргумент. Пять параметров (треть доступных) принимает строку в качестве значения. <...>
warchief писал(а):Если я хочу сделать пункты меню большим шрифтом чем осталной
Тут мутный момент. Помимо некоторых технологических сложностей, я попросту не очень понимаю как такое должно работать. Было бы неплохо, если бы ты сделал мокап в пейнте как это, по-твоему, должно выглядеть -- обязательно с расчерченной сеткой знакомест. Потому что если на экране есть и большие буквы, и маленькие, то либо большие будут залезать друг на друга, либо маленькие будут расставлены реже обычного.
Пытается раскуклиться

Аватара пользователя
Maelstraz
Сообщения: 46
Зарегистрирован: 27 янв 2011, 22:41
Контактная информация:

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

Сообщение Maelstraz » 02 окт 2013, 18:21

Cfyz писал(а):В следующей версии будет менее костыльная возможность.
Возможность указывать не только координаты знакоместа для тайла, но и величину попиксельного смещения?

Если да, то это будет законченный шедевр.
И я навеки увязну в создании йоба-эффектов.

Ответить

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

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