Skip to content

Commit 314409f

Browse files
committed
show interpolated renders between current and predicted next tick progress next tick to be more accurate and future-proof for per frame rendering
1 parent a0cca20 commit 314409f

File tree

1 file changed

+15
-10
lines changed
  • common/src/main/kotlin/com/lambda/interaction/request/breaking

1 file changed

+15
-10
lines changed

common/src/main/kotlin/com/lambda/interaction/request/breaking/BreakManager.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import com.lambda.util.BlockUtils.calcItemBlockBreakingDelta
6969
import com.lambda.util.BlockUtils.isEmpty
7070
import com.lambda.util.BlockUtils.isNotBroken
7171
import com.lambda.util.BlockUtils.isNotEmpty
72+
import com.lambda.util.extension.partialTicks
7273
import com.lambda.util.item.ItemUtils.block
7374
import com.lambda.util.math.lerp
7475
import com.lambda.util.player.gamemode
@@ -198,21 +199,25 @@ object BreakManager : RequestHandler<BreakRequest>(
198199
info.context.blockPos,
199200
info.breakConfig,
200201
if (!info.isRedundant) player.inventory.getStack(info.context.hotbarIndex) else null
201-
)
202+
).toDouble()
203+
val currentDelta = info.breakingTicks * breakDelta
204+
202205
val threshold = if (info.isPrimary) info.breakConfig.breakThreshold else 1f
203-
val progress = (info.breakingTicks * breakDelta).toDouble() / (threshold + (breakDelta * config.fudgeFactor))
204-
val state = info.context.cachedState
205-
val boxes = state.getOutlineShape(world, info.context.blockPos).boundingBoxes.map {
206-
it.offset(info.context.blockPos)
207-
}
206+
val adjustedThreshold = threshold + (breakDelta * config.fudgeFactor)
207+
208+
val currentProgress = currentDelta / adjustedThreshold
209+
val nextTicksProgress = (currentDelta + breakDelta) / adjustedThreshold
210+
val interpolatedProgress = lerp(mc.partialTicks, currentProgress, nextTicksProgress)
208211

209-
val fillColor = if (config.dynamicFillColor) lerp(progress, config.startFillColor, config.endFillColor)
212+
val fillColor = if (config.dynamicFillColor) lerp(interpolatedProgress, config.startFillColor, config.endFillColor)
210213
else config.staticFillColor
211-
val outlineColor = if (config.dynamicOutlineColor) lerp(progress, config.startOutlineColor, config.endOutlineColor)
214+
val outlineColor = if (config.dynamicOutlineColor) lerp(interpolatedProgress, config.startOutlineColor, config.endOutlineColor)
212215
else config.staticOutlineColor
213216

214-
boxes.forEach boxes@ { box ->
215-
val interpolated = interpolateBox(box, progress, info.breakConfig)
217+
info.context.cachedState.getOutlineShape(world, info.context.blockPos).boundingBoxes.map {
218+
it.offset(info.context.blockPos)
219+
}.forEach boxes@ { box ->
220+
val interpolated = interpolateBox(box, interpolatedProgress, info.breakConfig)
216221
if (config.fill) event.renderer.buildFilled(interpolated, fillColor)
217222
if (config.outline) event.renderer.buildOutline(interpolated, outlineColor)
218223
}

0 commit comments

Comments
 (0)