diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/block/BlockFeature.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/block/BlockFeature.kt index 1c1709f83..ffaedc040 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/block/BlockFeature.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/block/BlockFeature.kt @@ -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) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/apply/SingleBlockStateApply.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/apply/SingleBlockStateApply.kt index a36796203..6d68d4698 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/apply/SingleBlockStateApply.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/apply/SingleBlockStateApply.kt @@ -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) { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedModel.kt index 5150112f8..90ed5f36f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/baked/BakedModel.kt @@ -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>, val properties: Array, + val display: Map?, 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) + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/PickedBlockRender.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/PickedBlockRender.kt index 8383df8e9..e90b16ae6 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/PickedBlockRender.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/PickedBlockRender.kt @@ -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) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/WeightedBlockRender.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/WeightedBlockRender.kt index a38e85d59..ae0cbf6c7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/WeightedBlockRender.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/block/state/render/WeightedBlockRender.kt @@ -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, diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/models/item/ItemRender.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/models/item/ItemRender.kt index 1d9502787..9a0fff108 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/models/item/ItemRender.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/models/item/ItemRender.kt @@ -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 }