diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-03-24 00:53:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-24 00:53:25 +0100 |
commit | 384d399ee67e5a779969e1c2483893d139da77eb (patch) | |
tree | 9737ae320ac361b75f87653f30194c60c54a023f /src/main/java/at/hannibal2/skyhanni/features/garden | |
parent | 46c973abbaafdc814b3aa0a9627fe655464e339d (diff) | |
download | skyhanni-384d399ee67e5a779969e1c2483893d139da77eb.tar.gz skyhanni-384d399ee67e5a779969e1c2483893d139da77eb.tar.bz2 skyhanni-384d399ee67e5a779969e1c2483893d139da77eb.zip |
Fix: Lane Switch Warning (part 5) (#1245)
Co-authored-by: Alexia Luna <me@alexia.lol>
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/garden')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt | 67 |
1 files changed, 49 insertions, 18 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt index adbd2b9d2..a6a1aaebe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt @@ -36,10 +36,18 @@ object FarmingLaneFeatures { private var display = listOf<String>() private var timeRemaining: Duration? = null private var lastSpeed = 0.0 - private var validSpeed = false private var lastTimeFarming = SimpleTimeMark.farPast() private var lastPlaySound = SimpleTimeMark.farPast() private var lastDirection = 0 + private var movementState = MovementState.CALCULATING + + enum class MovementState(val label: String) { + NOT_MOVING("§ePaused"), + TOO_SLOW("§cToo slow!"), + CALCULATING("§aCalculating.."), + NORMAL(""), + ; + } @SubscribeEvent fun onFarmingLaneSwitch(event: FarmingLaneSwitchEvent) { @@ -67,10 +75,18 @@ object FarmingLaneFeatures { if (config.distanceDisplay) { display = buildList { add("§7Distance until switch: §e${currentDistance.round(1)}") - val color = if (validSpeed) "§b" else "§8" + + val normal = movementState == MovementState.NORMAL + val color = if (normal) "§b" else "§8" val timeRemaining = timeRemaining ?: return@buildList val format = timeRemaining.format(showMilliSeconds = timeRemaining < 20.seconds) - add("§7Time remaining: $color$format") + val suffix = if (!normal) { + " §7(${movementState.label}§7)" + } else "" + add("§7Time remaining: $color$format$suffix") + if (MovementSpeedDisplay.usingSoulsandSpeed) { + add("§7Using inaccurate soul sand speed!") + } } } } @@ -131,23 +147,14 @@ object FarmingLaneFeatures { } } + private var sameSpeedCounter = 0 + private fun calculateSpeed(): Boolean { - val speedPerSecond = MovementSpeedDisplay.speedInLastTick.round(2) - if (speedPerSecond == 0.0) return false - val speedTooSlow = speedPerSecond < 1 - if (speedTooSlow) { - validSpeed = false - return false - } - // only calculate the time if the speed has not changed - if (lastSpeed != speedPerSecond) { - lastSpeed = speedPerSecond - validSpeed = false - return false - } - validSpeed = true + val speed = MovementSpeedDisplay.speed.round(2) + movementState = calculateMovementState(speed) + if (movementState != MovementState.NORMAL) return false - val timeRemaining = (currentDistance / speedPerSecond).seconds + val timeRemaining = (currentDistance / speed).seconds FarmingLaneFeatures.timeRemaining = timeRemaining val warnAt = config.laneSwitchNotification.secondsBefore.seconds if (timeRemaining >= warnAt) { @@ -159,6 +166,30 @@ object FarmingLaneFeatures { return lastTimeFarming.passedSince() < warnAt } + private fun calculateMovementState(speed: Double): MovementState { + if (lastSpeed != speed) { + lastSpeed = speed + sameSpeedCounter = 0 + } + sameSpeedCounter++ + + if (speed == 0.0 && sameSpeedCounter > 1) { + return MovementState.NOT_MOVING + } + val speedTooSlow = speed < 1 + if (speedTooSlow && sameSpeedCounter > 5) { + return MovementState.TOO_SLOW + } + // only calculate the time if the speed has not changed + if (!MovementSpeedDisplay.usingSoulsandSpeed) { + if (sameSpeedCounter < 6) { + return MovementState.CALCULATING + } + } + + return MovementState.NORMAL + } + @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!GardenAPI.inGarden()) return |