Skip to content

Commit 4f36541

Browse files
committed
Add new config setting "legacyRotationLogic", puts the new rotation logic behind setting as it caused some issues
1 parent e60bd23 commit 4f36541

File tree

5 files changed

+46
-25
lines changed

5 files changed

+46
-25
lines changed

src/main/java/btw/lowercase/skyboxify/config/SkyboxifyConfig.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,16 @@ public class SkyboxifyConfig extends Config {
3636
public final BooleanConfigField renderStars = this.booleanFieldOf("renderStars", true);
3737
public final BooleanConfigField showOverworldForUnknownDimension = this.booleanFieldOf("showOverworldForUnknownDimension", true);
3838
public final BooleanConfigField debug = this.booleanFieldOf("debug", false);
39+
public final BooleanConfigField legacyRotationLogic = this.booleanFieldOf("legacyRotationLogic", false);
3940

4041
public SkyboxifyConfig() {
4142
super(Skyboxify.MOD_ID);
43+
this.enabled.onValueChanged((oldVal, newVal) -> {
44+
final Minecraft minecraft = Minecraft.getInstance();
45+
if (minecraft != null /* It can be null, on game launch */) {
46+
minecraft.reloadResourcePacks();
47+
}
48+
});
4249
}
4350

4451
@Override

src/main/java/btw/lowercase/skyboxify/config/SkyboxifyConfigScreen.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ protected void init() {
5858
rowHelper.addChild(skyboxifyConfig.renderSunMoon.createWidget());
5959
rowHelper.addChild(skyboxifyConfig.renderStars.createWidget());
6060
rowHelper.addChild(skyboxifyConfig.debug.createWidget());
61+
rowHelper.addChild(skyboxifyConfig.legacyRotationLogic.createWidget());
6162
layout.addToContents(gridLayout);
6263

6364
GridLayout footerGridLayout = new GridLayout();

src/main/java/btw/lowercase/skyboxify/skybox/SkyboxSkyRenderer.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
package btw.lowercase.skyboxify.skybox;
2525

26+
import btw.lowercase.skyboxify.Skyboxify;
2627
import btw.lowercase.skyboxify.mixins.RenderPipelinesAccessor;
2728
import btw.lowercase.skyboxify.skybox.components.UV;
2829
import btw.lowercase.skyboxify.utils.*;
@@ -32,7 +33,9 @@
3233
import net.minecraft.client.multiplayer.ClientLevel;
3334
import net.minecraft.util.Mth;
3435
import net.minecraft.world.level.Level;
36+
import org.joml.AxisAngle4f;
3537
import org.joml.Matrix4f;
38+
import org.joml.Quaternionf;
3639
import org.joml.Vector4f;
3740

3841
public final class SkyboxSkyRenderer {
@@ -131,7 +134,13 @@ private void renderSkyLayer(final SkyLayer skyLayer, final Matrix4f modelViewMat
131134
final float finalAlpha = Mth.clamp(conditionAlpha * weatherAlpha * fadeAlpha, 0.0F, 1.0F);
132135
if (!(finalAlpha < 1.0E-4F)) {
133136
if (skyLayer.rotate()) {
134-
CommonUtils.rotate(modelViewMatrix, this.getAngle(level, skyAngle, skyLayer.speed()), skyLayer.axis());
137+
final float angle = this.getAngle(level, skyAngle, skyLayer.speed());
138+
if (Skyboxify.getConfig().debug.isEnabled() && Skyboxify.getConfig().legacyRotationLogic.isEnabled()) {
139+
CommonUtils.rotate(modelViewMatrix, angle, skyLayer.axis());
140+
} else {
141+
// NOTE: Using `mulPose` directly gives a different result.
142+
modelViewMatrix.rotate(new Quaternionf(new AxisAngle4f(angle, skyLayer.axis())));
143+
}
135144
}
136145

137146
//? <=1.21.4 {

src/main/java/btw/lowercase/skyboxify/utils/CommonUtils.java

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
import lombok.experimental.UtilityClass;
2929
import net.minecraft.util.Mth;
3030
import org.joml.Matrix4f;
31-
import org.joml.Vector3f;
3231
import org.joml.Vector3fc;
33-
import org.joml.Vector4f;
3432

3533
import java.util.List;
3634

@@ -119,18 +117,22 @@ public static float getWeatherAlpha(List<Weather> weatherConditions, float rainS
119117
// See https://github.com/sp614x/optifine/issues/7235#issuecomment-1581930719
120118
public static void rotate(final Matrix4f pose, final float angle, final Vector3fc axis) {
121119
// Quaternion fields
122-
final Vector4f q = new Vector4f(axis.mul(Mth.sin(angle * 0.5F), new Vector3f()), Mth.cos(angle * 0.5F));
120+
float q_sin = Mth.sin(angle * 0.5F);
121+
float q_x = axis.x() * q_sin;
122+
float q_y = axis.y() * q_sin;
123+
float q_z = axis.z() * q_sin;
124+
float q_w = Mth.cos(angle * 0.5F);
123125

124126
// Matrix4f/Matrix3f fields
125-
float m_xFactor = 2.0F * q.x * q.x;
126-
float m_yFactor = 2.0F * q.y * q.y;
127-
float m_zFactor = 2.0F * q.z * q.z;
128-
float m_xy = q.x * q.y;
129-
float m_yz = q.y * q.z;
130-
float m_zx = q.z * q.x;
131-
float m_xw = q.x * q.w;
132-
float m_yw = q.y * q.w;
133-
float m_zw = q.z * q.w;
127+
float m_xFactor = 2.0F * q_x * q_x;
128+
float m_yFactor = 2.0F * q_y * q_y;
129+
float m_zFactor = 2.0F * q_z * q_z;
130+
float m_xy = q_x * q_y;
131+
float m_yz = q_y * q_z;
132+
float m_zx = q_z * q_x;
133+
float m_xw = q_x * q_w;
134+
float m_yw = q_y * q_w;
135+
float m_zw = q_z * q_w;
134136
float m_m00 = 1.0F - m_yFactor - m_zFactor;
135137
float m_m01 = 2.0F * (m_xy - m_zw);
136138
float m_m02 = 2.0F * (m_zx + m_yw);
@@ -142,17 +144,17 @@ public static void rotate(final Matrix4f pose, final float angle, final Vector3f
142144
float m_m22 = 1.0F - m_xFactor - m_yFactor;
143145

144146
// Multiply pose matrix
145-
pose.m00(m_m00 * pose.m00() + m_m01 * pose.m10() + m_m02 * pose.m20())
146-
.m01(m_m00 * pose.m01() + m_m01 * pose.m11() + m_m02 * pose.m21())
147-
.m02(m_m00 * pose.m02() + m_m01 * pose.m12() + m_m02 * pose.m22())
148-
.m03(m_m00 * pose.m03() + m_m01 * pose.m13() + m_m02 * pose.m23())
149-
.m10(m_m10 * pose.m00() + m_m11 * pose.m10() + m_m12 * pose.m20())
150-
.m11(m_m10 * pose.m01() + m_m11 * pose.m11() + m_m12 * pose.m21())
151-
.m12(m_m10 * pose.m02() + m_m11 * pose.m12() + m_m12 * pose.m22())
152-
.m13(m_m10 * pose.m03() + m_m11 * pose.m13() + m_m12 * pose.m23())
153-
.m20(m_m20 * pose.m00() + m_m21 * pose.m10() + m_m22 * pose.m20())
154-
.m21(m_m20 * pose.m01() + m_m21 * pose.m11() + m_m22 * pose.m21())
155-
.m22(m_m20 * pose.m02() + m_m21 * pose.m12() + m_m22 * pose.m22())
156-
.m23(m_m20 * pose.m03() + m_m21 * pose.m13() + m_m22 * pose.m23());
147+
pose.m00(m_m00 * pose.m00() + m_m01 * pose.m10() + m_m02 * pose.m20());
148+
pose.m01(m_m00 * pose.m01() + m_m01 * pose.m11() + m_m02 * pose.m21());
149+
pose.m02(m_m00 * pose.m02() + m_m01 * pose.m12() + m_m02 * pose.m22());
150+
pose.m03(m_m00 * pose.m03() + m_m01 * pose.m13() + m_m02 * pose.m23());
151+
pose.m10(m_m10 * pose.m00() + m_m11 * pose.m10() + m_m12 * pose.m20());
152+
pose.m11(m_m10 * pose.m01() + m_m11 * pose.m11() + m_m12 * pose.m21());
153+
pose.m12(m_m10 * pose.m02() + m_m11 * pose.m12() + m_m12 * pose.m22());
154+
pose.m13(m_m10 * pose.m03() + m_m11 * pose.m13() + m_m12 * pose.m23());
155+
pose.m20(m_m20 * pose.m00() + m_m21 * pose.m10() + m_m22 * pose.m20());
156+
pose.m21(m_m20 * pose.m01() + m_m21 * pose.m11() + m_m22 * pose.m21());
157+
pose.m22(m_m20 * pose.m02() + m_m21 * pose.m12() + m_m22 * pose.m22());
158+
pose.m23(m_m20 * pose.m03() + m_m21 * pose.m13() + m_m22 * pose.m23());
157159
}
158160
}

src/main/resources/assets/skyboxify/lang/en_us.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
"options.skyboxify.renderStars.tooltip": "Enable/disable rendering of the stars.",
1111
"options.skyboxify.debug": "Debug Mode",
1212
"options.skyboxify.debug.tooltip": "Enable debug logging & other debugging aspects.",
13+
"options.skyboxify.legacyRotationLogic": "[DM] Legacy Rotation Logic",
14+
"options.skyboxify.legacyRotationLogic.tooltip": "Enables legacy rotation logic when rotating the sky from PR #24.\nNOTE: Requires \"Debug Mode\" to be on.",
1315
"options.template": "%s: %s",
1416
"options.on": "ON",
1517
"options.off": "OFF",

0 commit comments

Comments
 (0)