From 97f788ecd4be15b1556ee1f3d8bd057bdf06bf5f Mon Sep 17 00:00:00 2001 From: DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> Date: Wed, 17 Aug 2022 17:43:23 +0200 Subject: Input revamp (#93) * hud fix * api * things * stuff --- .../cc/polyfrost/oneconfig/utils/gui/GuiUtils.java | 10 +++ .../polyfrost/oneconfig/utils/gui/OneUIScreen.java | 97 ++++++---------------- 2 files changed, 35 insertions(+), 72 deletions(-) (limited to 'src/main/java/cc/polyfrost/oneconfig/utils/gui') diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/gui/GuiUtils.java b/src/main/java/cc/polyfrost/oneconfig/utils/gui/GuiUtils.java index e3dffb6..71bba26 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/gui/GuiUtils.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/gui/GuiUtils.java @@ -41,6 +41,7 @@ import cc.polyfrost.oneconfig.utils.TickDelay; public final class GuiUtils { private static long time = -1L; private static long deltaTime = 17L; + private static boolean wasMouseDown = false; static { EventManager.INSTANCE.register(new GuiUtils()); @@ -86,6 +87,13 @@ public final class GuiUtils { return deltaTime; } + /** + * @return If the mouse was down last frame + */ + public static boolean wasMouseDown() { + return wasMouseDown; + } + @Subscribe private void onRenderEvent(RenderEvent event) { if (event.stage == Stage.START) { @@ -95,6 +103,8 @@ public final class GuiUtils { deltaTime = currentTime - time; time = currentTime; } + } else if (event.stage == Stage.END) { + wasMouseDown = Platform.getMousePlatform().isButtonDown(0); } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/utils/gui/OneUIScreen.java b/src/main/java/cc/polyfrost/oneconfig/utils/gui/OneUIScreen.java index 5f93c7b..45242b2 100644 --- a/src/main/java/cc/polyfrost/oneconfig/utils/gui/OneUIScreen.java +++ b/src/main/java/cc/polyfrost/oneconfig/utils/gui/OneUIScreen.java @@ -28,115 +28,68 @@ package cc.polyfrost.oneconfig.utils.gui; import cc.polyfrost.oneconfig.gui.GuiPause; import cc.polyfrost.oneconfig.libs.universal.UMatrixStack; +import cc.polyfrost.oneconfig.libs.universal.UResolution; import cc.polyfrost.oneconfig.libs.universal.UScreen; -import cc.polyfrost.oneconfig.platform.Platform; import cc.polyfrost.oneconfig.renderer.RenderManager; -import cc.polyfrost.oneconfig.utils.InputUtils; +import cc.polyfrost.oneconfig.utils.InputHandler; import org.jetbrains.annotations.NotNull; /** *
It also contains methods for mouse input. (see {@link InputUtils} for more utils). + * It contains many handy methods for rendering, including {@link #draw(long, float, InputHandler)} for drawing using OneConfig's {@link RenderManager}. + *
It also contains methods for mouse input. (see {@link InputHandler} for more utils). *
* Use GuiUtils to display a screen; and GuiUtils.closeScreen to close it. */ public abstract class OneUIScreen extends UScreen implements GuiPause { - private boolean mouseDown; - private boolean blockClicks; + private final boolean useMinecraftScale; + private final InputHandler inputHandler = new InputHandler(); /** * Create a new OneUIScreen. * + * @param useMinecraftScale wether to use Minecraft scale * @param restoreGuiOnClose use this to declare weather or not to open the Gui that was open before it when this screen is closed. */ - public OneUIScreen(boolean restoreGuiOnClose) { + public OneUIScreen(boolean useMinecraftScale, boolean restoreGuiOnClose) { super(restoreGuiOnClose); + this.useMinecraftScale = useMinecraftScale; + } + + /** + * Create a new OneUIScreen. + * + * @param useMinecraftScale wether to use Minecraft scale + */ + public OneUIScreen(boolean useMinecraftScale) { + this(useMinecraftScale, false); } /** * Create a new OneUIScreen. */ public OneUIScreen() { - super(false); + this(false, false); } @Override public final void onDrawScreen(@NotNull UMatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { super.onDrawScreen(matrixStack, mouseX, mouseY, partialTicks); - RenderManager.setupAndDraw(ignoreMinecraftScale(), vg -> draw(vg, partialTicks)); - mouseDown = Platform.getMousePlatform().isButtonDown(0); + if (useMinecraftScale) inputHandler.scale(UResolution.getScaleFactor(), UResolution.getScaleFactor()); + RenderManager.setupAndDraw(useMinecraftScale, vg -> draw(vg, partialTicks, inputHandler)); } - /** * Use this method to draw things on the screen. It is called every render tick, and has a handyvg (NanoVG context) that can be used with the {@link RenderManager} to draw things.
*
* For example: {@link RenderManager#drawRoundedRect(long, float, float, float, float, int, float)}
*
- * @param vg the NanoVG context you can use to render things with
- * @param partialTicks the time between ticks (You can use this as a deltaTime equivalent)
- */
- public abstract void draw(long vg, float partialTicks);
-
- /**
- * Use this method to set whether to use the Minecraft scale on the GUI. Its default is true, and that is recommended for the NanoVG rendering.
- */
- public boolean ignoreMinecraftScale() {
- return true;
- }
-
- /**
- * Get the current x position of the mouse.
- */
- protected float getMouseX() {
- return InputUtils.mouseX();
- }
-
- /**
- * Get the current y position of the mouse.
- */
- protected float getMouseY() {
- return InputUtils.mouseY();
- }
-
- /**
- * Retrieve the click status of the mouse. This method uses a boolean to store the status of the mouse, so it will only return true once per click. (very useful)
- *
- * @param ignoreBlockClicks whether to ignore the current click blocker.
- */
- protected boolean isClicked(boolean ignoreBlockClicks) {
- return mouseDown && !Platform.getMousePlatform().isButtonDown(0) && (!blockClicks || ignoreBlockClicks);
- }
-
- /**
- * Retrieve the click status of the mouse. This method uses a boolean to store the status of the mouse, so it will only return true once per click. (very useful)
- */
- protected boolean isClicked() {
- return isClicked(false);
- }
-
- /**
- * Retrieve weather or not the mouse is currently down. Will constantly return true if its clicked. See {@link #isClicked()} for a method that only executes once per tick.
- */
- protected boolean isMouseDown() {
- return Platform.getMousePlatform().isButtonDown(0);
- }
-
- /**
- * Click blocking can be useful when you are drawing buttons for example over the top of other elements, so a click blocker can be used to ensure that the mouse doesn't click through things.
+ * @param vg The NanoVG context you can use to render things with
+ * @param partialTicks The time between ticks (You can use this as a deltaTime equivalent)
+ * @param inputHandler The input handler
*/
- public void shouldBlockClicks(boolean state) {
- blockClicks = state;
- }
-
- /**
- * Click blocking can be useful when you are drawing buttons for example over the top of other elements, so a click blocker can be used to ensure that the mouse doesn't click through things.
- */
- public boolean isBlockingClicks() {
- return blockClicks;
- }
+ public abstract void draw(long vg, float partialTicks, InputHandler inputHandler);
@Override
public boolean doesGuiPauseGame() {
--
cgit