From 5de111f34cf75c2568372dfc3b9949819de99d7b Mon Sep 17 00:00:00 2001 From: Aditya Gupta Date: Sat, 11 Sep 2021 18:55:54 -0400 Subject: [PATCH] fixed #6 (kinda scuffed but it more or less works) --- .../sdoaj/jimgus/util/math/SplineHelper.java | 27 +++++++++++++++++-- .../BigMushroomStructureFeature.java | 4 +-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sdoaj/jimgus/util/math/SplineHelper.java b/src/main/java/org/sdoaj/jimgus/util/math/SplineHelper.java index 6f2936b..90b8594 100644 --- a/src/main/java/org/sdoaj/jimgus/util/math/SplineHelper.java +++ b/src/main/java/org/sdoaj/jimgus/util/math/SplineHelper.java @@ -118,13 +118,36 @@ public static SplineSDFBuilder from(List spline) { } public SDFAbstractShape build() { + return this.build(0f); + } + + public SDFAbstractShape build(float padding) { SDF sdf = null; int points = spline.size(); final int count = points - 1; for (int i = 0; i < count; i++) { - SDFLine line = new SDFLine(spline.get(i), spline.get(i + 1)) - .radius(this.radius, ((float) i) / count, ((float) (i + 1)) / count) + Vec3f point1 = spline.get(i); + Vec3f point2 = spline.get(i + 1); + float radiusMinT = ((float) i) / count; + float radiusMaxT = ((float) (i + 1)) / count; + + if (i != 0 && i != count - 1) { + Vec3f vecLine = point2.subtract(point1); + + if (padding != 0f) { + Vec3f direction = vecLine.normalize(); + point1 = point1.add(direction.multiply(-padding)); + point2 = point2.add(direction.multiply(padding)); + } + +// float length = vecLine.length(); +// float paddingRadius = padding / length; +// radiusMinT -= paddingRadius; +// radiusMaxT += paddingRadius; + } + + SDFLine line = new SDFLine(point1, point2).radius(this.radius, radiusMinT, radiusMaxT) .radiusMultiplier(radiusMultiplier); if (i == 0 && !capStart) { diff --git a/src/main/java/org/sdoaj/jimgus/world/structure/BigMushroomStructureFeature.java b/src/main/java/org/sdoaj/jimgus/world/structure/BigMushroomStructureFeature.java index a100c56..e37c5a8 100644 --- a/src/main/java/org/sdoaj/jimgus/world/structure/BigMushroomStructureFeature.java +++ b/src/main/java/org/sdoaj/jimgus/world/structure/BigMushroomStructureFeature.java @@ -39,12 +39,12 @@ protected void fillStructureWorld(StructureWorld world, BlockPos pos, Random ran List stemSpline = SplineHelper.makeSpline(0, 0, 0, 0, height, 0, 6); SplineHelper.offsetPoints(stemSpline, () -> MathHelper.nextFloatOne(random), 10, 0, 10, false, true); - stemSpline = SplineHelper.bezier(stemSpline, 32); + stemSpline = SplineHelper.bezier(stemSpline, 14); SDF stem = SplineHelper.SplineSDFBuilder.from(stemSpline) .radius(delta -> { float x = delta - 0.5f; return 4 * x * x + 1.5f; - }).radiusMultiplier(4.5f).build().setBlock(BlockInit.TEST_BLOCK.get()); + }).radiusMultiplier(4.5f).build(1.5f).setBlock(BlockInit.TEST_BLOCK.get()); float capRadius = MathHelper.nextFloat(random, 36, 48); capRadius *= MathHelper.mapRange(height, heightMin, heightMax, 0.8f, 1.2f);