aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/garden
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-03-24 00:53:25 +0100
committerGitHub <noreply@github.com>2024-03-24 00:53:25 +0100
commit384d399ee67e5a779969e1c2483893d139da77eb (patch)
tree9737ae320ac361b75f87653f30194c60c54a023f /src/main/java/at/hannibal2/skyhanni/features/garden
parent46c973abbaafdc814b3aa0a9627fe655464e339d (diff)
downloadskyhanni-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.kt67
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