Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

ScrollRenderer | exp 3.1

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
16 Дек 2023
Сообщения
638
Реакции
9
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Panel:
Добавляем эти переменные:
private float scroll, animatedScrool; // TODO: Параметры прокрутки и анимации прокрутки
private boolean draggingScrollbar = false; // TODO: Флаг для отслеживания, удерживается ли скроллбар
private float lastMouseY; // TODO: Последняя позиция мыши по Y для отслеживания движения скроллбара

в render добавляем:
@Override public void render(MatrixStack stack, float mouseX, float mouseY) {
animatedScrool = MathUtil.fast(animatedScrool, scroll, 10);
float scrollbarHeight = MathHelper.clamp((height - header - 10) * (height - header - 10) / max, 10, height - header - 10);
float scrollbarY = getY() + header + (-getScroll() / (max - height + header + 4)) * (height - header - 4 - scrollbarHeight);
scrollbarHeight = MathHelper.clamp(scrollbarHeight, 20, height - header - 10); // TODO: у меня мин высота скроллбара 20
scrollbarY = MathHelper.clamp(scrollbarY, getY() + header, getY() + height - scrollbarHeight - 4);

рендер самого скроллбара:
// TODO: Отрисовка скроллбара с учетом ограничения прокрутки
if (max > height - header - 10) {
setScroll(MathHelper.clamp(getScroll(), -max + height - header - 10, 0)); // TODO: Ограничение прокрутки (ставите свое значение если это надо)
setAnimatedScrool(MathHelper.clamp(animatedScrool, -max + height - header - 10, 0));

// TODO: Если скролл на верху
if (scroll >= 0) {
setScroll(0);
setAnimatedScrool(0);
}

RectUtils.drawRoundedRect(getX() + getWidth() - 2.5f, scrollbarY, 3.5f, scrollbarHeight, 1.5f, ColorUtils.rgba(100, 100, 100, 200)); (отрисовка самой полоски)
} else {
setScroll(0);
setAnimatedScrool(0);
}

Фух 50% сделали
// TODO: Если мы перетаскиваем скроллбар
if (draggingScrollbar) {
float deltaY = mouseY - lastMouseY;
float scrollRange = max - height + header + 10;
scroll -= deltaY * 2 * (scrollRange / (height - header - 10)); // TODO: Увеличение скорости прокрутки
scroll = MathHelper.clamp(scroll, -scrollRange, 0);
lastMouseY = mouseY;
}

Основное сделали,осталось сделать нажатие на нее.
@Override
public void mouseClick(float mouseX, float mouseY, int button) {
// TODO: Обработка кликов мыши по компонентам
for (ModuleComponent component : modules) {
component.mouseClick(mouseX, mouseY, button);
}

// TODO: Обработка нажатия на скроллбар
if (button == 0) { // ЛКМ
float header = 55 / 2f;
float scrollbarHeight = MathHelper.clamp((height - header - 10) * (height - header - 10) / max, 10, height - header - 10);
float scrollbarY = getY() + header + (-getScroll() / (max - height + header + 4)) * (height - header - 4 - scrollbarHeight);
scrollbarHeight = MathHelper.clamp(scrollbarHeight, 20, height - header - 10);
scrollbarY = MathHelper.clamp(scrollbarY, getY() + header, getY() + height - scrollbarHeight - 4);

if (mouseX >= getX() + getWidth() - 2.5f && mouseX <= getX() + getWidth() + 1.0f && mouseY >= scrollbarY && mouseY <= scrollbarY + scrollbarHeight) {
draggingScrollbar = true;
lastMouseY = mouseY;
}
}
}

@Override
public void mouseRelease(float mouseX, float mouseY, int button) {
// TODO: Обработка отпускания кнопок мыши на компонентах
for (ModuleComponent component : modules) {
component.mouseRelease(mouseX, mouseY, button);
}

// TODO: Отмена перетаскивания скроллбара
if (button == 0) { // ЛКМ
draggingScrollbar = false;
}
}
ну вот и все
задавайте вопросы и тд (TODO: это подписывал для вас + гуи сделал новую.)
1724990807943.png

+- кринж но переделаете,всем споки ноки
 
ну впринципе не плохо
 
1725119978040.png

не благодари
 
Скинь цвето код темы "Космический"
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ты знаешь что такое TODO? Мне кажется нет :roflanEbalo:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Panel:
Добавляем эти переменные:
private float scroll, animatedScrool; // TODO: Параметры прокрутки и анимации прокрутки
private boolean draggingScrollbar = false; // TODO: Флаг для отслеживания, удерживается ли скроллбар
private float lastMouseY; // TODO: Последняя позиция мыши по Y для отслеживания движения скроллбара

в render добавляем:
@Override public void render(MatrixStack stack, float mouseX, float mouseY) {
animatedScrool = MathUtil.fast(animatedScrool, scroll, 10);
float scrollbarHeight = MathHelper.clamp((height - header - 10) * (height - header - 10) / max, 10, height - header - 10);
float scrollbarY = getY() + header + (-getScroll() / (max - height + header + 4)) * (height - header - 4 - scrollbarHeight);
scrollbarHeight = MathHelper.clamp(scrollbarHeight, 20, height - header - 10); // TODO: у меня мин высота скроллбара 20
scrollbarY = MathHelper.clamp(scrollbarY, getY() + header, getY() + height - scrollbarHeight - 4);

рендер самого скроллбара:
// TODO: Отрисовка скроллбара с учетом ограничения прокрутки
if (max > height - header - 10) {
setScroll(MathHelper.clamp(getScroll(), -max + height - header - 10, 0)); // TODO: Ограничение прокрутки (ставите свое значение если это надо)
setAnimatedScrool(MathHelper.clamp(animatedScrool, -max + height - header - 10, 0));

// TODO: Если скролл на верху
if (scroll >= 0) {
setScroll(0);
setAnimatedScrool(0);
}

RectUtils.drawRoundedRect(getX() + getWidth() - 2.5f, scrollbarY, 3.5f, scrollbarHeight, 1.5f, ColorUtils.rgba(100, 100, 100, 200)); (отрисовка самой полоски)
} else {
setScroll(0);
setAnimatedScrool(0);
}

Фух 50% сделали
// TODO: Если мы перетаскиваем скроллбар
if (draggingScrollbar) {
float deltaY = mouseY - lastMouseY;
float scrollRange = max - height + header + 10;
scroll -= deltaY * 2 * (scrollRange / (height - header - 10)); // TODO: Увеличение скорости прокрутки
scroll = MathHelper.clamp(scroll, -scrollRange, 0);
lastMouseY = mouseY;
}

Основное сделали,осталось сделать нажатие на нее.
@Override
public void mouseClick(float mouseX, float mouseY, int button) {
// TODO: Обработка кликов мыши по компонентам
for (ModuleComponent component : modules) {
component.mouseClick(mouseX, mouseY, button);
}

// TODO: Обработка нажатия на скроллбар
if (button == 0) { // ЛКМ
float header = 55 / 2f;
float scrollbarHeight = MathHelper.clamp((height - header - 10) * (height - header - 10) / max, 10, height - header - 10);
float scrollbarY = getY() + header + (-getScroll() / (max - height + header + 4)) * (height - header - 4 - scrollbarHeight);
scrollbarHeight = MathHelper.clamp(scrollbarHeight, 20, height - header - 10);
scrollbarY = MathHelper.clamp(scrollbarY, getY() + header, getY() + height - scrollbarHeight - 4);

if (mouseX >= getX() + getWidth() - 2.5f && mouseX <= getX() + getWidth() + 1.0f && mouseY >= scrollbarY && mouseY <= scrollbarY + scrollbarHeight) {
draggingScrollbar = true;
lastMouseY = mouseY;
}
}
}

@Override
public void mouseRelease(float mouseX, float mouseY, int button) {
// TODO: Обработка отпускания кнопок мыши на компонентах
for (ModuleComponent component : modules) {
component.mouseRelease(mouseX, mouseY, button);
}

// TODO: Отмена перетаскивания скроллбара
if (button == 0) { // ЛКМ
draggingScrollbar = false;
}
}
ну вот и все
задавайте вопросы и тд (TODO: это подписывал для вас + гуи сделал новую.)
Посмотреть вложение 284444
+- кринж но переделаете,всем споки ноки
круто
 
Назад
Сверху Снизу