forked from Clones/Controlify
➕ Custom button guide HUD scaling
This commit is contained in:
@ -1,5 +1,8 @@
|
||||
package dev.isxander.controlify.gui.guide;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
import com.mojang.blaze3d.vertex.VertexSorting;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.api.bind.ControllerBinding;
|
||||
import dev.isxander.controlify.api.guide.ActionPriority;
|
||||
import dev.isxander.controlify.api.guide.GuideActionNameSupplier;
|
||||
@ -20,6 +23,7 @@ import net.minecraft.world.entity.projectile.ProjectileUtil;
|
||||
import net.minecraft.world.item.ElytraItem;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.phys.*;
|
||||
import org.joml.Matrix4f;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -46,8 +50,8 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
||||
|
||||
leftLayout = new PositionedComponent<>(
|
||||
ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder()
|
||||
.spacing(2)
|
||||
.colPadding(4, 4)
|
||||
.spacing(1)
|
||||
.colPadding(2, 2)
|
||||
.elementPosition(ColumnLayoutComponent.ElementPosition.LEFT)
|
||||
.elements(leftGuides.stream().map(guide -> new GuideActionRenderer<>(guide, false, true)).toList())
|
||||
.build(),
|
||||
@ -58,8 +62,8 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
||||
|
||||
rightLayout = new PositionedComponent<>(
|
||||
ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder()
|
||||
.spacing(2)
|
||||
.colPadding(4, 4)
|
||||
.spacing(1)
|
||||
.colPadding(2, 2)
|
||||
.elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT)
|
||||
.elements(rightGuides.stream().map(guide -> new GuideActionRenderer<>(guide, true, true)).toList())
|
||||
.build(),
|
||||
@ -73,12 +77,30 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
||||
if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug)
|
||||
return;
|
||||
|
||||
float scale = Controlify.instance().config().globalSettings().ingameButtonGuideScale;
|
||||
boolean customScale = scale != 1f;
|
||||
|
||||
Matrix4f prevProjection = null;
|
||||
if (customScale) {
|
||||
prevProjection = RenderSystem.getProjectionMatrix();
|
||||
double guiScale = minecraft.getWindow().getGuiScale() * scale;
|
||||
Matrix4f matrix4f = new Matrix4f()
|
||||
.setOrtho(
|
||||
0.0F, (float)((double)minecraft.getWindow().getWidth() / guiScale), (float)((double)minecraft.getWindow().getHeight() / guiScale), 0.0F, 1000.0F, 21000.0F
|
||||
);
|
||||
RenderSystem.setProjectionMatrix(matrix4f, VertexSorting.ORTHOGRAPHIC_Z);
|
||||
}
|
||||
|
||||
ControlifyCompat.ifBeginHudBatching();
|
||||
|
||||
leftLayout.renderComponent(graphics, tickDelta);
|
||||
rightLayout.renderComponent(graphics, tickDelta);
|
||||
|
||||
ControlifyCompat.ifEndHudBatching();
|
||||
|
||||
if (customScale) {
|
||||
RenderSystem.setProjectionMatrix(prevProjection, VertexSorting.ORTHOGRAPHIC_Z);
|
||||
}
|
||||
}
|
||||
|
||||
public void tick() {
|
||||
@ -87,8 +109,12 @@ public class InGameButtonGuide implements IngameGuideRegistry {
|
||||
leftLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context));
|
||||
rightLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context));
|
||||
|
||||
leftLayout.updatePosition();
|
||||
rightLayout.updatePosition();
|
||||
double guiScale = minecraft.getWindow().getGuiScale() * Controlify.instance().config().globalSettings().ingameButtonGuideScale;
|
||||
int width = (int) (minecraft.getWindow().getWidth() / guiScale);
|
||||
int height = (int) (minecraft.getWindow().getHeight() / guiScale);
|
||||
|
||||
leftLayout.updatePosition(width, height);
|
||||
rightLayout.updatePosition(width, height);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -22,10 +22,10 @@ public class PositionedComponent<T extends RenderComponent> implements Renderabl
|
||||
this.origin = origin;
|
||||
}
|
||||
|
||||
public void updatePosition() {
|
||||
public void updatePosition(int windowWidth, int windowHeight) {
|
||||
Vector2ic componentSize = component.size();
|
||||
|
||||
Vector2ic windowPosition = windowAnchor.getAnchorPosition(Minecraft.getInstance().getWindow().getGuiScaledWidth(), Minecraft.getInstance().getWindow().getGuiScaledHeight());
|
||||
Vector2ic windowPosition = windowAnchor.getAnchorPosition(windowWidth, windowHeight);
|
||||
Vector2ic anchoredPosition = origin.getAnchorPosition(componentSize.x(), componentSize.y());
|
||||
|
||||
this.x = windowPosition.x() + offsetX - anchoredPosition.x();
|
||||
|
@ -8,6 +8,7 @@ import dev.isxander.controlify.reacharound.ReachAroundMode;
|
||||
import dev.isxander.yacl3.api.*;
|
||||
import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
|
||||
import dev.isxander.yacl3.api.controller.EnumControllerBuilder;
|
||||
import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder;
|
||||
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.Util;
|
||||
@ -88,6 +89,18 @@ public class GlobalSettingsScreenFactory {
|
||||
.binding(GlobalSettings.DEFAULT.keyboardMovement, () -> globalSettings.keyboardMovement, v -> globalSettings.keyboardMovement = v)
|
||||
.controller(TickBoxControllerBuilder::create)
|
||||
.build())
|
||||
.option(Option.<Float>createBuilder()
|
||||
.name(Component.translatable("controlify.gui.ingame_button_guide_scale"))
|
||||
.description(val -> OptionDescription.createBuilder()
|
||||
.text(Component.translatable("controlify.gui.ingame_button_guide_scale.tooltip"))
|
||||
.text(val != 1f ? Component.translatable("controlify.gui.ingame_button_guide_scale.tooltip.warning").withStyle(ChatFormatting.RED) : Component.empty())
|
||||
.build())
|
||||
.binding(GlobalSettings.DEFAULT.ingameButtonGuideScale, () -> globalSettings.ingameButtonGuideScale, v -> globalSettings.ingameButtonGuideScale = v)
|
||||
.controller(opt -> FloatSliderControllerBuilder.create(opt)
|
||||
.range(0.5f, 1.5f)
|
||||
.step(0.05f)
|
||||
.valueFormatter(v -> Component.literal(String.format("%.0f%%", v*100))))
|
||||
.build())
|
||||
.option(ButtonOption.createBuilder()
|
||||
.name(Component.translatable("controlify.gui.open_issue_tracker"))
|
||||
.action((screen, button) -> Util.getPlatform().openUri("https://github.com/isxander/controlify/issues"))
|
||||
|
Reference in New Issue
Block a user