diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/ChunkRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/ChunkRenderer.kt index 408ec33ba..d1e325914 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/ChunkRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/ChunkRenderer.kt @@ -86,7 +86,7 @@ class ChunkRenderer(private val connection: Connection, private val world: World } val worldPosition = Vec3(position.x + chunkLocation.x * ProtocolDefinition.SECTION_WIDTH_X, position.y + sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y, position.z + chunkLocation.z * ProtocolDefinition.SECTION_WIDTH_Z) - blockInfo.block.getBlockRenderer(BlockPosition(chunkLocation, sectionHeight, position)).render(blockInfo, worldPosition, arrayOf(blockBelow, blockAbove, blockNorth, blockSouth, blockWest, blockEast)) + blockInfo.block.getBlockRenderer(BlockPosition(chunkLocation, sectionHeight, position)).render(blockInfo, worldPosition, data, arrayOf(blockBelow, blockAbove, blockNorth, blockSouth, blockWest, blockEast)) } return data.toFloatArray() } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt index b059731d8..64fbb370a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/BlockRenderer.kt @@ -16,8 +16,8 @@ package de.bixilon.minosoft.gui.rendering.chunk.models.renderable import com.google.gson.JsonObject import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.mappings.ModIdentifier -import de.bixilon.minosoft.data.mappings.blocks.Block import de.bixilon.minosoft.data.mappings.versions.VersionMapping +import de.bixilon.minosoft.data.world.BlockInfo import de.bixilon.minosoft.gui.rendering.textures.Texture import glm_.mat4x4.Mat4 import glm_.vec3.Vec3 @@ -79,7 +79,7 @@ class BlockRenderer { } } - fun render(position: Vec3, data: MutableList, neighbourBlocks: Array) { + fun render(blockInfo: BlockInfo, position: Vec3, data: MutableList, neighbourBlocks: Array) { val modelMatrix = Mat4().translate(position) for (direction in Directions.DIRECTIONS) { @@ -87,10 +87,10 @@ class BlockRenderer { val cullFace = cullFaces.contains(direction) var neighbourBlockFullFace = false - neighbourBlocks[direction.ordinal]?.blockRenderers?.let { // ToDo: Improve this + neighbourBlocks[direction.ordinal]?.block?.blockRenderers?.let { // ToDo: Improve this val testDirection = direction.inverse() for (model in it) { - if (model.fullFaceDirections.contains(testDirection) && ! model.transparentFaces.contains(testDirection)) { + if (model.fullFaceDirections.contains(testDirection) && !model.transparentFaces.contains(testDirection)) { neighbourBlockFullFace = true break } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt index 57224a0f4..8d04b8f02 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/chunk/models/renderable/ElementRenderer.kt @@ -18,6 +18,7 @@ import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.mappings.ModIdentifier import de.bixilon.minosoft.data.mappings.versions.VersionMapping +import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelElement import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelFace import de.bixilon.minosoft.gui.rendering.textures.Texture @@ -72,6 +73,12 @@ class ElementRenderer(element: BlockModelElement, rotation: Vec3, uvlock: Boolea data.add(texture.animationFrameTime.toFloat()) data.add(texture.animations.toFloat()) data.add(texture.heightFactor) + + if (texture.tintIndex == 1) { + data.add(Float.fromBits(RGBColor(0x10, 0xee, 0x10).color)) + } else { + data.add(0f) + } } fun createQuad(drawPositions: Array, texturePositions: Array) { @@ -109,7 +116,7 @@ class ElementRenderer(element: BlockModelElement, rotation: Vec3, uvlock: Boolea } private fun vec3InJsonObject(json: JsonObject): Vec3 { - return Vec3(json["x"]?.asFloat?: 0, json["y"]?.asFloat?: 0, json["z"]?.asFloat?: 0) + return Vec3(json["x"]?.asFloat ?: 0, json["y"]?.asFloat ?: 0, json["z"]?.asFloat ?: 0) } val drawOrder = arrayOf( @@ -119,7 +126,7 @@ class ElementRenderer(element: BlockModelElement, rotation: Vec3, uvlock: Boolea Pair(2, 3), Pair(1, 0), Pair(0, 1), - ) + ) private fun Array.containsAllVectors(set: Set?, margin: Float): Boolean { for (position in set!!) { @@ -129,7 +136,7 @@ class ElementRenderer(element: BlockModelElement, rotation: Vec3, uvlock: Boolea isIn = true } } - if (! isIn) { + if (!isIn) { return false } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt index 95f92ddfa..ba0768ea5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/textures/Texture.kt @@ -36,6 +36,8 @@ class Texture( var animations: Int = 0 var animationFrameTime: Int = 0 + var tintIndex = 0 + fun load(assetsManager: AssetsManager) { if (loaded) { return @@ -46,6 +48,10 @@ class Texture( "minecraft/textures/${name}.png" } + if (texturePath == "minecraft/textures/block/grass_block_top.png") { + tintIndex = 1 + } + val decoder = PNGDecoder(assetsManager.readAssetAsStream(texturePath)) buffer = BufferUtils.createByteBuffer(decoder.width * decoder.height * PNGDecoder.Format.RGBA.numComponents) decoder.decode(buffer, decoder.width * PNGDecoder.Format.RGBA.numComponents, PNGDecoder.Format.RGBA)