1
0
forked from Clones/Controlify

Custom button guide HUD scaling

This commit is contained in:
isXander
2023-06-21 19:07:02 +01:00
parent b370572dcc
commit 1e6db9d83b
6 changed files with 53 additions and 10 deletions

View File

@ -22,4 +22,5 @@ public class GlobalSettings {
public boolean uiSounds = false; public boolean uiSounds = false;
public boolean notifyLowBattery = true; public boolean notifyLowBattery = true;
public boolean delegateSetup = false; public boolean delegateSetup = false;
public float ingameButtonGuideScale = 1f;
} }

View File

@ -1,5 +1,8 @@
package dev.isxander.controlify.gui.guide; 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.bind.ControllerBinding;
import dev.isxander.controlify.api.guide.ActionPriority; import dev.isxander.controlify.api.guide.ActionPriority;
import dev.isxander.controlify.api.guide.GuideActionNameSupplier; 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.ElytraItem;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
import net.minecraft.world.phys.*; import net.minecraft.world.phys.*;
import org.joml.Matrix4f;
import java.util.*; import java.util.*;
@ -46,8 +50,8 @@ public class InGameButtonGuide implements IngameGuideRegistry {
leftLayout = new PositionedComponent<>( leftLayout = new PositionedComponent<>(
ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder() ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder()
.spacing(2) .spacing(1)
.colPadding(4, 4) .colPadding(2, 2)
.elementPosition(ColumnLayoutComponent.ElementPosition.LEFT) .elementPosition(ColumnLayoutComponent.ElementPosition.LEFT)
.elements(leftGuides.stream().map(guide -> new GuideActionRenderer<>(guide, false, true)).toList()) .elements(leftGuides.stream().map(guide -> new GuideActionRenderer<>(guide, false, true)).toList())
.build(), .build(),
@ -58,8 +62,8 @@ public class InGameButtonGuide implements IngameGuideRegistry {
rightLayout = new PositionedComponent<>( rightLayout = new PositionedComponent<>(
ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder() ColumnLayoutComponent.<GuideActionRenderer<IngameGuideContext>>builder()
.spacing(2) .spacing(1)
.colPadding(4, 4) .colPadding(2, 2)
.elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT) .elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT)
.elements(rightGuides.stream().map(guide -> new GuideActionRenderer<>(guide, true, true)).toList()) .elements(rightGuides.stream().map(guide -> new GuideActionRenderer<>(guide, true, true)).toList())
.build(), .build(),
@ -73,12 +77,30 @@ public class InGameButtonGuide implements IngameGuideRegistry {
if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug) if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug)
return; 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(); ControlifyCompat.ifBeginHudBatching();
leftLayout.renderComponent(graphics, tickDelta); leftLayout.renderComponent(graphics, tickDelta);
rightLayout.renderComponent(graphics, tickDelta); rightLayout.renderComponent(graphics, tickDelta);
ControlifyCompat.ifEndHudBatching(); ControlifyCompat.ifEndHudBatching();
if (customScale) {
RenderSystem.setProjectionMatrix(prevProjection, VertexSorting.ORTHOGRAPHIC_Z);
}
} }
public void tick() { public void tick() {
@ -87,8 +109,12 @@ public class InGameButtonGuide implements IngameGuideRegistry {
leftLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context)); leftLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context));
rightLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context)); rightLayout.getComponent().getChildComponents().forEach(renderer -> renderer.updateName(context));
leftLayout.updatePosition(); double guiScale = minecraft.getWindow().getGuiScale() * Controlify.instance().config().globalSettings().ingameButtonGuideScale;
rightLayout.updatePosition(); int width = (int) (minecraft.getWindow().getWidth() / guiScale);
int height = (int) (minecraft.getWindow().getHeight() / guiScale);
leftLayout.updatePosition(width, height);
rightLayout.updatePosition(width, height);
} }
@Override @Override

View File

@ -22,10 +22,10 @@ public class PositionedComponent<T extends RenderComponent> implements Renderabl
this.origin = origin; this.origin = origin;
} }
public void updatePosition() { public void updatePosition(int windowWidth, int windowHeight) {
Vector2ic componentSize = component.size(); 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()); Vector2ic anchoredPosition = origin.getAnchorPosition(componentSize.x(), componentSize.y());
this.x = windowPosition.x() + offsetX - anchoredPosition.x(); this.x = windowPosition.x() + offsetX - anchoredPosition.x();

View File

@ -8,6 +8,7 @@ import dev.isxander.controlify.reacharound.ReachAroundMode;
import dev.isxander.yacl3.api.*; import dev.isxander.yacl3.api.*;
import dev.isxander.yacl3.api.controller.BooleanControllerBuilder; import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
import dev.isxander.yacl3.api.controller.EnumControllerBuilder; import dev.isxander.yacl3.api.controller.EnumControllerBuilder;
import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder;
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder; import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.Util; import net.minecraft.Util;
@ -88,6 +89,18 @@ public class GlobalSettingsScreenFactory {
.binding(GlobalSettings.DEFAULT.keyboardMovement, () -> globalSettings.keyboardMovement, v -> globalSettings.keyboardMovement = v) .binding(GlobalSettings.DEFAULT.keyboardMovement, () -> globalSettings.keyboardMovement, v -> globalSettings.keyboardMovement = v)
.controller(TickBoxControllerBuilder::create) .controller(TickBoxControllerBuilder::create)
.build()) .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() .option(ButtonOption.createBuilder()
.name(Component.translatable("controlify.gui.open_issue_tracker")) .name(Component.translatable("controlify.gui.open_issue_tracker"))
.action((screen, button) -> Util.getPlatform().openUri("https://github.com/isxander/controlify/issues")) .action((screen, button) -> Util.getPlatform().openUri("https://github.com/isxander/controlify/issues"))

View File

@ -81,8 +81,8 @@ public class AbstractContainerScreenProcessor<T extends AbstractContainerScreen<
} }
} }
leftLayout.updatePosition(); leftLayout.updatePosition(screen.width, screen.height);
rightLayout.updatePosition(); rightLayout.updatePosition(screen.width, screen.height);
} }
} }

View File

@ -28,6 +28,9 @@
"controlify.gui.out_of_focus_input.tooltip": "If enabled, Controlify will still receive input even if the game window is not focused.", "controlify.gui.out_of_focus_input.tooltip": "If enabled, Controlify will still receive input even if the game window is not focused.",
"controlify.gui.keyboard_movement": "Keyboard-like Movement", "controlify.gui.keyboard_movement": "Keyboard-like Movement",
"controlify.gui.keyboard_movement.tooltip": "Emulates keyboard WASD when using analog inputs like a thumbstick. This also applies to boat handling. This may be required on servers with harsh anti-cheats.", "controlify.gui.keyboard_movement.tooltip": "Emulates keyboard WASD when using analog inputs like a thumbstick. This also applies to boat handling. This may be required on servers with harsh anti-cheats.",
"controlify.gui.ingame_button_guide_scale": "Ingame Button Guide Scale",
"controlify.gui.ingame_button_guide_scale.tooltip": "How big the ingame button guide is. This is a percentage of the currently selected GUI scale. 100% will match the usual scale.",
"controlify.gui.ingame_button_guide_scale.tooltip.warning": "This may cause scaling issues that will make it to look bad at anything but 100%.",
"controlify.gui.open_issue_tracker": "Open Issue Tracker", "controlify.gui.open_issue_tracker": "Open Issue Tracker",
"controlify.gui.battery_level": "Your controller battery is currently %s.", "controlify.gui.battery_level": "Your controller battery is currently %s.",