karagy писал(а):warchief писал(а):Я хочу чтобы движок не запрещал менять размер окна, и в случае изменения сам досчитывал количество знакомест.
Лады. Вот он досчитал. Количество. В две переменные. Х и У.
А ты, я так понимаю, будешь всегда с запасом (по размеру окна) рисовать поглядывая на эти переменные?
Вообще это не выглядит сложным. Если забить на точное соответствие сетки знакомест границам окна (что-то я даже не подумал посмотреть DF, хотя большие скриншоты его ранее встречал), то можно обойтись очень лаконичным функционалом. Например:
Код: Выделить всё
terminal_set("window.resizeable=true");
...
int code = terminal_read();
if (code == TK_WINDOW_RESIZE)
{
int new_width = terminal_state(TK_WIDTH);
int new_height = terminal_state(TK_HEIGHT);
...
}
warchief писал(а):сначала опознать символ, но не извлекать его из очереди, а распознать код и с этим извлечь... Так значит можно? Ну вообщем-то тогда тоже приемлемое решение
Пусть будет так: как есть расширенная версия terminal_put_ext, также будет версия terminal_read_ext, принимающая набор флагов, изменяющих поведение. В данный момент их два (но задел на будущее остается):
1. TK_READ_CHAR: выбирать из очереди текстовый символ, иначе -- виртуальный код события.
2. TK_READ_NOREMOVE: не удалять событие из очереди, иначе -- как обычно удалять.
Таким образом terminal_read_char это один-к-одному terminal_read_ext(TK_READ_CHAR). Тебе же нужна комбинация обоих флагов:
Код: Выделить всё
while (terminal_has_input())
{
wchar_t symbol = terminal_read_ext(TK_READ_CHAR | TK_READ_NOREMOVE);
int code = terminal_read();
ReportInput(code, symbol > 0? symbol: 0); // Тернарный оператор т. к. результат TK_CALL_AGAIN никто не отменял.
}