mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-09 15:29:20 -04:00
bump kutil
This speeds up loading a lot, it uses ConcurrentIterator instead of ConcurrentSpliterator for model baking
This commit is contained in:
parent
81b1241563
commit
de30a0cc48
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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<EntityRen
|
||||
|
||||
fun iterate(executor: ((EntityRenderer<*>) -> 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()
|
||||
}
|
||||
}
|
||||
|
@ -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<BlockModelPrototype>() ?: return@iterate
|
||||
loader.context.connection.registries.block.async(priority = ThreadPool.HIGH) {
|
||||
val prototype = it.model.nullCast<BlockModelPrototype>() ?: return@async
|
||||
it.model = null
|
||||
|
||||
prototype.bake(context, it)
|
||||
|
Loading…
x
Reference in New Issue
Block a user