Skip to content

Commit 04b4663

Browse files
committed
Added height range to render condition
1 parent 6ff356f commit 04b4663

File tree

5 files changed

+39
-11
lines changed

5 files changed

+39
-11
lines changed

common/src/main/java/fr/tathan/sky_aesthetics/client/DimensionRenderer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mojang.blaze3d.vertex.PoseStack;
55
import com.mojang.blaze3d.vertex.Tesselator;
66
import com.mojang.blaze3d.vertex.VertexBuffer;
7+
import fr.tathan.SkyAesthetics;
78
import fr.tathan.sky_aesthetics.client.skies.settings.*;
89
import fr.tathan.sky_aesthetics.client.skies.utils.ShootingStar;
910
import fr.tathan.sky_aesthetics.client.skies.utils.SkyHelper;
@@ -82,9 +83,10 @@ public void render(ClientLevel level, PoseStack poseStack, Matrix4f projectionMa
8283
this.skyColor.setSkyColor(level, camera, partialTick);
8384

8485
SkyHelper.drawSky(poseStack.last().pose(), projectionMatrix);
86+
SkyAesthetics.LOG.error("rotation {}", dayAngle);
8587

8688
if(this.skyBoxSetting != null) {
87-
this.skyBoxSetting.renderSkyBox(poseStack, projectionMatrix, camera);
89+
this.skyBoxSetting.renderSkyBox(poseStack, projectionMatrix, camera,dayAngle);
8890
}
8991

9092
this.fogSettings.runFogCallback(fogCallback);

common/src/main/java/fr/tathan/sky_aesthetics/client/screens/SkyModificationScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public static SkyProperties fromComponent(FlowLayout component) {
281281
(int) skyBoxSetting.childById(DiscreteSliderComponent.class, "gradation").discreteValue(),
282282
ResourceLocation.parse(skyBoxSetting.childById(TextBoxComponent.class, "texture").getValue()),
283283
getVec3fFromComponent(skyBoxSetting.childById(FlowLayout.class, "rotation")).orElseGet(Vector3f::new),
284-
Optional.empty())
284+
Optional.of(Rotation.createDefaultSettings()))
285285
);
286286

287287
CollapsibleContainer lightSettings = component.childById(CollapsibleContainer.class, "light_settings");

common/src/main/java/fr/tathan/sky_aesthetics/client/skies/settings/Rotation.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mojang.serialization.Codec;
55
import com.mojang.serialization.codecs.RecordCodecBuilder;
66
import net.minecraft.util.StringRepresentable;
7+
import org.joml.Matrix4f;
78
import org.joml.Quaternionf;
89

910
import java.util.Objects;
@@ -15,12 +16,15 @@ public record Rotation(Axis axis, String rotationType) {
1516
Codec.STRING.fieldOf("rotation").forGetter(Rotation::rotationType)
1617
).apply(instance, Rotation::new));
1718

19+
public static Rotation createDefaultSettings() {
20+
return new Rotation(Axis.XP, "NIGHT");
21+
}
1822

19-
public void rotatePoseStack(PoseStack stack, float dayAngle){
23+
public void rotatePoseStack(Matrix4f modelMatrix, float dayAngle){
2024
if(Objects.equals(rotationType, "NIGHT")){
2125
dayAngle = -dayAngle;
2226
}
23-
stack.mulPose(axis.toQuaternion(dayAngle));
27+
modelMatrix.rotate(axis.toQuaternion(dayAngle));
2428
}
2529

2630
public enum Axis implements StringRepresentable {
@@ -29,7 +33,6 @@ public enum Axis implements StringRepresentable {
2933
ZP("ZP");
3034

3135

32-
3336
public final String name;
3437

3538
Axis(String name) {

common/src/main/java/fr/tathan/sky_aesthetics/client/skies/settings/SkyBoxSetting.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public VertexBuffer createSphere() {
100100
}
101101

102102

103-
public void renderSkyBox(PoseStack poseStack, Matrix4f projectionMatrix, Camera camera) {
103+
public void renderSkyBox(PoseStack poseStack, Matrix4f projectionMatrix, Camera camera, float dayAngle) {
104104
poseStack.pushPose();
105105

106106
FogRenderer.setupNoFog();
@@ -121,6 +121,11 @@ public void renderSkyBox(PoseStack poseStack, Matrix4f projectionMatrix, Camera
121121
.rotate(Axis.YP.rotationDegrees(this.rotation.y))
122122
.rotate(Axis.ZP.rotationDegrees(this.rotation.z));
123123

124+
this.dynamicRotation.ifPresent((dynRota -> {
125+
SkyAesthetics.LOG.error("rotation {}", dayAngle);
126+
dynRota.rotatePoseStack(modelMatrix, dayAngle);
127+
}));
128+
124129
// Combine view and model matrices
125130
Matrix4f mvMatrix = new Matrix4f(viewMatrix).mul(modelMatrix);
126131

@@ -133,7 +138,7 @@ public void renderSkyBox(PoseStack poseStack, Matrix4f projectionMatrix, Camera
133138
}
134139

135140
public static SkyBoxSetting createDefaultSettings() {
136-
return new SkyBoxSetting(100, ResourceLocation.parse("sky_aesthetics:textures/skyboxes/venus.png"), new Vector3f(0, 0, 0), Optional.empty());
141+
return new SkyBoxSetting(100, ResourceLocation.parse("sky_aesthetics:textures/skyboxes/venus.png"), new Vector3f(0, 0, 0), Optional.of(Rotation.createDefaultSettings()));
137142
}
138143

139144
static {

common/src/main/java/fr/tathan/sky_aesthetics/client/skies/settings/SkyProperties.java

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import fr.tathan.SkyAesthetics;
66
import fr.tathan.sky_aesthetics.client.DimensionRenderer;
77
import fr.tathan.sky_aesthetics.client.skies.DimensionSky;
8+
import net.minecraft.Util;
89
import net.minecraft.client.Minecraft;
910
import net.minecraft.client.player.LocalPlayer;
1011
import net.minecraft.core.registries.Registries;
@@ -14,6 +15,9 @@
1415
import net.minecraft.tags.TagKey;
1516
import net.minecraft.world.level.Level;
1617
import net.minecraft.world.level.biome.Biome;
18+
import net.minecraft.world.phys.Vec2;
19+
import net.minecraft.world.phys.Vec3;
20+
import org.joml.Vector4f;
1721

1822
import java.util.List;
1923
import java.util.Optional;
@@ -94,10 +98,14 @@ public static SkyProperties createDefault() {
9498
);
9599
}
96100

97-
public record RenderCondition(Optional<TagKey<Biome>> biomes, Optional<ResourceKey<Biome>> biome) {
101+
public static Codec<Vec2> VEC2 = Codec.FLOAT.listOf().comapFlatMap((list) -> Util.fixedSize(list, 2).map((listx) -> new Vec2(listx.getFirst(), listx.getLast())), (vector4f) -> List.of(vector4f.x, vector4f.y));
102+
103+
104+
public record RenderCondition(Optional<TagKey<Biome>> biomes, Optional<ResourceKey<Biome>> biome, Optional<Vec2> heightRange) {
98105
public static final Codec<RenderCondition> CODEC = RecordCodecBuilder.create(instance -> instance.group(
99106
TagKey.codec(Registries.BIOME).optionalFieldOf("biomes").forGetter(RenderCondition::biomes),
100-
ResourceKey.codec(Registries.BIOME).optionalFieldOf("biome").forGetter(RenderCondition::biome)
107+
ResourceKey.codec(Registries.BIOME).optionalFieldOf("biome").forGetter(RenderCondition::biome),
108+
VEC2.optionalFieldOf("height_range").forGetter(RenderCondition::heightRange)
101109
).apply(instance, RenderCondition::new));
102110

103111
public boolean isSkyRendered(ServerLevel level) {
@@ -106,9 +114,19 @@ public boolean isSkyRendered(ServerLevel level) {
106114
if (player == null || level == null) return false;
107115

108116
if(this.biomes().isPresent()) {
109-
return level.getBiome(player.getOnPos()).is(this.biomes().get());
117+
return level.getBiome(player.getOnPos()).is(this.biomes().get()) && isPlayerAtHeight(player);
110118
} else if (this.biome().isPresent()) {
111-
return level.getBiome(player.getOnPos()).is(this.biome().get());
119+
return level.getBiome(player.getOnPos()).is(this.biome().get()) && isPlayerAtHeight(player);
120+
}
121+
122+
return true;
123+
}
124+
125+
public boolean isPlayerAtHeight(LocalPlayer player) {
126+
double playerHeight = player.position().y;
127+
if(this.heightRange.isPresent()) {
128+
Vec2 heightRange = this.heightRange.get();
129+
return playerHeight >= heightRange.y && playerHeight <= heightRange.y;
112130
}
113131

114132
return true;

0 commit comments

Comments
 (0)