Скачать BnnWidget — Minecraft Моды — MetaMods

BnnWidget

Активный

Установок

0

Последнее обновление

6 лет назад
Клиент
Библиотеки

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, что позволяет свободно использовать библиотеку в собственных проектах и модификациях.

Участие в разработке - Исходный код библиотеки открыт для всех желающих внести свой вклад в развитие проекта через добавление новых функций или исправление ошибок.

Участники проекта
Kamesuta

Kamesuta

Создан: 17 фев 2019

ID: 37011