models: correct fallback uv coordinates (e.g. for cauldrons)

This commit is contained in:
Bixilon 2021-11-13 20:50:19 +01:00
parent 95c4898f4a
commit 168d607c47
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 11 additions and 8 deletions

View File

@ -1 +0,0 @@
--enable-preview

View File

@ -34,16 +34,20 @@ data class UnbakedElement(
operator fun invoke(data: Map<String, Any>): UnbakedElement {
val faces: MutableSet<UnbakedElementFace> = mutableSetOf()
val from = data["from"].toVec3() / BLOCK_RESOLUTION
val to = data["to"].toVec3() / BLOCK_RESOLUTION
data["faces"].asCompound().let {
for ((direction, faceData) in it) {
faces += UnbakedElementFace(direction = Directions[direction], data = faceData.unsafeCast())
for ((directionString, faceData) in it) {
val direction = Directions[directionString]
val (fallbackUVStart, fallbackUVEnd) = direction.getSize(from, to)
faces += UnbakedElementFace(direction, faceData.unsafeCast(), fallbackUVStart, fallbackUVEnd)
}
}
return UnbakedElement(
from = data["from"].toVec3() / BLOCK_RESOLUTION,
to = data["to"].toVec3() / BLOCK_RESOLUTION,
from = from,
to = to,
rotation = data["rotation"]?.compoundCast()?.let { return@let UnbakedElementRotation(data = it) },
shade = data["shade"]?.toBoolean() ?: true,
faces = faces,

View File

@ -29,10 +29,10 @@ data class UnbakedElementFace(
val tintIndex: Int,
) {
companion object {
operator fun invoke(direction: Directions, data: Map<String, Any>): UnbakedElementFace {
operator fun invoke(direction: Directions, data: Map<String, Any>, fallbackUvStart: Vec2, fallbackUvEnd: Vec2): UnbakedElementFace {
val uv = data["uv"]?.listCast<Number>()
val uvStart = Vec2(uv?.get(0) ?: 0.0f, uv?.get(1) ?: 0.0f) / BLOCK_RESOLUTION
val uvEnd = Vec2(uv?.get(2) ?: 16.0f, uv?.get(3) ?: 16.0f) / BLOCK_RESOLUTION
val uvStart = uv?.let { Vec2(it[0], it[1]) / BLOCK_RESOLUTION } ?: fallbackUvStart
val uvEnd = uv?.let { Vec2(it[2], it[3]) / BLOCK_RESOLUTION } ?: fallbackUvEnd
return UnbakedElementFace(
direction = direction,