aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/Timer.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/Timer.kt43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt
new file mode 100644
index 000000000..55ea90b52
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/Timer.kt
@@ -0,0 +1,43 @@
+package at.hannibal2.skyhanni.utils
+
+import com.google.gson.annotations.Expose
+import kotlin.time.Duration
+
+class Timer(
+ @Expose
+ var duration: Duration,
+
+ @Expose
+ private var started: SimpleTimeMark = SimpleTimeMark.now(),
+
+ startPaused: Boolean = false
+): Comparable<Timer> {
+
+ @Expose
+ private var paused: SimpleTimeMark? = null
+
+ init {
+ if (startPaused) {
+ paused = started
+ }
+ }
+
+ val ended get() = !remaining.isPositive()
+ val remaining get() = duration - elapsed
+ val elapsed get() = paused?.let { it - started } ?: started.passedSince()
+
+ fun pause() {
+ paused = SimpleTimeMark.now()
+ }
+
+ fun resume() {
+ paused?.let {
+ started = it
+ duration = it - started
+ paused = null
+ }
+ }
+
+ override fun compareTo(other: Timer): Int = remaining.compareTo(other.remaining)
+
+} \ No newline at end of file