Add an await function to the AsyncActionRunner trait

This commit is contained in:
Gary Tierney
2017-09-16 22:34:24 +01:00
parent f23114d511
commit 3a9e435189
4 changed files with 63 additions and 3 deletions
@@ -1,10 +1,10 @@
package org.apollo.game.action
import kotlinx.coroutines.experimental.*
import kotlinx.coroutines.experimental.CommonPool
import kotlinx.coroutines.experimental.Job
import kotlinx.coroutines.experimental.channels.Channel
import kotlinx.coroutines.experimental.launch
import kotlinx.coroutines.experimental.selects.select
import org.apollo.game.model.entity.Mob
import java.util.function.Supplier
class AsyncActionRunner(val actionSupplier: () -> Action<*>, val callback: suspend () -> Unit) {
var job: Job? = null
@@ -53,4 +53,15 @@ class AsyncActionRunner(val actionSupplier: () -> Action<*>, val callback: suspe
remainingPulses -= numPulses
}
}
suspend fun await(condition: () -> Boolean, timeout: Int = 15) {
var remainingPulsesBeforeTimeout = timeout
while (!condition.invoke()) {
remainingPulsesBeforeTimeout -= pulseChannel.receive()
if (remainingPulsesBeforeTimeout <= 0) {
break
}
}
}
}