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

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

Модератор: Apromix

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

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

Сообщение warchief » 24 дек 2013, 12:01

karagy писал(а):/Пристально смотрит/ готовый виджет захотел?
О чем ты? Я хочу чтобы движок не запрещал менять размер окна, и в случае изменения сам досчитывал количество знакомест. И примером показал DF, где это сделано.
Apromix писал(а):Мельком проглядел тему и показалось, что warchief новый dwarf fortress делает :D :D :D
Прямо сейчас я делаю рогалик по статьям на бейсике (Let`s build the roguelike), который еще тут на вики переведены. Если удачно завершу, выложу в открытый доступ, будет как пример использования BearLibTerminal.

После чего, я наконец-то начну делать рогалик своей мечты из-за которого, я когда-то в 2008 году здесь и зарегестрировался :roll:
А так да, планы там грандиозные - но ближе будет к elona

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

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

Сообщение karagy » 24 дек 2013, 12:22

warchief писал(а):О чем ты?
О бордюре окна.
warchief писал(а): Я хочу чтобы движок не запрещал менять размер окна, и в случае изменения сам досчитывал количество знакомест.
Лады. Вот он досчитал. Количество. В две переменные. Х и У.
А ты, я так понимаю, будешь всегда с запасом (по размеру окна) рисовать поглядывая на эти переменные?
warchief писал(а): И примером показал DF, где это сделано.
Вроде как DF не движок. А как-раз то, что тебе предстоит сделать поверх существующего движка.

Я пытаюсь подвести тебя к мысли - что чудес не бывает. Да.

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

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

Сообщение warchief » 24 дек 2013, 12:38

karagy писал(а):Лады. Вот он досчитал. Количество. В две переменные. Х и У.
Ну да
karagy писал(а):А ты, я так понимаю, будешь всегда с запасом (по размеру окна) рисовать поглядывая на эти переменные?
А я сам разберусь, как мне надо. Это кстати не сложно - собственно увеличиваться должна игровая область, а гуи может оставаться в тех же размерах.
karagy писал(а):Вроде как DF не движок. А как-раз то, что тебе предстоит сделать поверх существующего движка.
Ты не понял, прямо сейчас такую вещь вообще нельзя никак сделать, потому что автор тупо запретил изменять размер окна, так что DF на этом движке уже не сделать, пока автор не разрешит изменение размера окна
Изображение

То есть, если я даже захочу, я сейчас такого просто не смогу сделать, о чем я и пишу. это как раз должен уметь движок, а не игра

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

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

Сообщение Cfyz » 24 дек 2013, 13:27

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 никто не отменял.
}
Пытается раскуклиться

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

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

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

Frolik писал(а):Прошу предоставить хедеры для делфей.
Прикреплено к сообщению. Сильно не тестировал (Delphi? какой Delphi?), но простейшие программки посредством FreePascal собираются, юникод работает и даже массив цветов для terminal_put_ext у меня получилось туда передать. Также эта версия хедера работает как с виндовым, так и с линуксовым FPC.
Вложения
BearLibTerminal.pas.zip
(2.96 КБ) 57 скачиваний
Пытается раскуклиться

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 24 дек 2013, 15:43

Проглотил. Ща иду тестить.

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 24 дек 2013, 16:31

В пятом примере жму стрелку вниз и у меня черный прямоугольник вылезает вниз, покидая границы окна.

Аватара пользователя
Frolik
Сообщения: 624
Зарегистрирован: 08 мар 2011, 17:21

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

Сообщение Frolik » 24 дек 2013, 16:32

Спасибо, забрал.

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

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

Сообщение Cfyz » 24 дек 2013, 17:11

Apromix писал(а):В пятом примере жму стрелку вниз и у меня черный прямоугольник вылезает вниз, покидая границы окна.
Увы, ничего не понял =) В пятом примере пара строк текста и изменяемый размер ячейки. Черное там все, но вот прямоугольников вроде нет. И как это "покидая", контекст отрисовки же размером ровно с окно. Приведи скриншот, что ли?
Пытается раскуклиться

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 24 дек 2013, 17:24

Я так понял, что если меняется размер ячейки, то растягивается и само окно. У меня окно не растягивается (я вижу это по рамке), а растягивается сама поверхность, на которой рисует OpenGL, контекст или как там. Если обновить окно (свернуть и затем восстановить), то все приходит в норму, на время, до последующ. изм. размеров ячейки. На скриншоте видно, что рамка обрезана внизу (нижняя ее часть просто не отображается).
Вложения
1111111111111111111111111111111.png
1111111111111111111111111111111.png (10.75 КБ) 2997 просмотров

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 24 дек 2013, 17:54

А где в хедере terminal_get() ?

Аватара пользователя
Apromix
Мастер
Сообщения: 1236
Зарегистрирован: 04 июл 2011, 10:44
Откуда: Украина, Черновцы
Контактная информация:

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

Сообщение Apromix » 24 дек 2013, 18:54

Использую print, но тестовый пример при старте выдает , что не находит в самой либе print8 :) Где можно скачать самую свежую версию? У меня 9.

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

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

Сообщение Cfyz » 24 дек 2013, 22:43

Apromix, что за чертовщина у тебя творится? >_<

Окно обязано растягиваться. Установка размеров окна превращается строго в вызов SetWindowPos. Это одна из фундаментальных функций WinAPI. Если она не срабатывает, ОС пьяна (лог рядом часом не создается?). Неотображающаяся нижняя часть рамки это наверное даже круче. Дело в том, что контекст OpenGL создается на клиентскую область окна, рамка в которую не входит. У меня даже при всем желании нет возможности испортить рамку. Что у тебя за версия ОС/конфигурация машины? У меня даже под Wine ничего подобного не происходит.

Вызова terminal_get в хедере нет. В конце того большого поста я отметил, что ввод стал terminal_read (причины там же).

Вызов terminal_print8 (который terminal_print для AnsiString) в "девятой" версии точно есть. Я даже скачал и проверил таблицу экспорта. Более того, я собрал helloworld в Лазарусе.
Пытается раскуклиться

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

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

Сообщение Cfyz » 24 дек 2013, 23:41

Версия 0.9.1: ссылка.
  • read_char заменен на read_ext как было описано выше;
  • фикс редкого, но возможного зависания под XP.
Btw, выложенный чуть ранее хедер для паскаля уже сразу был для 0.9.1.
Пытается раскуклиться

Аватара пользователя
karagy
Сообщения: 1271
Зарегистрирован: 10 янв 2007, 14:13

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

Сообщение karagy » 25 дек 2013, 06:13

Ты в какой ОС сборку делаешь? Тип, разрядность, компилятор.
Как давно освоил создание файлов для CMake?

Ответить

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

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