save block display

This commit is contained in:
Moritz Zwerger 2023-11-15 16:12:15 +01:00
parent 7a2c29b524
commit 88eeac3e09
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
6 changed files with 27 additions and 7 deletions

View File

@ -73,6 +73,11 @@ open class BlockFeature(
override fun draw(mesh: BlockMesh) {
renderer.renderer.context.system.reset(faceCulling = false)
val shader = renderer.renderer.features.block.shader
draw(mesh, shader)
}
protected open fun draw(mesh: BlockMesh, shader: BlockShader) {
shader.use()
shader.matrix = matrix
shader.tint = renderer.light.value
super.draw(mesh)

View File

@ -136,7 +136,7 @@ data class SingleBlockStateApply(
element.bake(bakedFaces, properties)
}
return BakedModel(bakedFaces.compact(), properties.compactProperties(), this.particle)
return BakedModel(bakedFaces.compact(), properties.compactProperties(), model.display, this.particle)
}
private fun Vec2.applyRotation(axis: Axes, data: FaceVertexData) {

View File

@ -23,12 +23,15 @@ import de.bixilon.minosoft.gui.rendering.chunk.mesh.BlockVertexConsumer
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.cull.FaceCulling
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.cull.side.SideProperties
import de.bixilon.minosoft.gui.rendering.models.block.state.render.BlockRender
import de.bixilon.minosoft.gui.rendering.models.raw.display.DisplayPositions
import de.bixilon.minosoft.gui.rendering.models.raw.display.ModelDisplay
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
import java.util.*
class BakedModel(
val faces: Array<Array<BakedFace>>,
val properties: Array<SideProperties?>,
val display: Map<DisplayPositions, ModelDisplay>?,
val particle: Texture?,
) : BlockRender {
@ -71,4 +74,8 @@ class BakedModel(
override fun render(mesh: BlockVertexConsumer, state: BlockState, tints: IntArray?) = render(mesh, tints)
override fun render(mesh: BlockVertexConsumer, stack: ItemStack, tints: IntArray?) = render(mesh, tints)
override fun getDisplay(position: DisplayPositions): ModelDisplay? {
return this.display?.get(position)
}
}

View File

@ -25,6 +25,8 @@ import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.cull.side.SideProperties
import de.bixilon.minosoft.gui.rendering.models.raw.display.DisplayPositions
import de.bixilon.minosoft.gui.rendering.models.raw.display.ModelDisplay
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
import java.util.*
@ -54,6 +56,10 @@ interface PickedBlockRender : BlockRender {
return default?.getProperties(direction) // both models should have the same properties
}
override fun getDisplay(position: DisplayPositions): ModelDisplay? {
return default?.getDisplay(position)
}
override fun getParticleTexture(random: Random?, position: Vec3i): Texture? {
return default?.getParticleTexture(random, position)
}

View File

@ -28,6 +28,8 @@ import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.BakedModel
import de.bixilon.minosoft.gui.rendering.models.block.state.baked.cull.side.SideProperties
import de.bixilon.minosoft.gui.rendering.models.raw.display.DisplayPositions
import de.bixilon.minosoft.gui.rendering.models.raw.display.ModelDisplay
import de.bixilon.minosoft.gui.rendering.system.base.texture.texture.Texture
import java.util.*
import kotlin.math.abs
@ -78,6 +80,10 @@ class WeightedBlockRender(
models.first().model.render(mesh, stack, tints)
}
override fun getDisplay(position: DisplayPositions): ModelDisplay? {
return models.first().model.getDisplay(position)
}
data class WeightedEntry(
val weight: Int,

View File

@ -14,7 +14,6 @@
package de.bixilon.minosoft.gui.rendering.models.item
import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.data.container.stack.ItemStack
import de.bixilon.minosoft.gui.rendering.chunk.mesh.BlockVertexConsumer
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
@ -22,15 +21,12 @@ import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions
import de.bixilon.minosoft.gui.rendering.models.raw.display.DisplayPositions
import de.bixilon.minosoft.gui.rendering.models.raw.display.ModelDisplay
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.rad
interface ItemRender {
fun render(gui: GUIRenderer, offset: Vec2, consumer: GUIVertexConsumer, options: GUIVertexOptions?, size: Vec2, stack: ItemStack, tints: IntArray?)
fun render(mesh: BlockVertexConsumer, stack: ItemStack, tints: IntArray?)
fun getDisplay(position: DisplayPositions): ModelDisplay? = when (position) { // TODO: remove hardcoded value
DisplayPositions.GUI -> ModelDisplay(Vec3(30, 225, 0).rad, scale = Vec3(0.625f))
else -> null
}
// TODO: is that really a property of ItemRender? not BlockRender
fun getDisplay(position: DisplayPositions): ModelDisplay? = null
}