Merge pull request #6 from saturnclientmc/cloak-edge-cases
Cloak edge cases
This commit is contained in:
@@ -143,6 +143,23 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private float getCurve(int i, float curveMagnitude, PlayerEntityRenderState playerState) {
|
||||||
|
float powCurve = (float) Math.pow((double) (PARTS - i) / PARTS, 2) * curveMagnitude;
|
||||||
|
|
||||||
|
float waveFreq = 0.6f;
|
||||||
|
float phase = (playerState.age + playerState.handSwingProgress) * 0.4f;
|
||||||
|
|
||||||
|
// Sine wave independent of curveMagnitude
|
||||||
|
float sineAmplitude = 0.02f; // fixed wiggle strength
|
||||||
|
float sineCurve = (float) Math.sin(i * waveFreq + phase) * sineAmplitude;
|
||||||
|
|
||||||
|
// Blend between them
|
||||||
|
float t = Math.min(1.0f, Math.max(0.0f, (curveMagnitude - 0.3f) / 0.2f));
|
||||||
|
t = t * t * (3 - 2 * t); // smoothstep
|
||||||
|
|
||||||
|
return (1.0f - t) * powCurve + t * (powCurve + sineCurve);
|
||||||
|
}
|
||||||
|
|
||||||
private void renderCape(MatrixStack matrixStack, VertexConsumer vertexConsumer,
|
private void renderCape(MatrixStack matrixStack, VertexConsumer vertexConsumer,
|
||||||
PlayerEntityRenderState playerState, int light, int overlay, float rotation,
|
PlayerEntityRenderState playerState, int light, int overlay, float rotation,
|
||||||
float curveMagnitude) {
|
float curveMagnitude) {
|
||||||
@@ -192,9 +209,8 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
float totalVHeight = frontV2 - frontV1;
|
float totalVHeight = frontV2 - frontV1;
|
||||||
float partVHeight = totalVHeight / PARTS;
|
float partVHeight = totalVHeight / PARTS;
|
||||||
|
|
||||||
float curveOffsetTop = (float) Math.pow((double) (PARTS - i) / PARTS, 2) * curveMagnitude;
|
float curveOffsetTop = getCurve(i, curveMagnitude, playerState);
|
||||||
float curveOffsetBottom = (float) Math.pow((double) (PARTS - i - 1) / PARTS, 2)
|
float curveOffsetBottom = getCurve(i + 1, curveMagnitude, playerState);
|
||||||
* curveMagnitude;
|
|
||||||
|
|
||||||
// FRONT FACE
|
// FRONT FACE
|
||||||
this.renderCapeQuad(vertexConsumer, matrixStack,
|
this.renderCapeQuad(vertexConsumer, matrixStack,
|
||||||
@@ -252,13 +268,12 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
matrixStack.pop();
|
matrixStack.pop();
|
||||||
|
|
||||||
// BOTTOM FACE
|
// BOTTOM FACE
|
||||||
float curveOffsetTop = (float) Math.pow(1.0f, 2) * curveMagnitude;
|
float curveOffset = getCurve(0, curveMagnitude, playerState);
|
||||||
float curveOffsetBottom = (float) Math.pow(1.0f, 2) * curveMagnitude;
|
|
||||||
|
|
||||||
this.renderCapeQuad(vertexConsumer, matrixStack,
|
this.renderCapeQuad(vertexConsumer, matrixStack,
|
||||||
new Vec3d(x2, 0.0f, z2 + curveOffsetBottom),
|
new Vec3d(x2, 0.0f, z2 + curveOffset),
|
||||||
new Vec3d(x1, 0.0f, z2 + curveOffsetBottom),
|
new Vec3d(x1, 0.0f, z2 + curveOffset),
|
||||||
new Vec3d(x1, 0.0f, z1 + curveOffsetTop), new Vec3d(x2, 0.0f, z1 + curveOffsetTop),
|
new Vec3d(x1, 0.0f, z1 + curveOffset), new Vec3d(x2, 0.0f, z1 + curveOffset),
|
||||||
bottomU1, bottomV1, bottomU2, bottomV2,
|
bottomU1, bottomV1, bottomU2, bottomV2,
|
||||||
light, overlay,
|
light, overlay,
|
||||||
0.0f, 0.0f, 1.0f, false);
|
0.0f, 0.0f, 1.0f, false);
|
||||||
@@ -301,7 +316,7 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
VertexConsumer vertexConsumer = vertexConsumerProvider
|
VertexConsumer vertexConsumer = vertexConsumerProvider
|
||||||
.getBuffer(RenderLayer.getEntityAlpha(customCape));
|
.getBuffer(RenderLayer.getEntityAlpha(customCape));
|
||||||
|
|
||||||
if (SaturnClientConfig.bendyCloaks.value) {
|
if (!playerEntityRenderState.isSwimming && SaturnClientConfig.bendyCloaks.value) {
|
||||||
float targetVelocity = ((6.0F
|
float targetVelocity = ((6.0F
|
||||||
+ playerEntityRenderState.field_53537 / 2.0F
|
+ playerEntityRenderState.field_53537 / 2.0F
|
||||||
+ playerEntityRenderState.field_53536) * 0.02f);
|
+ playerEntityRenderState.field_53536) * 0.02f);
|
||||||
@@ -315,6 +330,12 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
float rotation = this.currentVelocity * 72.0f;
|
float rotation = this.currentVelocity * 72.0f;
|
||||||
float curve = this.currentVelocity * 0.4f;
|
float curve = this.currentVelocity * 0.4f;
|
||||||
|
|
||||||
|
if (playerEntityRenderState.sneaking && playerEntityRenderState.isInSneakingPose) {
|
||||||
|
matrixStack.translate(0, 0.24f, 0);
|
||||||
|
matrixStack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(27.0f));
|
||||||
|
curve += 0.2f;
|
||||||
|
}
|
||||||
|
|
||||||
matrixStack.translate(0.0f, -0.25f, 0.0f);
|
matrixStack.translate(0.0f, -0.25f, 0.0f);
|
||||||
if (this.hasCustomModelForLayer(
|
if (this.hasCustomModelForLayer(
|
||||||
playerEntityRenderState.equippedChestStack,
|
playerEntityRenderState.equippedChestStack,
|
||||||
|
|||||||
Reference in New Issue
Block a user