diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-12-25 18:59:49 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2024-04-16 00:38:17 +0900 |
| commit | 89d25568036a31f58fa40e3209a1b9dd05277c65 (patch) | |
| tree | b51387e3d136d5d459de54f79004bb58088d0db9 /runtime/src | |
| parent | b0b36e7b82272b938098fb700faea4af4ec253c9 (diff) | |
| download | RoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.tar.gz RoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.tar.bz2 RoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.zip | |
Fix #1281
Diffstat (limited to 'runtime/src')
16 files changed, 77 insertions, 32 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java index 7d37b43d1..cd173f9c5 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java @@ -123,7 +123,16 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Override public boolean isFavoritesAnimated() { - return basics.motion.favoritesAnimation; + return !basics.reduceMotion; + } + + @Override + public boolean isReducedMotion() { + return basics.reduceMotion; + } + + public boolean setReducedMotion(boolean reducedMotion) { + return basics.reduceMotion = reducedMotion; } @Override @@ -600,17 +609,12 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Comment("Declares whether cheating mode is on.") @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) private CheatingMode cheating = CheatingMode.OFF; private boolean favoritesEnabled = true; + private boolean reduceMotion = false; @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) private KeyBindings keyBindings = new KeyBindings(); @Comment("Declares whether REI is visible.") @ConfigEntry.Gui.Excluded private boolean overlayVisible = true; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) private ItemCheatingStyle cheatingStyle = ItemCheatingStyle.GRAB; - @ConfigEntry.Gui.CollapsibleObject - private Motion motion = new Motion(); - } - - public static class Motion { - private boolean favoritesAnimation = true; } public static class KeyBindings { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java index be54eeaf3..838c14516 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java @@ -30,6 +30,7 @@ import me.shedaniel.math.FloatingRectangle; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCoreClient; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.drag.DraggableBoundsProvider; import me.shedaniel.rei.api.client.gui.drag.DraggableStack; import me.shedaniel.rei.api.client.gui.drag.DraggedAcceptorResult; @@ -67,6 +68,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag @Override public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { Integer hash = null; + boolean reducedMotion = ConfigObject.getInstance().isReducedMotion(); if (entry != null) { if (!entry.dragging) { @@ -90,13 +92,13 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag int height = entry.component.getHeight(); Vec2 mouseStartOffset = entry.mouseStartOffset; entry.bounds.setTo(new FloatingRectangle(mouseX - width / 2 - mouseStartOffset.x, mouseY - height / 2 - mouseStartOffset.y, width, height), - 30); + reducedMotion ? 0 : 30); entry.component.render(matrices, entry.bounds.value().getBounds(), mouseX, mouseY, delta); matrices.popPose(); VoxelShape shape = entry.getBoundsProvider().bounds(); ShapeBounds shapeBounds = new ShapeBounds(shape); - shapeBounds.alpha.setTo(60, 300); + shapeBounds.alpha.setTo(60, reducedMotion ? 0 : 300); bounds.add(shapeBounds); hash = shapeBounds.hash; } @@ -108,7 +110,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag for (ShapeBounds bound : bounds) { if ((hash == null || hash != bound.hash) && bound.alpha.target() != 0) { - bound.alpha.setTo(0, 300); + bound.alpha.setTo(0, reducedMotion ? 0 : 300); } } @@ -228,6 +230,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag @Override public void renderBack(DraggableComponent<?> component, Point initialPosition, Supplier<Point> position) { + if (ConfigObject.getInstance().isReducedMotion()) return; int width = component.getWidth(); int height = component.getHeight(); backToOriginals.add(new RenderBackEntry(component, new Rectangle(initialPosition.x - width / 2, initialPosition.y - height / 2, width, height), () -> { @@ -238,6 +241,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag @Override public void renderBack(DraggableComponent<?> component, Rectangle initialPosition, Supplier<Rectangle> bounds) { + if (ConfigObject.getInstance().isReducedMotion()) return; backToOriginals.add(new RenderBackEntry(component, initialPosition, bounds)); } @@ -313,7 +317,7 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag public void update(double delta) { this.bounds.update(delta); - this.bounds.setTo(new FloatingRectangle(getPosition()), 200); + this.bounds.setTo(new FloatingRectangle(getPosition()), ConfigObject.getInstance().isReducedMotion() ? 0 : 200); } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java index 10023d7ee..fc21c7618 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java @@ -27,10 +27,13 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.clothconfig2.ClothConfigInitializer; import me.shedaniel.clothconfig2.api.ScissorsHandler; +import me.shedaniel.clothconfig2.api.animator.ValueAnimator; import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer; +import me.shedaniel.math.FloatingRectangle; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import me.shedaniel.rei.impl.client.gui.ScreenOverlayImpl; @@ -42,16 +45,13 @@ import org.jetbrains.annotations.ApiStatus; import java.util.Collection; import java.util.Comparator; import java.util.List; -import java.util.UUID; @ApiStatus.Internal public class Menu extends WidgetWithBounds implements LateRenderable { - public static final UUID WEATHER = UUID.randomUUID(); - public static final UUID GAME_TYPE = UUID.randomUUID(); - public final Point menuStartPoint; public final boolean facingRight; public final boolean facingDownwards; + public final ValueAnimator<FloatingRectangle> bounds = ValueAnimator.ofFloatingRectangle(); private final List<FavoriteMenuEntry> entries = Lists.newArrayList(); public final ScrollingContainer scrolling = new ScrollingContainer() { @Override @@ -91,6 +91,8 @@ public class Menu extends WidgetWithBounds implements LateRenderable { this.facingRight = facingRight; int x = facingRight ? menuStart.x : menuStart.getMaxX() - (getMaxEntryWidth() + 2 + (hasScrollBar ? 6 : 0)); this.menuStartPoint = new Point(x, y); + Rectangle createBounds = createBounds(); + this.bounds.setAs(new FloatingRectangle(facingRight ? createBounds.x : createBounds.getMaxX(), facingDownwards ? createBounds.y : createBounds.getMaxY(), 0.1, 0.1)); } private void buildEntries(Collection<FavoriteMenuEntry> entries, boolean sort) { @@ -110,11 +112,16 @@ public class Menu extends WidgetWithBounds implements LateRenderable { @Override public Rectangle getBounds() { + return bounds.value().getBounds(); + } + + public Rectangle createBounds() { return new Rectangle(menuStartPoint.x, menuStartPoint.y, getMaxEntryWidth() + 2 + (hasScrollBar() ? 6 : 0), getInnerHeight(menuStartPoint.y) + 2); } public Rectangle getInnerBounds() { - return new Rectangle(menuStartPoint.x + 1, menuStartPoint.y + 1, getMaxEntryWidth() + (hasScrollBar() ? 6 : 0), getInnerHeight(menuStartPoint.y)); + Rectangle rectangle = bounds.value().getBounds(); + return new Rectangle(rectangle.x + 1, rectangle.y + 1, rectangle.width - 2, rectangle.height - 2); } public boolean hasScrollBar() { @@ -136,6 +143,8 @@ public class Menu extends WidgetWithBounds implements LateRenderable { @Override public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { + this.bounds.setTo(createBounds().getFloatingBounds(), ConfigObject.getInstance().isReducedMotion() ? 0 : 300); + this.bounds.update(delta); Rectangle bounds = getBounds(); Rectangle innerBounds = getInnerBounds(); fill(matrices, bounds.x, bounds.y, bounds.getMaxX(), bounds.getMaxY(), containsMouse(mouseX, mouseY) ? (REIRuntime.getInstance().isDarkThemeEnabled() ? -17587 : -1) : -6250336); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubMenuEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubMenuEntry.java index 8b7d74e59..b1bbb679b 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubMenuEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubMenuEntry.java @@ -28,6 +28,8 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.clothconfig2.api.ScissorsHandler; +import me.shedaniel.math.FloatingRectangle; +import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.favorites.FavoriteMenuEntry; import me.shedaniel.rei.impl.client.gui.InternalTextures; @@ -109,8 +111,14 @@ public class SubMenuEntry extends AbstractMenuEntry { } boolean facingDownwards = fullHeight - menuStart.getMaxY() > menuStart.y; - menu.menuStartPoint.y = facingDownwards ? menuStart.y - 1 : menuStart.getMaxY() - (menu.scrolling.getMaxScrollHeight() + 1); - menu.menuStartPoint.x = facingRight ? menuStart.getMaxX() : menuStart.x - (menu.getMaxEntryWidth() + 2 + (menu.scrolling.getMaxScrollHeight() > menu.getInnerHeight(menu.menuStartPoint.y) ? 6 : 0)); + int newY = facingDownwards ? menuStart.y - 1 : menuStart.getMaxY() - (menu.scrolling.getMaxScrollHeight() + 1); + int newX = facingRight ? menuStart.getMaxX() : menuStart.x - (menu.getMaxEntryWidth() + 2 + (menu.scrolling.getMaxScrollHeight() > menu.getInnerHeight(menu.menuStartPoint.y) ? 6 : 0)); + + if (!menu.menuStartPoint.equals(new Point(newX, newY))) { + menu.menuStartPoint.setLocation(newX, newY); + Rectangle createBounds = menu.createBounds(); + menu.bounds.setAs(new FloatingRectangle(facingRight ? createBounds.x : createBounds.getMaxX(), facingDownwards ? createBounds.y : createBounds.getMaxY(), 0.1, 0.1)); + } List<Rectangle> areas = Lists.newArrayList(ScissorsHandler.INSTANCE.getScissorsAreas()); ScissorsHandler.INSTANCE.clearScissors(); @@ -119,6 +127,8 @@ public class SubMenuEntry extends AbstractMenuEntry { ScissorsHandler.INSTANCE.scissor(area); } } + } else { + this.childMenu = null; } font.draw(poses, text, getX() + 2, getY() + 2, isSelected() ? 16777215 : 8947848); if (!entries.isEmpty()) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java index ee7e01035..53cf7aca2 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java @@ -123,6 +123,10 @@ public class ConfigButtonWidget { return false; } ), + ToggleMenuEntry.of(new TranslatableComponent("text.rei.config.menu.reduced_motion"), + config::isReducedMotion, + config::setReducedMotion + ), ToggleMenuEntry.of(Component.translatable("text.rei.config.menu.craftable_filter"), config::isCraftableFilterEnabled, config::setCraftableFilterEnabled diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java index 528956896..be2cd68d9 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java @@ -31,6 +31,7 @@ import me.shedaniel.clothconfig2.api.scroll.ScrollingContainer; import me.shedaniel.math.FloatingPoint; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.RoughlyEnoughItemsCoreClient; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.widgets.CloseableScissors; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; @@ -84,7 +85,7 @@ public class OverflowWidget extends DelegateWidgetWithTranslate { this.velocity.setTo(new FloatingPoint( ScrollingContainer.handleBounceBack(this.velocity.target().x, 0, delta, .0001), ScrollingContainer.handleBounceBack(this.velocity.target().y, 0, delta, .0001) - ), 20); + ), ConfigObject.getInstance().isReducedMotion() ? 0 : 20); try (CloseableScissors scissors = scissor(poseStack, this.bounds)) { boolean containsMouse = this.bounds.contains(mouseX, mouseY); @@ -110,7 +111,7 @@ public class OverflowWidget extends DelegateWidgetWithTranslate { @Override public boolean mouseScrolled(double mouseX, double mouseY, double amount) { if (containsMouse(mouseX, mouseY)) { - this.scale.setTo(this.scale.target() + amount * -0.2f, 300); + this.scale.setTo(this.scale.target() + amount * -0.2f, ConfigObject.getInstance().isReducedMotion() ? 0 : 300); return true; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabContainerWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabContainerWidget.java index 0e9028a80..1498e70c7 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabContainerWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabContainerWidget.java @@ -59,6 +59,7 @@ public class TabContainerWidget extends GuiComponent { } public void updateScroll(List<DisplayCategory<?>> categories, int selectedCategory, long duration) { + if (ConfigObject.getInstance().isReducedMotion()) duration = 0; this.initTabsVariables(); if (categories.size() <= tabsPerPage) { scrollAnimator.setAs(0d); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java index e0ae8cd41..3c1e08697 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java @@ -32,6 +32,7 @@ import me.shedaniel.math.Dimension; import me.shedaniel.math.FloatingRectangle; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.widgets.*; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; @@ -109,7 +110,7 @@ public class DisplayEntry extends WidgetWithBounds { float y = parentBounds.getCenterY() - displayBounds.height / 2 * scale; FloatingRectangle newBounds = new Rectangle(x, y, displayBounds.width * scale, displayBounds.height * scale).getFloatingBounds(); if (hasInitialBounds) { - if (this.size.width == 1 && this.size.height == 1) { + if (this.size.width == 1 && this.size.height == 1 && !ConfigObject.getInstance().isReducedMotion()) { this.bounds.setTo(newBounds, 700); } else { this.bounds.setAs(newBounds); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java index 7ba8aec1a..b93c8f6a7 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java @@ -113,7 +113,9 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC if (entries.isEmpty() && draggingDisplay && Math.round(onBoardingHeight) > 0) { double lastProgress = Math.pow(Mth.clamp(onBoardingHeight / Math.min(parent.excludedBounds.height, 80D), 0, 1), 7); - int alpha = (int) (0x50 * lastProgress) + (int) (0x42 * lastProgress * (Mth.cos((float) (System.currentTimeMillis() % 1000 / 500F * Math.PI)) + 1) / 2); + float opacity = (Mth.cos((float) (System.currentTimeMillis() % 1000 / 500F * Math.PI)) + 1) / 2f; + if (ConfigObject.getInstance().isReducedMotion()) opacity = 0.75F; + int alpha = (int) (0x50 * lastProgress) + (int) (0x42 * lastProgress * opacity); int lineColor = alpha << 24 | 0xFFFFFF; Rectangle bounds = this.bounds.clone(); bounds.y += 10; @@ -128,6 +130,7 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC private void drawHorizontalDashedLine(PoseStack poses, int x1, int x2, int y, int color, boolean reverse) { float offset = (System.currentTimeMillis() % 700) / 100.0F; + if (ConfigObject.getInstance().isReducedMotion()) offset = 0; if (!reverse) offset = 7 - offset; RenderSystem.disableTexture(); @@ -158,6 +161,7 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC private void drawVerticalDashedLine(PoseStack poses, int x, int y1, int y2, int color, boolean reverse) { float offset = (System.currentTimeMillis() % 700) / 100.0F; + if (ConfigObject.getInstance().isReducedMotion()) offset = 0; if (!reverse) offset = 7 - offset; RenderSystem.disableTexture(); @@ -360,7 +364,7 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC public void addDisplay(@Nullable Rectangle bounds, Display display) { DisplayHistoryManager.INSTANCE.addEntry(this, bounds, display); this.scroll.setAs(this.scroll.target() + getBounds().getWidth()); - this.scroll.setTo(0, 800); + this.scroll.setTo(0, ConfigObject.getInstance().isReducedMotion() ? 0 : 800); } @Override @@ -387,7 +391,7 @@ public class DisplayHistoryWidget extends WidgetWithBounds implements DraggableC public void drag() { DisplayHistoryManager.INSTANCE.removeEntry(entry); scroll.setAs(scroll.target() - getBounds().getWidth()); - scroll.setTo(scroll.target() + getBounds().getWidth(), 800); + scroll.setTo(scroll.target() + getBounds().getWidth(), ConfigObject.getInstance().isReducedMotion() ? 0 : 800); } @Override diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java index 06a81dc42..bfd647035 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java @@ -58,7 +58,7 @@ public abstract class FadingFavoritesPanelButton extends WidgetWithBounds { this.alpha.setAs(0); break; case AUTO_HIDE: - this.alpha.setTo(hovered ? 1f : isAvailable(mouseX, mouseY) ? 0.5f : 0f, 260); + this.alpha.setTo(hovered ? 1f : isAvailable(mouseX, mouseY) ? 0.5f : 0f, ConfigObject.getInstance().isReducedMotion() ? 0 : 260); break; case ALWAYS_VISIBLE: this.alpha.setAs(hovered ? 1f : 0.5f); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesTogglePanelButton.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesTogglePanelButton.java index de1029d6b..0b923bdde 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesTogglePanelButton.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesTogglePanelButton.java @@ -27,6 +27,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.REIRuntime; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.widgets.Tooltip; import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget; import net.minecraft.client.renderer.MultiBufferSource; @@ -40,7 +41,7 @@ public class FavoritesTogglePanelButton extends FadingFavoritesPanelButton { @Override protected void onClick() { - parent.favoritePanel.expendState.setTo(!parent.favoritePanel.expendState.target(), 1500); + parent.favoritePanel.expendState.setTo(!parent.favoritePanel.expendState.target(), ConfigObject.getInstance().isReducedMotion() ? 0 : 1500); parent.favoritePanel.resetRows(); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java index 84f960a61..034ae0095 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java @@ -67,7 +67,7 @@ public class FavoritesPanelEntriesRow extends FavoritesPanelRow { this.widgets = CollectionUtils.map(this.entries, entry -> new SectionFavoriteWidget(new Point(0, 0), entrySize, entry)); for (SectionFavoriteWidget widget : this.widgets) { - widget.size.setTo(entrySize * 100, 300); + widget.size.setTo(entrySize * 100, ConfigObject.getInstance().isReducedMotion() ? 0 : 300); } this.lastY = panel.getInnerBounds().y; @@ -85,7 +85,7 @@ public class FavoritesPanelEntriesRow extends FavoritesPanelRow { this.lastY = y; int entrySize = entrySize(); boolean fastEntryRendering = ConfigObject.getInstance().doesFastEntryRendering(); - updateEntriesPosition(entry -> true); + updateEntriesPosition(entry -> !ConfigObject.getInstance().isReducedMotion()); for (SectionFavoriteWidget widget : widgets) { widget.update(delta); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java index 02ba4c72a..355ffeaad 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java @@ -27,6 +27,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import me.shedaniel.clothconfig2.api.animator.NumberAnimator; import me.shedaniel.clothconfig2.api.animator.ValueAnimator; import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.config.ConfigObject; import me.shedaniel.rei.api.client.gui.drag.DraggingContext; import me.shedaniel.rei.api.client.gui.widgets.WidgetWithBounds; import me.shedaniel.rei.impl.client.gui.widget.favorites.FavoritesListWidget; @@ -64,7 +65,9 @@ public class TrashWidget extends WidgetWithBounds { @Override public void render(PoseStack poses, int mouseX, int mouseY, float delta) { if (updateBounds(delta)) { - int alpha = 0x12 + (int) (0x22 * lastProgress * (Mth.cos((float) (System.currentTimeMillis() % 2000 / 1000F * Math.PI)) + 1) / 2); + float opacity = (Mth.cos((float) (System.currentTimeMillis() % 2000 / 1000F * Math.PI)) + 1) / 2; + if (ConfigObject.getInstance().isReducedMotion()) opacity = 0.75F; + int alpha = 0x12 + (int) (0x22 * lastProgress * opacity); fillGradient(poses, this.bounds.x, this.bounds.y, this.bounds.getMaxX(), this.bounds.getMaxY(), 0xFFFFFF | (alpha << 24), 0xFFFFFF | (alpha << 24)); int lineColor = (int) (0x60 * lastProgress) << 24 | 0xFFFFFF; fillGradient(poses, this.bounds.x, this.bounds.y, this.bounds.getMaxX(), this.bounds.y + 1, lineColor, lineColor); @@ -81,6 +84,7 @@ public class TrashWidget extends WidgetWithBounds { } public boolean updateBounds(float delta) { + if (ConfigObject.getInstance().isReducedMotion()) this.height.setAs(this.height.target()); this.height.update(delta); double trashBoundsHeight = this.height.value(); if (Math.round(trashBoundsHeight) > 0) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java index de91f10b5..724735edc 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java @@ -276,7 +276,7 @@ public class EntryStacksRegionWidget<T extends RegionEntry<T>> extends WidgetWit addedEntries.add(realEntry); } - if (!ConfigObject.getInstance().isFavoritesAnimated()) realEntry.size.setAs(entrySize * 100); + if (ConfigObject.getInstance().isReducedMotion()) realEntry.size.setAs(entrySize * 100); else realEntry.size.setTo(entrySize * 100, 300); entries.put(realEntry.hashIgnoreAmount(), realEntry); } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RealRegionEntry.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RealRegionEntry.java index 59c63bb2d..b06c110cb 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RealRegionEntry.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RealRegionEntry.java @@ -48,7 +48,7 @@ public class RealRegionEntry<T extends RegionEntry<T>> { public void remove() { if (!hidden) { this.hidden = true; - if (!ConfigObject.getInstance().isFavoritesAnimated()) this.size.setAs(0); + if (ConfigObject.getInstance().isReducedMotion()) this.size.setAs(0); else this.size.setTo(0, 400); } } @@ -79,6 +79,6 @@ public class RealRegionEntry<T extends RegionEntry<T>> { } public void moveTo(boolean animated, int xPos, int yPos) { - pos.setTo(new FloatingPoint(xPos, yPos), animated && ConfigObject.getInstance().isFavoritesAnimated() ? 200 : -1); + pos.setTo(new FloatingPoint(xPos, yPos), animated && !ConfigObject.getInstance().isReducedMotion() ? 200 : -1); } }
\ No newline at end of file diff --git a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json index 21f017573..219e18fc5 100755 --- a/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json +++ b/runtime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json @@ -22,6 +22,7 @@ "text.rei.searching": "REI searching results...", "text.rei.searching.step": "This is slower on the first search.\nProgress: %s%%", "text.rei.config.menu.dark_theme": "Dark Theme", + "text.rei.config.menu.reduced_motion": "Reduced Motion", "text.rei.config.menu.craftable_filter": "Craftable Filter", "text.rei.config.menu.display": "Display Settings...", "text.rei.config.menu.display.remove_recipe_book": "Remove Recipe Book", @@ -221,6 +222,7 @@ "config.roughlyenoughitems.cheating": "Cheating:", "config.roughlyenoughitems.cheating.when_creative": "During Creative Mode", "config.roughlyenoughitems.favoritesEnabled": "Favorites Enabled:", + "config.roughlyenoughitems.reduceMotion": "Reduced Motion:", "config.roughlyenoughitems.keyBindings": "Keybindings", "config.roughlyenoughitems.keyBindings.recipeKeybind": "Show Recipe:", "config.roughlyenoughitems.keyBindings.hideKeybind": "Hide/Show REI:", |
