diff --git a/gradle.properties b/gradle.properties index 0d462dcb1..ecef40819 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,5 +17,5 @@ lwjgl.version=3.3.3 ikonli.version=12.3.1 netty.version=4.1.101.Final jackson.version=2.16.0 -kutil.version=1.24.6 +kutil.version=1.25.0 glm.version=0.9.9.1-12 diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/manager/ChunkTicker.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/manager/ChunkTicker.kt index c9dc2a664..7c443ef71 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/manager/ChunkTicker.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/manager/ChunkTicker.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.data.world.chunk.manager import de.bixilon.kotlinglm.vec2.Vec2i -import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator +import de.bixilon.kutil.collections.iterator.AsyncIteration.async import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.minosoft.protocol.packets.s2c.play.block.chunk.ChunkUtil.isInViewDistance import java.util.* @@ -24,10 +24,9 @@ class ChunkTicker(val manager: ChunkManager) { fun tick(simulationDistance: Int, cameraPosition: Vec2i) { - val iterator = ConcurrentIterator(manager.chunks.unsafe.entries.spliterator(), priority = ThreadPool.HIGH) - iterator.iterate { + manager.chunks.unsafe.entries.async(priority = ThreadPool.HIGH) { if (!it.key.isInViewDistance(simulationDistance, cameraPosition)) { - return@iterate + return@async } it.value.tick(manager.world.connection, it.key, random) } diff --git a/src/main/java/de/bixilon/minosoft/data/world/entities/EntityTicker.kt b/src/main/java/de/bixilon/minosoft/data/world/entities/EntityTicker.kt index bf4c5bae7..bd9f9aafe 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/entities/EntityTicker.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/entities/EntityTicker.kt @@ -13,7 +13,7 @@ package de.bixilon.minosoft.data.world.entities -import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator +import de.bixilon.kutil.collections.iterator.AsyncIteration.async import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.LivingEntity @@ -48,10 +48,9 @@ class EntityTicker(val entities: WorldEntities) { fun tick() { - val iterator = ConcurrentIterator(entities.entities.spliterator(), priority = ThreadPool.HIGH) - iterator.iterate { + entities.entities.async(priority = ThreadPool.HIGH) { if (it.attachment.vehicle != null) { - return@iterate + return@async } tickEntity(it) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/EntityRendererManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/EntityRendererManager.kt index 75297bd4d..d87b86f6b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/EntityRendererManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/EntityRendererManager.kt @@ -14,8 +14,8 @@ package de.bixilon.minosoft.gui.rendering.entities import de.bixilon.kutil.cast.CastUtil.nullCast -import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator import de.bixilon.kutil.collections.map.LockMap +import de.bixilon.kutil.collections.spliterator.async.ConcurrentSpliterator import de.bixilon.kutil.concurrent.lock.simple.SimpleLock import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.exception.ExceptionUtil.ignoreAll @@ -97,7 +97,7 @@ class EntityRendererManager(val renderer: EntitiesRenderer) : Iterable) -> Unit)) { lock.acquire() - ConcurrentIterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor) + ConcurrentSpliterator(renderers.unsafe.values.spliterator(), priority = ThreadPool.HIGHER).iterate(executor) lock.release() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/loader/BlockLoader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/loader/BlockLoader.kt index a48ef8774..b938586f2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/loader/BlockLoader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/loader/BlockLoader.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.rendering.models.loader import de.bixilon.kutil.cast.CastUtil.nullCast -import de.bixilon.kutil.collections.iterator.async.ConcurrentIterator +import de.bixilon.kutil.collections.iterator.AsyncIteration.async import de.bixilon.kutil.collections.map.LockMap import de.bixilon.kutil.concurrent.pool.ThreadPool import de.bixilon.kutil.latch.AbstractLatch @@ -71,16 +71,15 @@ class BlockLoader(private val loader: ModelLoader) { } fun load(latch: AbstractLatch?) { - val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator - iterator.iterate { - if (it.model != null) return@iterate // model already set + loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) { + if (it.model != null) return@async // model already set val prototype: BlockModelPrototype try { - prototype = loadState(it) ?: return@iterate + prototype = loadState(it) ?: return@async } catch (error: Exception) { Log.log(LogMessageType.RENDERING, LogLevels.WARN) { "Can not load block model for block $it: $error" } Log.log(LogMessageType.RENDERING, LogLevels.VERBOSE) { error } - return@iterate + return@async } it.model = prototype @@ -89,9 +88,8 @@ class BlockLoader(private val loader: ModelLoader) { fun bake(latch: AbstractLatch?) { val context = loader.context - val iterator = ConcurrentIterator(loader.context.connection.registries.block.spliterator(), priority = ThreadPool.HIGH) // TODO: ConcurrentIterator - iterator.iterate { - val prototype = it.model.nullCast() ?: return@iterate + loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) { + val prototype = it.model.nullCast() ?: return@async it.model = null prototype.bake(context, it)