From b3ec9a2442754affc79b23a683014335afbeff21 Mon Sep 17 00:00:00 2001 From: James Ball Date: Tue, 18 May 2021 20:01:29 +0100 Subject: [PATCH] Add reset rotation button --- .../java/sh/ball/audio/FrameProducer.java | 4 +++ src/main/java/sh/ball/gui/Controller.java | 19 +++++++++----- .../java/sh/ball/parser/obj/ObjFrameSet.java | 3 +++ .../sh/ball/parser/obj/ObjFrameSettings.java | 11 +++++--- .../ball/parser/obj/ObjSettingsFactory.java | 26 +++++++++++++++++++ src/main/resources/fxml/osci-render.fxml | 15 ++++++----- 6 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 src/main/java/sh/ball/parser/obj/ObjSettingsFactory.java diff --git a/src/main/java/sh/ball/audio/FrameProducer.java b/src/main/java/sh/ball/audio/FrameProducer.java index 0664eb2..4f2c236 100644 --- a/src/main/java/sh/ball/audio/FrameProducer.java +++ b/src/main/java/sh/ball/audio/FrameProducer.java @@ -24,6 +24,10 @@ public class FrameProducer implements Runnable { running = false; } + public Object setFrameSettings(Object settings) { + return setFrameSettings(settings, false); + } + public Object setFrameSettings(Object settings, boolean flushFrames) { if (flushFrames) { renderer.flushFrames(); diff --git a/src/main/java/sh/ball/gui/Controller.java b/src/main/java/sh/ball/gui/Controller.java index 8939ad0..deacd6c 100644 --- a/src/main/java/sh/ball/gui/Controller.java +++ b/src/main/java/sh/ball/gui/Controller.java @@ -31,6 +31,7 @@ import org.xml.sax.SAXException; import sh.ball.audio.effect.TranslateEffect; import sh.ball.engine.Vector3; import sh.ball.parser.obj.ObjFrameSettings; +import sh.ball.parser.obj.ObjSettingsFactory; import sh.ball.parser.obj.ObjParser; import sh.ball.parser.ParserFactory; import sh.ball.shapes.Shape; @@ -101,6 +102,8 @@ public class Controller implements Initializable { @FXML private TextField rotateZTextField; @FXML + private Button resetRotationButton; + @FXML private CheckBox vectorCancellingCheckBox; @FXML private Slider vectorCancellingSlider; @@ -167,7 +170,7 @@ public class Controller implements Initializable { translationYTextField.textProperty().addListener(translationUpdate); InvalidationListener cameraPosUpdate = observable -> - producer.setFrameSettings(new ObjFrameSettings(new Vector3( + producer.setFrameSettings(ObjSettingsFactory.cameraPosition(new Vector3( tryParse(cameraXTextField.getText()), tryParse(cameraYTextField.getText()), tryParse(cameraZTextField.getText()) @@ -178,16 +181,18 @@ public class Controller implements Initializable { cameraZTextField.textProperty().addListener(cameraPosUpdate); InvalidationListener rotateUpdate = observable -> - producer.setFrameSettings(new ObjFrameSettings(new Vector3( + producer.setFrameSettings(ObjSettingsFactory.rotation(new Vector3( tryParse(rotateXTextField.getText()), tryParse(rotateYTextField.getText()), tryParse(rotateZTextField.getText()) - ), null), false); + ))); rotateXTextField.textProperty().addListener(rotateUpdate); rotateYTextField.textProperty().addListener(rotateUpdate); rotateZTextField.textProperty().addListener(rotateUpdate); + resetRotationButton.setOnAction(e -> producer.setFrameSettings(ObjSettingsFactory.resetRotation())); + InvalidationListener vectorCancellingListener = e -> updateEffect(EffectType.VECTOR_CANCELLING, vectorCancellingCheckBox.isSelected(), EffectFactory.vectorCancelling((int) vectorCancellingSlider.getValue())); @@ -219,7 +224,10 @@ public class Controller implements Initializable { } private void setFocalLength(double focalLength) { - Vector3 pos = (Vector3) producer.setFrameSettings(new ObjFrameSettings(focalLength), true); + Vector3 pos = (Vector3) producer.setFrameSettings( + ObjSettingsFactory.focalLength(focalLength), + true + ); cameraXTextField.setText(String.valueOf(pos.getX())); cameraYTextField.setText(String.valueOf(pos.getY())); cameraZTextField.setText(String.valueOf(pos.getZ())); @@ -227,8 +235,7 @@ public class Controller implements Initializable { private void setObjectRotateSpeed(double rotateSpeed) { producer.setFrameSettings( - new ObjFrameSettings(null, (Math.exp(3 * rotateSpeed) - 1) / 50), - false + ObjSettingsFactory.rotateSpeed((Math.exp(3 * rotateSpeed) - 1) / 50) ); } diff --git a/src/main/java/sh/ball/parser/obj/ObjFrameSet.java b/src/main/java/sh/ball/parser/obj/ObjFrameSet.java index fb6f00c..2a8450c 100644 --- a/src/main/java/sh/ball/parser/obj/ObjFrameSet.java +++ b/src/main/java/sh/ball/parser/obj/ObjFrameSet.java @@ -48,6 +48,9 @@ public class ObjFrameSet implements FrameSet> { if (obj.rotateSpeed != null) { this.rotateSpeed = obj.rotateSpeed; } + if (obj.resetRotation) { + object.resetRotation(); + } } return camera.getPos(); diff --git a/src/main/java/sh/ball/parser/obj/ObjFrameSettings.java b/src/main/java/sh/ball/parser/obj/ObjFrameSettings.java index 845d28a..b83e2f7 100644 --- a/src/main/java/sh/ball/parser/obj/ObjFrameSettings.java +++ b/src/main/java/sh/ball/parser/obj/ObjFrameSettings.java @@ -8,17 +8,22 @@ public class ObjFrameSettings { protected Vector3 cameraPos; protected Vector3 rotation; protected Double rotateSpeed; + protected boolean resetRotation = false; - public ObjFrameSettings(double focalLength) { + protected ObjFrameSettings(double focalLength) { this.focalLength = focalLength; } - public ObjFrameSettings(Vector3 cameraPos) { + protected ObjFrameSettings(Vector3 cameraPos) { this.cameraPos = cameraPos; } - public ObjFrameSettings(Vector3 rotation, Double rotateSpeed) { + protected ObjFrameSettings(Vector3 rotation, Double rotateSpeed) { this.rotation = rotation; this.rotateSpeed = rotateSpeed; } + + protected ObjFrameSettings(boolean resetRotation) { + this.resetRotation = resetRotation; + } } diff --git a/src/main/java/sh/ball/parser/obj/ObjSettingsFactory.java b/src/main/java/sh/ball/parser/obj/ObjSettingsFactory.java new file mode 100644 index 0000000..4ff25ac --- /dev/null +++ b/src/main/java/sh/ball/parser/obj/ObjSettingsFactory.java @@ -0,0 +1,26 @@ +package sh.ball.parser.obj; + +import sh.ball.engine.Vector3; + +public class ObjSettingsFactory { + + public static ObjFrameSettings focalLength(double focalLength) { + return new ObjFrameSettings(focalLength); + } + + public static ObjFrameSettings cameraPosition(Vector3 cameraPos) { + return new ObjFrameSettings(cameraPos); + } + + public static ObjFrameSettings rotation(Vector3 rotation) { + return new ObjFrameSettings(rotation, null); + } + + public static ObjFrameSettings rotateSpeed(double rotateSpeed) { + return new ObjFrameSettings(null, rotateSpeed); + } + + public static ObjFrameSettings resetRotation() { + return new ObjFrameSettings(true); + } +} diff --git a/src/main/resources/fxml/osci-render.fxml b/src/main/resources/fxml/osci-render.fxml index 3454e8e..b2a7220 100644 --- a/src/main/resources/fxml/osci-render.fxml +++ b/src/main/resources/fxml/osci-render.fxml @@ -12,17 +12,17 @@ - + - +