From 8b6326cb1075d3f80475f114ceb29e747a360cfb Mon Sep 17 00:00:00 2001 From: Lukadcf <156549307+Lukadcf@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:06:36 +0100 Subject: [PATCH] Added an option to rotate a model in the pitch axis (#29) * Added pitch param to setGlobalRotation Also normalized the pitch but without +180 because it would reverse from how pitch normally works. --- .../worldseed/gestures/ModelBoneEmote.java | 4 ++-- .../net/worldseed/multipart/GenericModel.java | 17 +++++++++++++ .../worldseed/multipart/GenericModelImpl.java | 24 +++++++++++++++---- .../multipart/model_bones/ModelBone.java | 4 ++-- .../display_entity/ModelBonePartDisplay.java | 9 +++---- .../model_bones/misc/ModelBoneHitbox.java | 2 +- .../model_bones/misc/ModelBoneNametag.java | 2 +- .../model_bones/misc/ModelBoneSeat.java | 4 ++-- .../model_bones/misc/ModelBoneVFX.java | 2 +- 9 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/worldseed/gestures/ModelBoneEmote.java b/src/main/java/net/worldseed/gestures/ModelBoneEmote.java index c5d199f..26b3886 100644 --- a/src/main/java/net/worldseed/gestures/ModelBoneEmote.java +++ b/src/main/java/net/worldseed/gestures/ModelBoneEmote.java @@ -50,7 +50,7 @@ public ModelBoneEmote(Point pivot, String name, Point rotation, GenericModel mod }); } - switch(this.name) { + switch (this.name) { case "Head" -> { this.diff = this.pivot.add(0, 0, 0); } @@ -207,6 +207,6 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { } } diff --git a/src/main/java/net/worldseed/multipart/GenericModel.java b/src/main/java/net/worldseed/multipart/GenericModel.java index 41e0dff..6957599 100644 --- a/src/main/java/net/worldseed/multipart/GenericModel.java +++ b/src/main/java/net/worldseed/multipart/GenericModel.java @@ -36,6 +36,13 @@ public interface GenericModel extends Viewable, EventHandler, Shape */ Point getPivot(); + /** + * Get the rotation of the model on the X axis + * + * @return the pitch + */ + double getPitch(); + /** * Get the rotation of the model on the Y axis * @@ -50,6 +57,14 @@ public interface GenericModel extends Viewable, EventHandler, Shape */ void setGlobalRotation(double rotation); + /** + * Set the rotation of the model on the Y and X axis + * + * @param yaw new global rotation + * @param pitch new pitch + */ + void setGlobalRotation(double yaw, double pitch); + /** * Get the postion offset for drawing the model * @@ -140,6 +155,8 @@ public interface GenericModel extends Viewable, EventHandler, Shape @Nullable BoneEntity generateRoot(); void bindNametag(String name, Entity nametag); + void unbindNametag(String name); + @Nullable Entity getNametag(String name); } diff --git a/src/main/java/net/worldseed/multipart/GenericModelImpl.java b/src/main/java/net/worldseed/multipart/GenericModelImpl.java index ad71c9a..31ea76c 100644 --- a/src/main/java/net/worldseed/multipart/GenericModelImpl.java +++ b/src/main/java/net/worldseed/multipart/GenericModelImpl.java @@ -53,8 +53,12 @@ public abstract class GenericModelImpl implements GenericModel { protected Instance instance; private Pos position; private double globalRotation; + private double pitch; + + protected record ModelBoneInfo(String name, Point pivot, Point rotation, JsonArray cubes, GenericModel model, + float scale) { + } - protected record ModelBoneInfo(String name, Point pivot, Point rotation, JsonArray cubes, GenericModel model, float scale) {} protected final Map, Function> boneSuppliers = new LinkedHashMap<>(); Function defaultBoneSupplier = (info) -> new ModelBonePartDisplay(info.pivot, info.name, info.rotation, info.model, info.scale); @@ -80,11 +84,21 @@ public double getGlobalRotation() { return globalRotation; } - public void setGlobalRotation(double rotation) { - this.globalRotation = rotation; + @Override + public double getPitch(){ + return pitch; + } + + public void setGlobalRotation(double yaw) { + setGlobalRotation(yaw, 0.0f); + } + + public void setGlobalRotation(double yaw, double pitch) { + this.globalRotation = yaw; + this.pitch = pitch; this.viewableBones.forEach(part -> { - part.setGlobalRotation(rotation); + part.setGlobalRotation(yaw, pitch); }); } @@ -485,4 +499,4 @@ public Entity getNametag(String name) { if (this.parts.get(name) instanceof ModelBoneNametag nametagBone) return nametagBone.getNametag(); return null; } -} \ No newline at end of file +} diff --git a/src/main/java/net/worldseed/multipart/model_bones/ModelBone.java b/src/main/java/net/worldseed/multipart/model_bones/ModelBone.java index 18071c5..6e5b826 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/ModelBone.java +++ b/src/main/java/net/worldseed/multipart/model_bones/ModelBone.java @@ -81,11 +81,11 @@ public interface ModelBone { void detachModel(GenericModel model); - void setGlobalRotation(double rotation); + void setGlobalRotation(double yaw, double pitch); default void teleport(Point position) {} default @NotNull Collection getChildren() { return List.of(); }; -} \ No newline at end of file +} diff --git a/src/main/java/net/worldseed/multipart/model_bones/display_entity/ModelBonePartDisplay.java b/src/main/java/net/worldseed/multipart/model_bones/display_entity/ModelBonePartDisplay.java index a637d9b..43952e6 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/display_entity/ModelBonePartDisplay.java +++ b/src/main/java/net/worldseed/multipart/model_bones/display_entity/ModelBonePartDisplay.java @@ -137,10 +137,11 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { if (this.stand != null) { - var correctLocation = (180 + this.model.getGlobalRotation() + 360) % 360; - this.stand.setView((float) correctLocation, 0); + var correctYaw = (180 + yaw + 360) % 360; + var correctPitch = (pitch + 360) % 360; + this.stand.setView((float) correctYaw, (float) correctPitch); } } @@ -249,4 +250,4 @@ public void setState(String state) { public Point getPosition() { return calculatePositionInternal().add(model.getPosition()); } -} \ No newline at end of file +} diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneHitbox.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneHitbox.java index 361590d..24961ab 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneHitbox.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneHitbox.java @@ -131,7 +131,7 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { } public void generateStands(JsonArray cubes, Point pivotPos, String name, Point boneRotation, GenericModel genericModel) { diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneNametag.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneNametag.java index 13bb8a9..e5c51a5 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneNametag.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneNametag.java @@ -61,7 +61,7 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { } @Override diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java index 4e47442..245b567 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneSeat.java @@ -83,7 +83,7 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { } @@ -159,4 +159,4 @@ public void removePassenger(Entity entity) { public Set getPassengers() { return this.stand.getPassengers(); } -} \ No newline at end of file +} diff --git a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneVFX.java b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneVFX.java index d3d02fe..9f515d8 100644 --- a/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneVFX.java +++ b/src/main/java/net/worldseed/multipart/model_bones/misc/ModelBoneVFX.java @@ -40,7 +40,7 @@ public void detachModel(GenericModel model) { } @Override - public void setGlobalRotation(double rotation) { + public void setGlobalRotation(double yaw, double pitch) { }