aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-12-25 18:59:49 +0800
committershedaniel <daniel@shedaniel.me>2024-04-16 00:38:17 +0900
commit89d25568036a31f58fa40e3209a1b9dd05277c65 (patch)
treeb51387e3d136d5d459de54f79004bb58088d0db9 /runtime/src/main
parentb0b36e7b82272b938098fb700faea4af4ec253c9 (diff)
downloadRoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.tar.gz
RoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.tar.bz2
RoughlyEnoughItems-89d25568036a31f58fa40e3209a1b9dd05277c65.zip
Fix #1281
Diffstat (limited to 'runtime/src/main')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/config/ConfigObjectImpl.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/dragging/CurrentDraggingStack.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/Menu.java19
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/modules/entries/SubMenuEntry.java14
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/ConfigButtonWidget.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/OverflowWidget.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/TabContainerWidget.java1
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayEntry.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/history/DisplayHistoryWidget.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FadingFavoritesPanelButton.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/FavoritesTogglePanelButton.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/panel/rows/FavoritesPanelEntriesRow.java4
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/favorites/trash/TrashWidget.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/EntryStacksRegionWidget.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/client/gui/widget/region/RealRegionEntry.java4
-rwxr-xr-xruntime/src/main/resources/assets/roughlyenoughitems/lang/en_us.json2
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:",