Вопрос Хелп с X и Y модулей

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Дек 2024
Сообщения
73
Реакции
0
Код:
Expand Collapse Copy
@Getter
public class ModuleComponent extends AbstractComponent {
private final List<AbstractSettingComponent> components = new ArrayList<>();

private final CheckComponent checkComponent = new CheckComponent();
private final SettingComponent settingComponent = new SettingComponent();

private final Module module;

public ModuleComponent(Module module) {
this.module = module;

 new SettingComponentAdder().addSettingComponent(
                module.settings(),
components
        );
    }

@Override
    public void render(DrawContext context, int mouseX, int mouseY, float delta) {
        Matrix4f positionMatrix = context
                .getMatrices()
                .peek()
                .getPositionMatrix();

 height = getComponentHeight();
x = 320f;
       
rectangle.render(ShapeProperties.create(positionMatrix, x, y, width, 20)
.round(12, 0, 12, 0)
.softness(0.2f)
.color(0xFF191a28)
                .build()
        );

rectangle.render(ShapeProperties.create(positionMatrix, x, y, width, height)
.round(12)
.softness(0.4f)
.thickness(1f)
.outlineColor(0xCC141724)
.color(0xCC141724)
                .build()
        );

 image.setMatrixStack(context.getMatrices())
.setTexture("textures/ico.png")
.render(ShapeProperties.create(positionMatrix, x + 9, y + 4.5F, 9, 9)
                        .build()
                );

Fonts.getSize(14, BOLD).drawString(context.getMatrices(), module.getVisibleName(), x + 23, y + 7, 0xFFD4D6E1);
Fonts.getSize(14, BOLD).drawString(context.getMatrices(), "Enable", x + 9, y + 27, 0xFFD4D6E1);
Fonts.getSize(12, DEFAULT).drawString(context.getMatrices(), "Enable the feature.", x + 9, y + 36, 0xFF878894);

((CheckComponent) checkComponent.position(x + width - 16, y + 28.5F))
.setRunnable(module::switchState)
.setState(module.isState())
                .render(context, mouseX, mouseY, delta);

((SettingComponent) settingComponent.position(x + width - 28, y + 28.5F))
.setRunnable(() -> spawnWindow(mouseX, mouseY))
                .render(context, mouseX, mouseY, delta);

        drawBind(context, positionMatrix);

float offset = y + 46;
for (int i = components.size() - 1; i >= 0; i--) {
AbstractSettingComponent component = components.get(i);

 var visible = component.getSetting()
                    .getVisible();

if (visible != null && !visible.get()) {
 continue;
            }

component.x = x;
component.y = offset + (getComponentHeight() - 46 - component.height);
component.width = width;

            component.render(context, mouseX, mouseY, delta);

offset -= component.height;
        }
    }

@Override
    public boolean mouseClicked(double mouseX, double mouseY, int button) {
boolean isAnyComponentHovered = components
                .stream()
.anyMatch(abstractComponent -> abstractComponent.isHover(mouseX, mouseY));

 if (isAnyComponentHovered) {
 components.forEach(abstractComponent -> {
if (abstractComponent.isHover(mouseX, mouseY)) {
abstractComponent.mouseClicked(mouseX, mouseY, button);
                }
            });
 return super.mouseClicked(mouseX, mouseY, button);
        }

 checkComponent.mouseClicked(mouseX, mouseY, button);
 settingComponent.mouseClicked(mouseX, mouseY, button);

components.forEach(abstractComponent -> abstractComponent.mouseClicked(mouseX, mouseY, button));
 return super.mouseClicked(mouseX, mouseY, button);
    }

@Override
    public boolean isHover(double mouseX, double mouseY) {
for (AbstractComponent abstractComponent : components) {
 if (abstractComponent.isHover(mouseX, mouseY)) {
 return true;
            }
        }
return MathUtil.isHovered(mouseX, mouseY, x, y, width, height);
    }

@Override
    public void tick() {
for (AbstractComponent component : components) {
            component.tick();
        }
 super.tick();
    }

@Override
    public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
components.forEach(abstractComponent -> abstractComponent.mouseDragged(mouseX, mouseY, button, deltaX, deltaY));
 return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
    }

@Override
    public boolean mouseReleased(double mouseX, double mouseY, int button) {
components.forEach(abstractComponent -> abstractComponent.mouseReleased(mouseX, mouseY, button));
 return super.mouseReleased(mouseX, mouseY, button);
    }

@Override
    public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
components.forEach(abstractComponent -> abstractComponent.mouseScrolled(mouseX, mouseY, amount));
 return super.mouseScrolled(mouseX, mouseY, amount);
    }

@Override
    public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
components.forEach(abstractComponent -> abstractComponent.keyPressed(keyCode, scanCode, modifiers));
 return super.keyPressed(keyCode, scanCode, modifiers);
    }

@Override
    public boolean charTyped(char chr, int modifiers) {
components.forEach(abstractComponent -> abstractComponent.charTyped(chr, modifiers));
 return super.charTyped(chr, modifiers);
    }

public int getComponentHeight() {
float offsetY = 0;
for (AbstractSettingComponent component : components) {
 var visible = component.getSetting()
                    .getVisible();

if (visible != null && !visible.get()) {
 continue;
            }

offsetY += component.height;
        }
return (int) (offsetY + 46);
    }

private void drawBind(DrawContext context, Matrix4f positionMatrix) {
String bindName = StringUtil.getBindName(module.getKey());
float stringWidth = Fonts.getSize(12, BOLD).getStringWidth(bindName);

rectangle.render(ShapeProperties.create(positionMatrix, x + width - stringWidth - 15, y + 4.5F, stringWidth + 6, 9)
.round(4)
.thickness(1)
.softness(1)
.outlineColor(0xFF282932)
.color(0xFF161725)
                .build()
        );

int bindingColor = ColorHelper.Argb.getArgb(255, 135, 136, 148);
Fonts.getSize(12, BOLD).drawString(context.getMatrices(), bindName, x + width - 12 - stringWidth, y + 8, bindingColor);
    }

private void spawnWindow(int mouseX, int mouseY) {
AbstractWindow existingWindow = null;

for (AbstractWindow window : windowManager.getWindows()) {
if (window instanceof ModuleBindWindow) {
                existingWindow = window;
 break;
            }
        }


if (existingWindow != null) {
 windowManager.delete(existingWindow);
} else {
AbstractWindow moduleBindWindow = new ModuleBindWindow(module)
.position(mouseX + 5, mouseY + 5)
.size(105, 55)
.draggable(false);

 windowManager.add(moduleBindWindow);
        }
    }


@Override
    public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
        ModuleComponent that = (ModuleComponent) o;
return module.equals(that.module);
    }

@Override
    public int hashCode() {
return Objects.hash(module);
    }
}
Помогите уже всё испробовал но получаеться вот это (криво)

1759499778257.png
1759499762241.png

Если что мне надо в один столбец
 
Ты должен был кинуть CategoryComponent или где у тя лоадится все функции. Лезь в класс где лоад функций и ставь либо при лоаде: позиция Y нового модуля = Y предыдущего + высота предыдущего + отступ. Это сработает только если у тя высота модуля определяется в конструкторе, если в рендере, то при рендере модулей просто делай все то же что я уже описал
 
Ты должен был кинуть CategoryComponent или где у тя лоадится все функции. Лезь в класс где лоад функций и ставь либо при лоаде: позиция Y нового модуля = Y предыдущего + высота предыдущего + отступ. Это сработает только если у тя высота модуля определяется в конструкторе, если в рендере, то при рендере модулей просто делай все то же что я уже описал
Спасибо, попробую
 
Спасибо, попробую
Ты делаешь либо
ModuleComponent:
Expand Collapse Copy
public ModuleComponent(Module module, float x, float y) {
    this.module = module;

     new SettingComponentAdder().addSettingComponent(
                module.settings(),
                components
    );
    this.height = getComponentHeight();
    this.x = x;
    this.y = y;
}
+
CategoryComponent:
Expand Collapse Copy
public CategoryComponent(Category category) {

    // твой весь код кроме лоада функций если он есть
    float offsetY = clickgui.getY() + 25; // начальный Y функций
    for(Module m : ModuleManager.getModulesByCategory(category)) {
        ModuleComponent module = new ModuleComponent(m, this.x + this.width + 50, offsetY);
        modules.add(module);
        offsetY    += module.getHeight() + 5;
    }
}

либо же при рендере что по идеи еще проще

CategoryComponent:
Expand Collapse Copy
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
    // рендер самой панельки
    
    int id = 0;
    for(ModuleComponent module : modules) {
        module.setY(id == 0 ? clickgui.getY() + 25 : modules.get(id - 1).getY() + modules.get(id - 1).getHeight + 5);
        module.render(context, mouseX, mouseY, delta);
        id++;
    }
}
 
Ты делаешь либо
ModuleComponent:
Expand Collapse Copy
public ModuleComponent(Module module, float x, float y) {
    this.module = module;

     new SettingComponentAdder().addSettingComponent(
                module.settings(),
                components
    );
    this.height = getComponentHeight();
    this.x = x;
    this.y = y;
}
+
CategoryComponent:
Expand Collapse Copy
public CategoryComponent(Category category) {

    // твой весь код кроме лоада функций если он есть
    float offsetY = clickgui.getY() + 25; // начальный Y функций
    for(Module m : ModuleManager.getModulesByCategory(category)) {
        ModuleComponent module = new ModuleComponent(m, this.x + this.width + 50, offsetY);
        modules.add(module);
        offsetY    += module.getHeight() + 5;
    }
}

либо же при рендере что по идеи еще проще

CategoryComponent:
Expand Collapse Copy
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
    // рендер самой панельки
   
    int id = 0;
    for(ModuleComponent module : modules) {
        module.setY(id == 0 ? clickgui.getY() + 25 : modules.get(id - 1).getY() + modules.get(id - 1).getHeight + 5);
        module.render(context, mouseX, mouseY, delta);
        id++;
    }
}
Я по-другому сделал уже, но всё равно спасибо
 
Назад
Сверху Снизу