
BnnWidget - Библиотека для создания анимированных интерфейсов в Minecraft
BnnWidget представляет собой специализированную библиотеку, которая входит в состав мода SignPicture и предоставляет разработчикам мощный инструментарий для создания динамических графических интерфейсов с минимальными усилиями.
Основные возможности
Упрощенная анимация - Встроенная система анимации с поддержкой плавных переходов позволяет оживлять элементы интерфейса без сложного программирования.
Интуитивная система координат - Относительное позиционирование избавляет от необходимости выполнять сложные математические расчеты для определения координат элементов.
Гибкая архитектура - Модульная структура библиотеки обеспечивает простоту расширения функциональности и создания пользовательских компонентов.
Пример использования
import javax.annotation.Nonnull;
import net.teamfruit.bnnwidget.WBase;
import net.teamfruit.bnnwidget.WEvent;
import net.teamfruit.bnnwidget.WFrame;
import net.teamfruit.bnnwidget.WPanel;
import net.teamfruit.bnnwidget.WRenderer;
import net.teamfruit.bnnwidget.motion.Easings;
import net.teamfruit.bnnwidget.position.Area;
import net.teamfruit.bnnwidget.position.Point;
import net.teamfruit.bnnwidget.position.R;
import net.teamfruit.bnnwidget.render.OpenGL;
import net.teamfruit.bnnwidget.var.V;
import net.teamfruit.bnnwidget.var.VMotion;
// Основной класс интерфейса наследуется от WFrame
public class MyGui extends WFrame {
// Инициализация виджетов в методе initWidget
@Override
protected void initWidget() {
// Добавление панели, наследуемой от WPanel
add(new WPanel(new R()) {
@Override
protected void initWidget() {
// Класс R определяет относительную область позиционирования
add(new WBase(new R()) {
// VMotion представляет анимированное значение
VMotion m = V.pm(0);
@Override
public void draw(final @Nonnull WEvent ev, final @Nonnull Area pgp, final @Nonnull Point p, final float frame, final float opacity) {
// Подготовка к отрисовке
WRenderer.startShape();
// Обертка OpenGL для совместимости между версиями Minecraft
// Значение из класса V получается методом get()
OpenGL.glColor4f(0f, 0f, 0f, this.m.get());
// Отрисовка с детальным позиционированием
draw(getGuiPosition(pgp));
}
private boolean mouseinside;
@Override
public void update(final @Nonnull WEvent ev, final @Nonnull Area pgp, final @Nonnull Point p) {
// Получение области виджета относительно родителя
final Area a = getGuiPosition(pgp);
// Проверка нахождения курсора над виджетом
if (a.pointInside(p)) {
if (!this.mouseinside) {
this.mouseinside = true;
// Запуск анимации при наведении
this.m.stop().add(Easings.easeLinear.move(.2f, 0f)).start();
}
} else if (this.mouseinside) {
this.mouseinside = false;
// Запуск анимации при уходе курсора
this.m.stop().add(Easings.easeLinear.move(.2f, .5f)).start();
}
super.update(ev, pgp, p);
}
// Обработка запроса закрытия интерфейса
@Override
public boolean onCloseRequest() {
// Запуск анимации закрытия
this.m.stop().add(Easings.easeLinear.move(.25f, 0f)).start();
return false;
}
// Проверка завершения анимации перед закрытием
@Override
public boolean onClosing(final @Nonnull WEvent ev, final @Nonnull Area pgp, final @Nonnull Point mouse) {
return this.m.isFinished();
}
});
}
});
}
}
Часто задаваемые вопросы
Сообщение об ошибках и предложения - Если вы обнаружили ошибку или у вас есть идеи по улучшению библиотеки, вы можете оставить свои замечания в соответствующем разделе.
Использование в модификациях - BnnWidget распространяется под лицензией MIT, что позволяет свободно использовать библиотеку в собственных проектах и модификациях.
Участие в разработке - Исходный код библиотеки открыт для всех желающих внести свой вклад в развитие проекта через добавление новых функций или исправление ошибок.