- Версия(и) Minecraft
- 1.7.10-1.15
Давно уже была мысль сделать что-то подобное. Во многих проектах приходится делать одно и то же - так почему бы не обобщить GUI-компоненты под единым API, подумал я... И сделал.
GExt - это движок для создания полноценных внутриигровых интерфейсов(уровня самостоятельных программ). Он предоставляет API и основные его реализации. Больше никакого GL-кода в интерфейсах. ООПшно и сердито.
Полезные ссылки:
GitHub Wiki(English)
Туториал по использованию
Discord-сервер
GExt на CurseForge
Опубликовано в OSSRH:
Например:
Версию снапшотов(вероятно) придётся смотреть на гитхабе либо в OSSRH. Версии
Репозиторий:
Основные возможности:
GExt - это движок для создания полноценных внутриигровых интерфейсов(уровня самостоятельных программ). Он предоставляет API и основные его реализации. Больше никакого GL-кода в интерфейсах. ООПшно и сердито.
Полезные ссылки:
GitHub Wiki(English)
Туториал по использованию
Discord-сервер
GExt на CurseForge
Опубликовано в OSSRH:
com.github.stannismod.gext:forge<номер_версии_игры>:<версия_библиотеки>
.Например:
com.github.stannismod.gext:forge112:1.4.0.0-SNAPSHOT
.Версию снапшотов(вероятно) придётся смотреть на гитхабе либо в OSSRH. Версии
stable
будут выходить здесь в качестве обновлений.Репозиторий:
Gradle (Groovy):
maven {
url = "https://oss.sonatype.org/content/repositories/snapshots/"
}
Основные возможности:
- Единое API графических компонентов
- Модульная сборка всех компонентов как главная идеология библиотеки. Чёткое разделение ответственности за логические части функционирования интерфейса. За счёт этого сложные компоненты можно собирать из более мелких. Так, например, панель
GPanel
- это инструмент композиции, которому можно установить любой обработчик прокрутки - графический компонент, обрабатывающий ввод мыши и рисующий скроллбары, если нужно. Такой подход улучшает читаемость кода и позволяет сконцентрироваться на решении маленькой задачи в каждый конкретный момент времени - Удобное создание каждого компонента через фабрики. Код максимально короткий и читаемый
- Полная абстракция рисования. Гарантируется, что криво написанный рендер одного компонента не может сломать работу другого. Кроме того, ваше рисование не зависит от координат компонента в контейнере! Можно считать, что функция
draw
получает систему координат, связанную с вашим компонентом. Не важно, что вы натворите в своей функции рисования - матрица преобразований на выходе из неё будет сброшена - Интегрированная обрезка кадра, используя
glScissor
. Все компоненты по умолчанию обрезаются до своей ширины и высоты, заявленной в реализации API - Инструменты компоновки(композиции). Они же контейнеры. Это компоненты с одной целью - содержать в себе и определённым образом располагать другие компоненты
- Контекстные меню. Определяйте действия для компонентов, доступные по ПКМ
- Иерархический 'проброс' в эти компоненты основных событий ввода - мышка нажата, отпущена, передвинута и т.п., нажата клавиша на клавиатуре. Тем же образом передаются события наведения(hover), изменения размеров окна(resize), проверки обновлений и обновления(update) и прочее. Ну и, конечно, отрисовки компонента
- Слушатели(Listener). Можно реализовать в своем компоненте интерфейс
IListener
и управлять своим состоянием в зависимости от состояния цели. Да, прямо у себя, не залезая в основной контейнер - Продвинутая работа с элементами интерфейса. Класс
StyleMap
представляет из себя то, что может нарисовать кнопку, скроллбар, фон, иконку любого размера! Кроме того, это позволяет делать несколько стилей графических интерфейсов, меняя всего одну текстуру в ресурсах - Платформонезависимый код. Можно легко и быстро реализовать API адаптеров под абсолютно любую платформу, при этом основной код библиотеки трогать не придётся