diff options
author | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-06-01 18:03:12 +0100 |
---|---|---|
committer | nextdaydelivery <79922345+nxtdaydelivery@users.noreply.github.com> | 2022-06-01 18:03:12 +0100 |
commit | edcd817d9d6b2493ee76a15d12f21696a99a2d34 (patch) | |
tree | d1056ebe7abdff4c5f91a4b129c0d6a5684a8b77 /src/main/java/cc/polyfrost/oneconfig/gui | |
parent | 68cc66b387a8a6a226289132dea331e6ecf3f76b (diff) | |
parent | 53494fad20feed812735b36dea31c6b0656bb104 (diff) | |
download | OneConfig-edcd817d9d6b2493ee76a15d12f21696a99a2d34.tar.gz OneConfig-edcd817d9d6b2493ee76a15d12f21696a99a2d34.tar.bz2 OneConfig-edcd817d9d6b2493ee76a15d12f21696a99a2d34.zip |
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'src/main/java/cc/polyfrost/oneconfig/gui')
5 files changed, 138 insertions, 23 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java index a78ab12..63fbd39 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java @@ -2,6 +2,8 @@ package cc.polyfrost.oneconfig.gui; import cc.polyfrost.oneconfig.config.OneConfigConfig; import cc.polyfrost.oneconfig.config.core.OneColor; +import cc.polyfrost.oneconfig.gui.animations.Animation; +import cc.polyfrost.oneconfig.gui.animations.EaseInOutQuad; import cc.polyfrost.oneconfig.gui.elements.BasicElement; import cc.polyfrost.oneconfig.gui.elements.ColorSelector; import cc.polyfrost.oneconfig.gui.elements.text.TextInputField; @@ -26,7 +28,6 @@ public class OneConfigGui extends UScreen { private final SideBar sideBar = new SideBar(); protected Page currentPage; protected Page prevPage; - private float pageProgress = -224f; private final TextInputField textInputField = new TextInputField(248, 40, "Search...", false, false, SVGs.MAGNIFYING_GLASS_BOLD); private final ArrayList<Page> previousPages = new ArrayList<>(); private final ArrayList<Page> nextPages = new ArrayList<>(); @@ -40,6 +41,7 @@ public class OneConfigGui extends UScreen { private long time = -1L; private long deltaTime = 17L; public boolean allowClose = true; + private Animation animation; public OneConfigGui() { INSTANCE = this; @@ -54,9 +56,10 @@ public class OneConfigGui extends UScreen { public static OneConfigGui create() { try { - return instanceToRestore == null ? new OneConfigGui() : instanceToRestore; + //return instanceToRestore == null ? new OneConfigGui() : instanceToRestore; + return new OneConfigGui(); } finally { - if (instanceToRestore != null) INSTANCE = instanceToRestore; + //if (instanceToRestore != null) INSTANCE = instanceToRestore; instanceToRestore = null; } } @@ -138,17 +141,15 @@ public class OneConfigGui extends UScreen { } ScissorManager.scissor(vg, x + 224, y + 88, 1056, 698); - if (prevPage != null) { - pageProgress = MathUtils.easeInOutCirc(50, pageProgress, 832 - pageProgress, 600); - prevPage.scrollWithDraw(vg, (int) (x - pageProgress), y + 72); - RenderManager.drawLine(vg, (int) (x - pageProgress + 1055), y + 72, (int) (x - pageProgress + 1057), y + 800, 2, OneConfigConfig.GRAY_700); // TODO might remove this - currentPage.scrollWithDraw(vg, (int) (x - pageProgress + 1056), y + 72); - if (pageProgress > 830f) { // this number is the 'snap' point of the page + if (prevPage != null && animation != null) { + float pageProgress = animation.get(deltaTime); + prevPage.scrollWithDraw(vg, (int) (x + pageProgress), y + 72); + currentPage.scrollWithDraw(vg, (int) (x - 1904 + pageProgress), y + 72); + if (animation.isFinished()) { prevPage = null; - pageProgress = -224f; } } else { - currentPage.scrollWithDraw(vg, (int) (x - pageProgress), y + 72); + currentPage.scrollWithDraw(vg, x + 224, y + 72); } ScissorManager.clearScissors(vg); @@ -196,6 +197,9 @@ public class OneConfigGui extends UScreen { } public void openPage(@NotNull Page page, boolean addToPrevious) { + openPage(page, new EaseInOutQuad(300, 224, 2128, false), true); + } + public void openPage(@NotNull Page page, Animation animation, boolean addToPrevious) { if (page == currentPage) return; currentPage.finishUpAndClose(); if (!page.isBase()) { @@ -221,6 +225,7 @@ public class OneConfigGui extends UScreen { prevPage = currentPage; } currentPage = page; + this.animation = animation; } /** @@ -255,11 +260,13 @@ public class OneConfigGui extends UScreen { public String getSearchValue() { return textInputField.getInput(); } - public long getDeltaTime() { return deltaTime; } + public static long getDeltaTimeNullSafe() { + return OneConfigGui.INSTANCE == null ? 17 : OneConfigGui.INSTANCE.getDeltaTime(); + } @Override public boolean doesGuiPauseGame() { return false; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java index f4da715..0558799 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java @@ -1,6 +1,8 @@ package cc.polyfrost.oneconfig.gui; import cc.polyfrost.oneconfig.config.OneConfigConfig; +import cc.polyfrost.oneconfig.gui.animations.Animation; +import cc.polyfrost.oneconfig.gui.animations.EaseInOutQuart; import cc.polyfrost.oneconfig.gui.elements.BasicButton; import cc.polyfrost.oneconfig.gui.pages.CreditsPage; import cc.polyfrost.oneconfig.gui.pages.ModsPage; @@ -30,14 +32,36 @@ public class SideBar { private final BasicButton HUDButton = new BasicButton(192, SIZE_36, "Edit HUD", SVGs.NOTE_PENCIL_BOLD, null, ALIGNMENT_LEFT, ColorPalette.SECONDARY); private final BasicButton CloseButton = new BasicButton(192, SIZE_36, "Close", SVGs.X_CIRCLE_BOLD, null, ALIGNMENT_LEFT, ColorPalette.SECONDARY_DESTRUCTIVE); + private int selected = 2; + private Animation moveAnimation = null; + public SideBar() { buttons.get(0).setClickAction(new CreditsPage()); buttons.get(2).setClickAction(new ModsPage()); HUDButton.setClickAction(() -> GuiUtils.displayScreen(new HudGui())); CloseButton.setClickAction(GuiUtils::closeScreen); + for (int i = 0; i < buttons.size(); i++) { + if (i == 0 || i == 2) continue; + buttons.get(i).disable(true); + } } public void draw(long vg, int x, int y) { + for (BasicButton button : buttons) { + if (!button.isClicked()) continue; + if (button.equals(buttons.get(selected))) break; + buttons.get(selected).setColorPalette(ColorPalette.TERTIARY); + moveAnimation = new EaseInOutQuart(300, buttons.get(selected).x, button.x, false); + selected = buttons.indexOf(button); + } + if (moveAnimation != null) { + RenderManager.drawRoundedRect(vg, x + 16, moveAnimation.get(), 192, 36, OneConfigConfig.PRIMARY_600, 12); + if (moveAnimation.isFinished()) { + moveAnimation = null; + buttons.get(selected).setColorPalette(ColorPalette.PRIMARY); + } + } + buttons.get(0).draw(vg, x + 16, y + 80); buttons.get(1).draw(vg, x + 16, y + 116); RenderManager.drawText(vg, "MOD CONFIG", x + 16, y + 178, OneConfigConfig.WHITE, 12, Fonts.SEMIBOLD); @@ -51,16 +75,5 @@ public class SideBar { buttons.get(8).draw(vg, x + 16, y + 448); HUDButton.draw(vg, x + 16, y + 704); CloseButton.draw(vg, x + 16, y + 748); - - for (BasicButton button : buttons) { - if (button.isClicked()) { - button.setColorPalette(ColorPalette.PRIMARY); - for (BasicButton button1 : buttons) { - if (button.equals(button1)) continue; - button1.setColorPalette(ColorPalette.TERTIARY); - } - break; - } - } } } diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/animations/Animation.java b/src/main/java/cc/polyfrost/oneconfig/gui/animations/Animation.java new file mode 100644 index 0000000..894be2a --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/gui/animations/Animation.java @@ -0,0 +1,49 @@ +package cc.polyfrost.oneconfig.gui.animations; + +import cc.polyfrost.oneconfig.gui.OneConfigGui; + +public abstract class Animation { + private final int duration; + private final float start; + private final float change; + private long timePassed = 0; + + /** + * @param duration The duration of the animation + * @param start The start of the animation + * @param end The end of the animation + * @param reverse Reverse the animation + */ + public Animation(int duration, float start, float end, boolean reverse) { + this.duration = duration; + this.start = start; + if (!reverse) this.change = end - start; + else this.change = start - end; + } + + /** + * @param deltaTime The time since the last frame + * @return The new value + */ + public float get(long deltaTime) { + timePassed += deltaTime; + if (timePassed >= duration) return start + change; + return animate(timePassed, duration, start, change); + } + + /** + * @return The new value + */ + public float get() { + return get(OneConfigGui.getDeltaTimeNullSafe()); + } + + /** + * @return If the animation is finished or not + */ + public boolean isFinished() { + return timePassed >= duration; + } + + protected abstract float animate(long timePassed, int duration, float start, float change); +} diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuad.java b/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuad.java new file mode 100644 index 0000000..14e802f --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuad.java @@ -0,0 +1,23 @@ +package cc.polyfrost.oneconfig.gui.animations; + +public class EaseInOutQuad extends Animation{ + + /** + * @param duration The duration of the animation + * @param start The start of the animation + * @param end The end of the animation + * @param reverse Reverse the animation + */ + public EaseInOutQuad(int duration, float start, float end, boolean reverse) { + super(duration, start, end, reverse); + } + + /** + * Adapted from <a href="https://github.com/jesusgollonet/processing-penner-easing">https://github.com/jesusgollonet/processing-penner-easing</a> + */ + @Override + protected float animate(long timePassed, int duration, float start, float change) { + if ((timePassed /= duration / 2) < 1) return change / 2 * timePassed * timePassed + start;; + return -change / 2 * ((--timePassed) * (timePassed - 2) - 1) + start; + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuart.java b/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuart.java new file mode 100644 index 0000000..55c1cad --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/gui/animations/EaseInOutQuart.java @@ -0,0 +1,23 @@ +package cc.polyfrost.oneconfig.gui.animations; + +public class EaseInOutQuart extends Animation{ + + /** + * @param duration The duration of the animation + * @param start The start of the animation + * @param end The end of the animation + * @param reverse Reverse the animation + */ + public EaseInOutQuart(int duration, float start, float end, boolean reverse) { + super(duration, start, end, reverse); + } + + /** + * Adapted from <a href="https://github.com/jesusgollonet/processing-penner-easing">https://github.com/jesusgollonet/processing-penner-easing</a> + */ + @Override + protected float animate(long timePassed, int duration, float start, float change) { + if ((timePassed /= duration / 2) < 1) return change / 2 * timePassed * timePassed * timePassed * timePassed + start; + return -change / 2 * ((timePassed -= 2) * timePassed * timePassed * timePassed - 2) + start; + } +} |