From c2148dc9c57f4be833dfd8071290471a69da205f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 5 Jul 2023 13:24:32 +0200 Subject: Added ParkourHelper --- .../features/rift/RiftUpsideDownParkour.kt | 113 ++++----------------- 1 file changed, 20 insertions(+), 93 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/features') diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftUpsideDownParkour.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftUpsideDownParkour.kt index 721c51654..b81018bb5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftUpsideDownParkour.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftUpsideDownParkour.kt @@ -2,38 +2,25 @@ package at.hannibal2.skyhanni.features.rift import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.CheckRenderEntityEvent +import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer -import at.hannibal2.skyhanni.utils.LocationUtils.playerLocation import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.toChromaColor -import at.hannibal2.skyhanni.utils.LorenzVec -import at.hannibal2.skyhanni.utils.RenderUtils -import at.hannibal2.skyhanni.utils.RenderUtils.draw3DLine -import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText -import at.hannibal2.skyhanni.utils.RenderUtils.drawFilledBoundingBox -import at.hannibal2.skyhanni.utils.RenderUtils.expandBlock +import at.hannibal2.skyhanni.utils.ParkourHelper import at.hannibal2.skyhanni.utils.jsonobjects.ParkourJson -import at.hannibal2.skyhanni.utils.jsonobjects.ParkourJson.ShortCut -import net.minecraft.client.Minecraft import net.minecraftforge.client.event.RenderWorldLastEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.awt.Color -import kotlin.time.Duration.Companion.seconds class RiftUpsideDownParkour { private val config get() = SkyHanniMod.feature.rift.mirrorVerse.upsideDownParkour - private var locations = emptyList() - private var shortCuts = emptyList() - private var current = -1 - private var visible = false + + private var parkourHelper: ParkourHelper? = null @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { val data = event.getConstant("RiftUpsideDownParkour") ?: return - locations = data.locations - shortCuts = data.shortCuts + parkourHelper = ParkourHelper(data.locations, data.shortCuts) } @SubscribeEvent @@ -41,8 +28,10 @@ class RiftUpsideDownParkour { if (!isEnabled()) return if (!config.hidePlayers) return - if (current != -1) { - event.isCanceled = true + parkourHelper?.let { + if (it.inParkour()) { + event.isCanceled = true + } } } @@ -51,89 +40,27 @@ class RiftUpsideDownParkour { if (!isEnabled()) return if (event.message == "§c§lOH NO! THE LAVA OOFED YOU BACK TO THE START!") { - current = -1 - visible = false + parkourHelper?.reset() } } - private val lookAhead get() = config.lookAhead + 1 - @SubscribeEvent - fun onRenderWorld(event: RenderWorldLastEvent) { - if (!isEnabled()) return - - if (current == locations.size - 1) visible = false - - val distanceToPlayer = locations.first().distanceToPlayer() - if (distanceToPlayer < 2) { - visible = true - } else if (distanceToPlayer > 15) { - if (current < 1) { - visible = false - } - } - - if (!visible) return - - for ((index, location) in locations.withIndex()) { - if (location.distanceToPlayer() < 2) { - if (Minecraft.getMinecraft().thePlayer.onGround) { - current = index - } - } - } - if (current < 0) return - - val inProgressVec = getInProgressPair().toSingletonListOrEmpty() - for ((prev, next) in locations.asSequence().withIndex().zipWithNext().drop(current) - .take(lookAhead - 1) + inProgressVec) { - event.draw3DLine(prev.value, next.value, colorForIndex(prev.index), 5, false, colorForIndex(next.index)) - } - val nextShortcuts = current until current + lookAhead - for (shortCut in shortCuts) { - if (shortCut.from in nextShortcuts && shortCut.to in locations.indices) { - event.draw3DLine(locations[shortCut.from], locations[shortCut.to], Color.RED, 3, false) - event.drawFilledBoundingBox(axisAlignedBB(locations[shortCut.to]), Color.RED, 1f) - event.drawDynamicText(locations[shortCut.to].add(-0.5, 1.0, -0.5), "§cShortcut", 2.5) + fun onConfigLoad(event: ConfigLoadEvent) { + LorenzUtils.onToggle(config.rainbowColor, config.monochromeColor, config.lookAhead) { + parkourHelper?.run { + rainbowColor = config.rainbowColor.get() + monochromeColor = config.monochromeColor.get().toChromaColor() + lookAhead = config.lookAhead.get() + 1 } - - } - for ((index, location) in locations.asSequence().withIndex().drop(current) - .take(lookAhead) + inProgressVec.map { it.second }) { - event.drawFilledBoundingBox(axisAlignedBB(location), colorForIndex(index), 1f) } } - private fun getInProgressPair(): Pair, IndexedValue>? { - if (current < 0 || current + lookAhead >= locations.size) return null - val currentPosition = locations[current] - val nextPosition = locations[current + 1] - val lookAheadStart = locations[current + lookAhead - 1] - val lookAheadEnd = locations[current + lookAhead] - if (playerLocation().distance(nextPosition) > currentPosition.distance(nextPosition)) return null - return Pair( - IndexedValue(current + lookAhead - 1, lookAheadStart), - IndexedValue( - current + lookAhead, lookAheadStart.add( - lookAheadEnd.subtract(lookAheadStart) - .scale(playerLocation().distance(currentPosition) / currentPosition.distance(nextPosition)) - ) - ) - ) - } - - private fun axisAlignedBB(loc: LorenzVec) = loc.add(-1.0, 0.0, -1.0).boundingToOffset(2, -1, 2).expandBlock() + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + if (!isEnabled()) return - private fun colorForIndex(index: Int) = if (config.rainbowColor) { - RenderUtils.chromaColor(4.seconds, offset = -index / 12f, brightness = 0.7f) - } else { - config.monochromeColor.toChromaColor() + parkourHelper?.render(event) } fun isEnabled() = RiftAPI.inRift() && LorenzUtils.skyBlockArea == "Mirrorverse" && config.enabled } - -private fun T?.toSingletonListOrEmpty(): List { - if (this == null) return emptyList() - return listOf(this) -} -- cgit