Enable movement in book preview exploration
Build / build (push) Canceled after 0s

This commit is contained in:
dnorberg committed 2026-09-22 05:43:31 -04:00
1 parent 16208c02a4
commit 00ed05e51a
6 files changed
+80 -7

No files matched your search

@@ -14,6 +14,8 @@ public interface DestinationPreviewRenderer extends AutoCloseable {
default boolean isExploring() { return false; }
default void setExploring(boolean exploring) { }
default void rotate(double deltaX, double deltaY) { }
default boolean keyPressed(int keyCode, int scanCode) { return false; }
default boolean keyReleased(int keyCode, int scanCode) { return false; }
default void resetView() { }
@Override
@@ -29,6 +29,12 @@ public final class ImmersivePortalsDestinationPreviewRenderer implements Destina
private int ticks;
private boolean exploring;
private boolean hasCompletedFrame;
private boolean movingForward;
private boolean movingBackward;
private boolean movingLeft;
private boolean movingRight;
private boolean movingUp;
private boolean movingDown;
@Override
public void accept(LinkPreviewPayload payload) {
@@ -42,12 +48,9 @@ public final class ImmersivePortalsDestinationPreviewRenderer implements Destina
if (!exploring || cameraPosition == null) {
return;
}
double forward = (minecraft.options.keyUp.isDown() ? 1.0D : 0.0D)
- (minecraft.options.keyDown.isDown() ? 1.0D : 0.0D);
double strafe = (minecraft.options.keyRight.isDown() ? 1.0D : 0.0D)
- (minecraft.options.keyLeft.isDown() ? 1.0D : 0.0D);
double vertical = (minecraft.options.keyJump.isDown() ? 1.0D : 0.0D)
- (minecraft.options.keyShift.isDown() ? 1.0D : 0.0D);
double forward = (movingForward ? 1.0D : 0.0D) - (movingBackward ? 1.0D : 0.0D);
double strafe = (movingRight ? 1.0D : 0.0D) - (movingLeft ? 1.0D : 0.0D);
double vertical = (movingUp ? 1.0D : 0.0D) - (movingDown ? 1.0D : 0.0D);
double radians = Math.toRadians(yaw);
Vec3 motion = new Vec3(
-Math.sin(radians) * forward + Math.cos(radians) * strafe,
@@ -135,9 +138,47 @@ public final class ImmersivePortalsDestinationPreviewRenderer implements Destina
}
}
@Override
public boolean keyPressed(int keyCode, int scanCode) {
if (!exploring) {
return false;
}
if (minecraft.options.keyUp.matches(keyCode, scanCode)) movingForward = true;
else if (minecraft.options.keyDown.matches(keyCode, scanCode)) movingBackward = true;
else if (minecraft.options.keyLeft.matches(keyCode, scanCode)) movingLeft = true;
else if (minecraft.options.keyRight.matches(keyCode, scanCode)) movingRight = true;
else if (minecraft.options.keyJump.matches(keyCode, scanCode)) movingUp = true;
else if (minecraft.options.keyShift.matches(keyCode, scanCode)) movingDown = true;
else return false;
return true;
}
@Override
public boolean keyReleased(int keyCode, int scanCode) {
boolean handled = true;
if (minecraft.options.keyUp.matches(keyCode, scanCode)) movingForward = false;
else if (minecraft.options.keyDown.matches(keyCode, scanCode)) movingBackward = false;
else if (minecraft.options.keyLeft.matches(keyCode, scanCode)) movingLeft = false;
else if (minecraft.options.keyRight.matches(keyCode, scanCode)) movingRight = false;
else if (minecraft.options.keyJump.matches(keyCode, scanCode)) movingUp = false;
else if (minecraft.options.keyShift.matches(keyCode, scanCode)) movingDown = false;
else handled = false;
return handled;
}
private void clearMovement() {
movingForward = false;
movingBackward = false;
movingLeft = false;
movingRight = false;
movingUp = false;
movingDown = false;
}
@Override
public void resetView() {
exploring = false;
clearMovement();
if (destination != null) {
cameraPosition = Vec3.atCenterOf(destination.origin()).add(0.0D, 2.0D, ORBIT_RADIUS);
yaw = destination.yaw();
@@ -147,6 +188,7 @@ public final class ImmersivePortalsDestinationPreviewRenderer implements Destina
@Override
public void close() {
clearMovement();
hasCompletedFrame = false;
}
}
@@ -181,6 +181,18 @@ public final class DescriptiveBookScreen extends Screen {
return super.mouseDragged(mouseX, mouseY, button, dragX, dragY);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
return preview != null && preview.keyPressed(keyCode, scanCode)
|| super.keyPressed(keyCode, scanCode, modifiers);
}
@Override
public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
return preview != null && preview.keyReleased(keyCode, scanCode)
|| super.keyReleased(keyCode, scanCode, modifiers);
}
private void toggleExploration() {
preview.setExploring(!preview.isExploring());
exploreButton.setMessage(Component.translatable(preview.isExploring()
@@ -181,6 +181,18 @@ public final class LinkingBookScreen extends Screen {
return super.mouseDragged(mouseX, mouseY, button, dragX, dragY);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
return preview != null && preview.keyPressed(keyCode, scanCode)
|| super.keyPressed(keyCode, scanCode, modifiers);
}
@Override
public boolean keyReleased(int keyCode, int scanCode, int modifiers) {
return preview != null && preview.keyReleased(keyCode, scanCode)
|| super.keyReleased(keyCode, scanCode, modifiers);
}
private void toggleExploration() {
preview.setExploring(!preview.isExploring());
exploreButton.setMessage(Component.translatable(preview.isExploring()