From 9a7671f4f737ce469cd997e796552bc81ca5e230 Mon Sep 17 00:00:00 2001 From: Sollace Date: Fri, 25 Sep 2020 23:39:57 +0200 Subject: [PATCH] Smooth out the transition when flipping gravity --- .../unicopia/client/UnicopiaClient.java | 4 ++++ .../client/render/WorldRenderDelegate.java | 22 ++++++++++++++----- .../unicopia/entity/player/Pony.java | 1 + .../mixin/client/MixinGameRenderer.java | 5 +++-- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java index 8fa66106..7d20bc73 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java +++ b/src/main/java/com/minelittlepony/unicopia/client/UnicopiaClient.java @@ -29,6 +29,10 @@ public class UnicopiaClient implements ClientModInitializer { return Unicopia.getConfig().getPrefferedRace(); } + public static float getWorldBrightness(float initial) { + return Math.min(1, initial + 0.6F); + } + @Override public void onInitializeClient() { InteractionManager.INSTANCE = new ClientInteractionManager(); diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java index d5ea5c19..bebcfb9b 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -14,24 +14,34 @@ public class WorldRenderDelegate { public static final WorldRenderDelegate INSTANCE = new WorldRenderDelegate(); public void beforeEntityRender(Pony pony, MatrixStack matrices, double x, double y, double z) { - if (pony.getPhysics().isGravityNegative()) { - matrices.push(); - Entity entity = pony.getOwner(); + matrices.push(); + Entity entity = pony.getOwner(); + + boolean negative = pony.getPhysics().isGravityNegative(); + + float roll = negative ? 180 : 0; + + roll = pony.getInterpolator().interpolate("g_roll", roll, 15); + + if (negative) { matrices.translate(x, y, z); matrices.translate(0, entity.getHeight(), 0); - matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(180)); + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(roll)); matrices.translate(-x, -y, -z); flipAngles(entity); + } else { + matrices.multiply(Vector3f.POSITIVE_Z.getDegreesQuaternion(roll)); } } public void afterEntityRender(Pony pony, MatrixStack matrices) { - if (pony.getPhysics().isGravityNegative()) { - matrices.pop(); + matrices.pop(); + + if (pony.getPhysics().isGravityNegative()) { flipAngles(pony.getOwner()); } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java index 6eeee864..a30eab5f 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/Pony.java @@ -248,6 +248,7 @@ public class Pony implements Caster, Equine, Transmi if (Entity.squaredHorizontalLength(entity.getVelocity()) > 0.01 || entity.isSneaking() || !canHangAt()) { attr.removeModifier(PlayerAttributes.BAT_HANGING); + entity.calculateDimensions(); } } diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java index fe9d6667..2fd99909 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/client/MixinGameRenderer.java @@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import com.minelittlepony.unicopia.EquinePredicates; +import com.minelittlepony.unicopia.client.UnicopiaClient; import com.minelittlepony.unicopia.client.render.WorldRenderDelegate; import com.minelittlepony.unicopia.entity.player.Pony; @@ -40,7 +41,7 @@ abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceRe cancellable = true) private static void onGetNightVisionStrengthHead(LivingEntity entity, float tickDelta, CallbackInfoReturnable info) { if (!entity.hasStatusEffect(StatusEffects.NIGHT_VISION)) { - info.setReturnValue(0.6F); + info.setReturnValue(UnicopiaClient.getWorldBrightness(0)); } } @Inject(method = "getNightVisionStrength(FJLnet/minecraft/entity/LivingEntity;F)F", @@ -48,7 +49,7 @@ abstract class MixinGameRenderer implements AutoCloseable, SynchronousResourceRe cancellable = true) private static void onGetNightVisionStrengthReturn(LivingEntity entity, float tickDelta, CallbackInfoReturnable info) { if (entity.hasStatusEffect(StatusEffects.NIGHT_VISION) && EquinePredicates.PLAYER_BAT.test(entity)) { - info.setReturnValue(Math.min(1, info.getReturnValueF() + 0.6F)); + info.setReturnValue(UnicopiaClient.getWorldBrightness(info.getReturnValueF())); } } }