mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-14 18:05:51 -04:00
skeletal model loading
This commit is contained in:
parent
03d80673d4
commit
bf08ac0f19
@ -13,27 +13,53 @@
|
|||||||
|
|
||||||
package de.bixilon.minosoft.gui.rendering.models.loader
|
package de.bixilon.minosoft.gui.rendering.models.loader
|
||||||
|
|
||||||
|
import de.bixilon.kutil.collections.CollectionUtil.synchronizedMapOf
|
||||||
|
import de.bixilon.kutil.collections.map.SynchronizedMap
|
||||||
import de.bixilon.kutil.latch.AbstractLatch
|
import de.bixilon.kutil.latch.AbstractLatch
|
||||||
|
import de.bixilon.minosoft.assets.util.InputStreamUtil.readJson
|
||||||
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
import de.bixilon.minosoft.data.registries.identified.ResourceLocation
|
||||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
|
||||||
|
import de.bixilon.minosoft.gui.rendering.skeletal.model.SkeletalModel
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
import de.bixilon.minosoft.gui.rendering.system.base.texture.shader.ShaderTexture
|
||||||
|
|
||||||
class SkeletalLoader(private val loader: ModelLoader) {
|
class SkeletalLoader(private val loader: ModelLoader) {
|
||||||
|
private val registered: SynchronizedMap<ResourceLocation, RegisteredModel> = synchronizedMapOf()
|
||||||
|
private val baked: MutableMap<ResourceLocation, BakedSkeletalModel> = HashMap()
|
||||||
|
|
||||||
fun load(latch: AbstractLatch?) {
|
fun load(latch: AbstractLatch?) {
|
||||||
|
val templates: MutableMap<ResourceLocation, SkeletalModel> = HashMap(this.registered.size, 0.1f)
|
||||||
|
|
||||||
|
for ((name, registered) in this.registered) {
|
||||||
|
val template = templates.getOrPut(registered.template) { loader.context.connection.assetsManager[registered.template].readJson() }
|
||||||
|
|
||||||
|
template.load(loader.context, registered.override.keys)
|
||||||
|
registered.model = template
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bake(latch: AbstractLatch?) {
|
fun bake(latch: AbstractLatch?) {
|
||||||
|
for ((name, registered) in this.registered) {
|
||||||
|
val baked = registered.model!!.bake(loader.context, registered.override)
|
||||||
|
this.baked[name] = baked
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun cleanup() {
|
fun cleanup() {
|
||||||
|
this.registered.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun get(name: ResourceLocation): BakedSkeletalModel? {
|
operator fun get(name: ResourceLocation): BakedSkeletalModel? {
|
||||||
TODO()
|
return this.baked[name]
|
||||||
}
|
}
|
||||||
|
|
||||||
fun register(name: ResourceLocation, template: ResourceLocation = name, override: Map<ResourceLocation, ShaderTexture>) {
|
fun register(name: ResourceLocation, template: ResourceLocation = name, override: Map<ResourceLocation, ShaderTexture>) {
|
||||||
TODO()
|
val previous = this.registered.put(name, RegisteredModel(template, override))
|
||||||
|
if (previous != null) throw IllegalArgumentException("A model with the name $name was already registered!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private data class RegisteredModel(
|
||||||
|
val template: ResourceLocation,
|
||||||
|
val override: Map<ResourceLocation, ShaderTexture>,
|
||||||
|
var model: SkeletalModel? = null,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
@ -32,10 +32,12 @@ data class SkeletalModel(
|
|||||||
) {
|
) {
|
||||||
val loadedTextures: MutableMap<ResourceLocation, SkeletalTextureInstance> = mutableMapOf()
|
val loadedTextures: MutableMap<ResourceLocation, SkeletalTextureInstance> = mutableMapOf()
|
||||||
|
|
||||||
fun load(context: RenderContext) {
|
fun load(context: RenderContext, skip: Set<ResourceLocation>) {
|
||||||
for ((name, properties) in this.textures) {
|
for ((name, properties) in this.textures) {
|
||||||
if (!properties.load) continue
|
if (name in skip) continue
|
||||||
context.textures.staticTextures.createTexture(name.texture())
|
val file = name.texture()
|
||||||
|
if (file in skip) continue
|
||||||
|
context.textures.staticTextures.createTexture(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,5 +17,4 @@ import de.bixilon.kotlinglm.vec2.Vec2i
|
|||||||
|
|
||||||
data class SkeletalTexture(
|
data class SkeletalTexture(
|
||||||
val resolution: Vec2i,
|
val resolution: Vec2i,
|
||||||
val load: Boolean = true,
|
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user