summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
index 2af59435d..f90237588 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/DelayedRun.kt
@@ -1,25 +1,34 @@
package at.hannibal2.skyhanni.utils
+import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
import kotlin.time.Duration
+// TODO find better sync bug fix than creating a new map for each use
object DelayedRun {
- val map = mutableMapOf<() -> Any, SimpleTimeMark>()
+ var map = mapOf<() -> Any, SimpleTimeMark>()
fun runDelayed(duration: Duration, run: () -> Unit) {
- map[run] = SimpleTimeMark.now() + duration
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now() + duration
+ }
}
fun runNextTick(run: () -> Unit) {
- map[run] = SimpleTimeMark.now()
+ map = map.editCopy {
+ this[run] = SimpleTimeMark.now()
+ }
}
fun checkRuns() {
- map.entries.removeIf { (runnable, time) ->
- val inPast = time.isInPast()
- if (inPast) {
- runnable()
+ if (map.isEmpty()) return
+ map = map.editCopy {
+ entries.removeIf { (runnable, time) ->
+ val inPast = time.isInPast()
+ if (inPast) {
+ runnable()
+ }
+ inPast
}
- inPast
}
}
}