diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-17 00:30:40 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-17 00:30:40 +0800 |
| commit | 8af94d0768f57b59b56f019c9d40d95b77382187 (patch) | |
| tree | 7b8c95251db7d54bec4e0ce10331c414c83ebea9 /runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java | |
| parent | 7451a88de892b5f3496eb63c7be44bc339df96b9 (diff) | |
| download | RoughlyEnoughItems-8af94d0768f57b59b56f019c9d40d95b77382187.tar.gz RoughlyEnoughItems-8af94d0768f57b59b56f019c9d40d95b77382187.tar.bz2 RoughlyEnoughItems-8af94d0768f57b59b56f019c9d40d95b77382187.zip | |
Expend DraggableStackProvider and DraggableStackVisitor to work in any widgets, implement renderBackToPosition
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java b/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java index 9a71db41d..a2014f15c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/CurrentDraggingStack.java @@ -34,19 +34,21 @@ import me.shedaniel.rei.api.gui.drag.DraggableStackVisitor; import me.shedaniel.rei.api.gui.drag.DraggingContext; import me.shedaniel.rei.api.gui.widgets.Widget; import me.shedaniel.rei.gui.widget.LateRenderable; +import me.shedaniel.rei.impl.Animator; import net.minecraft.client.gui.components.events.GuiEventListener; import org.jetbrains.annotations.Nullable; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.function.Supplier; +import static me.shedaniel.rei.gui.widget.EntryListWidget.entrySize; + public class CurrentDraggingStack extends Widget implements LateRenderable, DraggingContext { private DraggableStackProvider provider; private DraggableStackVisitor visitor; @Nullable private DraggableEntry entry; + private final List<RenderBackEntry> backToOriginals = new ArrayList<>(); public void set(DraggableStackProvider provider, DraggableStackVisitor visitor) { this.provider = provider; @@ -65,6 +67,20 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag entry.stack.render(matrices, new Rectangle(mouseX - 8, mouseY - 8, 16, 16), mouseX, mouseY, delta); matrices.popPose(); } + + Iterator<RenderBackEntry> iterator = backToOriginals.iterator(); + while (iterator.hasNext()) { + RenderBackEntry renderBackEntry = iterator.next(); + renderBackEntry.update(delta); + if (Math.abs(renderBackEntry.x.doubleValue() - renderBackEntry.x.target()) <= 2 && Math.abs(renderBackEntry.y.doubleValue() - renderBackEntry.y.target()) <= 2) { + iterator.remove(); + } else { + matrices.pushPose(); + matrices.translate(0, 0, 600); + renderBackEntry.stack.render(matrices, new Rectangle(renderBackEntry.x.intValue(), renderBackEntry.y.intValue(), 16, 16), mouseX, mouseY, delta); + matrices.popPose(); + } + } } @Override @@ -131,8 +147,8 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag } @Override - public void renderBackToPosition(DraggableStack stack, Supplier<Point> position) { - + public void renderBackToPosition(DraggableStack stack, Point initialPosition, Supplier<Point> position) { + backToOriginals.add(new RenderBackEntry(stack, initialPosition, position)); } private class DraggableEntry { @@ -145,4 +161,34 @@ public class CurrentDraggingStack extends Widget implements LateRenderable, Drag this.start = start; } } + + private static class RenderBackEntry { + private final DraggableStack stack; + private final Supplier<Point> position; + private Animator x = new Animator(); + private Animator y = new Animator(); + private int lastDestination = -1; + + public RenderBackEntry(DraggableStack stack, Point initialPosition, Supplier<Point> position) { + this.stack = stack; + this.x.setAs(initialPosition.x - 8); + this.y.setAs(initialPosition.y - 8); + this.position = position; + } + + public Point getPosition() { + return position.get(); + } + + public void update(double delta) { + this.x.update(delta); + this.y.update(delta); + Point position = getPosition(); + if (lastDestination != position.hashCode()) { + lastDestination = position.hashCode(); + this.x.setTo(position.x, 200); + this.y.setTo(position.y, 200); + } + } + } } |
