Skip to content

Commit

Permalink
Tweak light face computation to improve lighting on slopes
Browse files Browse the repository at this point in the history
  • Loading branch information
hlysine committed Jul 18, 2024
1 parent 3d504ab commit 42d081d
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,19 @@ public Direction computeLightFace() {
};
}

private static Axis longestAxis(double normalX, double normalY, double normalZ) {
private static final double EPSILON = 0.05;

public static Axis longestAxis(double normalX, double normalY, double normalZ) {
Axis result = Axis.Y;
double longest = Math.abs(normalY);
double a = Math.abs(normalX);

if (a > longest) {
if (a > longest + EPSILON) {
result = Axis.X;
longest = a;
}

return Math.abs(normalZ) > longest
return Math.abs(normalZ) > longest + EPSILON
? Axis.Z : result;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.copycatsplus.copycats.fabric.mixin.compat.indium;

import com.copycatsplus.copycats.foundation.copycat.model.assembly.MutableQuad;
import link.infra.indium.renderer.helper.GeometryHelper;
import net.minecraft.core.Direction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(GeometryHelper.class)
@Pseudo
public class GeometryHelperMixin {
@Inject(
method = "longestAxis(FFF)Lnet/minecraft/core/Direction$Axis;",
at = @At("HEAD"),
cancellable = true
)
private static void longestAxis(float normalX, float normalY, float normalZ, CallbackInfoReturnable<Direction.Axis> cir) {
cir.setReturnValue(MutableQuad.longestAxis(normalX, normalY, normalZ));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.copycatsplus.copycats.fabric.mixin.copycat.base;

import com.copycatsplus.copycats.foundation.copycat.model.assembly.MutableQuad;
import net.fabricmc.fabric.impl.client.indigo.renderer.helper.GeometryHelper;
import net.minecraft.core.Direction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(GeometryHelper.class)
@Pseudo
public class GeometryHelperMixin {
@Inject(
method = "longestAxis(FFF)Lnet/minecraft/core/Direction$Axis;",
at = @At("HEAD"),
cancellable = true
)
private static void longestAxis(float normalX, float normalY, float normalZ, CallbackInfoReturnable<Direction.Axis> cir) {
cir.setReturnValue(MutableQuad.longestAxis(normalX, normalY, normalZ));
}
}
2 changes: 2 additions & 0 deletions fabric/src/main/resources/copycats-fabric.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
"compatibilityLevel": "JAVA_17",
"mixins": [
"HolderReferenceMixin",
"compat.indium.GeometryHelperMixin",
"compat.registrate.CreateRegistrateMixin",
"copycat.base.CopycatBlockEntityMixin$BlockEntityWithoutAttachmentData",
"copycat.base.CopycatBlockEntityMixin$FluidPipeData",
"copycat.base.CopycatBlockEntityMixin$StraightPipeData",
"copycat.base.CopycatBlockMixin",
"copycat.base.GeometryHelperMixin",
"copycat.base.multistate.MultiStateCopycatBlockEntityMixin$BlockEntityWithoutAttachmentData",
"copycat.base.multistate.MultiStateCopycatBlockMixin"
],
Expand Down

0 comments on commit 42d081d

Please sign in to comment.