From 479e4cadfaa25b0ff107297c616860ae800f4e96 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Sat, 8 Apr 2017 13:03:47 +0200 Subject: [PATCH] Switch to Kotlin 1.1.1, use typealias feature --- build.gradle | 2 +- .../client/render/AbstractRenderColumn.kt | 25 ++++++++----------- .../client/render/RenderAlgae.kt | 2 +- .../client/render/RenderCactus.kt | 4 +-- .../client/render/RenderCoral.kt | 2 +- .../client/render/RenderGrass.kt | 10 +++----- .../client/render/RenderLeaves.kt | 6 ++--- .../client/render/RenderLilypad.kt | 2 +- .../betterfoliage/client/render/RenderLog.kt | 2 +- .../client/render/RenderMycelium.kt | 2 +- .../client/render/RenderNetherrack.kt | 2 +- .../client/render/RenderReeds.kt | 2 +- .../mods/betterfoliage/client/render/Utils.kt | 4 +-- .../mods/octarinecore/client/render/Model.kt | 8 +++--- .../client/render/ModelRenderer.kt | 15 ++++++----- .../octarinecore/client/render/Shaders.kt | 4 +-- .../octarinecore/client/render/Shading.kt | 10 +++++--- 17 files changed, 52 insertions(+), 50 deletions(-) diff --git a/build.gradle b/build.gradle index d13e3f7..f321ebb 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ version = "2.1.3" archivesBaseName = rootProject.name + '-MC1.10.2' buildscript { - ext.kotlin_version = '1.0.3' + ext.kotlin_version = '1.1.1' repositories { mavenCentral() maven { diff --git a/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt b/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt index b6e049f..aac2086 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/AbstractRenderColumn.kt @@ -20,9 +20,9 @@ import net.minecraftforge.fml.relauncher.SideOnly @SideOnly(Side.CLIENT) interface IColumnTextureInfo { val axis: Axis? - val top: (ShadingContext, Int, Quad)->TextureAtlasSprite? - val bottom: (ShadingContext, Int, Quad)->TextureAtlasSprite? - val side: (ShadingContext, Int, Quad)->TextureAtlasSprite? + val top: QuadIconResolver + val bottom: QuadIconResolver + val side: QuadIconResolver } @SideOnly(Side.CLIENT) @@ -35,13 +35,13 @@ data class StaticColumnInfo(override val axis: Axis?, val topTexture: TextureAtlasSprite, val bottomTexture: TextureAtlasSprite, val sideTexture: TextureAtlasSprite) : IColumnTextureInfo { - override val top = { ctx: ShadingContext, idx: Int, quad: Quad -> + override val top: QuadIconResolver = { ctx, _, _ -> OptifineCTM.override(topTexture, blockContext, UP.rotate(ctx.rotation)) } - override val bottom = { ctx: ShadingContext, idx: Int, quad: Quad -> + override val bottom: QuadIconResolver = { ctx, _, _ -> OptifineCTM.override(bottomTexture, blockContext, DOWN.rotate(ctx.rotation)) } - override val side = { ctx: ShadingContext, idx: Int, quad: Quad -> + override val side: QuadIconResolver = { ctx, idx, _ -> OptifineCTM.override(sideTexture, blockContext, (if ((idx and 1) == 0) SOUTH else EAST).rotate(ctx.rotation)) } } @@ -129,7 +129,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl val transitionTop = model { mix(sideRoundLarge.model, sideRoundSmall.model) { it > 1 } } val transitionBottom = model { mix(sideRoundSmall.model, sideRoundLarge.model) { it > 1 } } - inline fun continous(q1: QuadrantType, q2: QuadrantType) = + inline fun continuous(q1: QuadrantType, q2: QuadrantType) = q1 == q2 || ((q1 == SQUARE || q1 == INVISIBLE) && (q2 == SQUARE || q2 == INVISIBLE)) abstract val blockPredicate: (IBlockState)->Boolean @@ -185,7 +185,6 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl renderer, sideModel, rotation, - blockContext.blockCenter, icon = columnTextures.side, postProcess = noPost ) @@ -210,7 +209,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl } } PARALLEL -> { - if (!continous(quadrants[idx], quadrantsTop[idx])) { + if (!continuous(quadrants[idx], quadrantsTop[idx])) { if (quadrants[idx] == SQUARE || quadrants[idx] == INVISIBLE) { upModel = topSquare.model } @@ -229,7 +228,7 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl } } PARALLEL -> { - if (!continous(quadrants[idx], quadrantsBottom[idx]) && + if (!continuous(quadrants[idx], quadrantsBottom[idx]) && (quadrants[idx] == SQUARE || quadrants[idx] == INVISIBLE)) { downModel = bottomSquare.model } @@ -240,9 +239,8 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl renderer, upModel, rotation, - blockContext.blockCenter, icon = upIcon, - postProcess = { ctx, qi, q, vi, v -> + postProcess = { _, _, _, _, _ -> if (isLidUp) { rotateUV(idx + if (logAxis == Axis.X) 1 else 0) if (logAxis == Axis.X) mirrorUV(true, true) @@ -253,9 +251,8 @@ abstract class AbstractRenderColumn(modId: String) : AbstractBlockRenderingHandl renderer, downModel, rotation, - blockContext.blockCenter, icon = downIcon, - postProcess = { ctx, qi, q, vi, v -> + postProcess = { _, _, _, _, _ -> if (isLidDown) { rotateUV((if (logAxis == Axis.X) 0 else 3) - idx) if (logAxis != Axis.Y) mirrorUV(true, true) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt index f46f71d..2f0a0e1 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderAlgae.kt @@ -47,7 +47,7 @@ class RenderAlgae : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { renderer, algaeModels[rand[2]], Rotation.identity, - icon = { ctx, qi, q -> algaeIcons[rand[qi and 1]]!! }, + icon = { _, qi, _ -> algaeIcons[rand[qi and 1]]!! }, postProcess = noPost ) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt index 9d773e5..12b024a 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderCactus.kt @@ -112,14 +112,14 @@ class RenderCactus : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { renderer, modelCross[ctx.random(0)], Rotation.identity, - icon = { ctx, qi, q -> iconCross.icon!!}, + icon = { _, _, _ -> iconCross.icon!!}, postProcess = noPost ) modelRenderer.render( renderer, modelArm[ctx.random(1)], cactusArmRotation[ctx.random(2) % 4], - icon = { ctx2, qi, q -> iconArm[ctx.random(3)]!!}, + icon = { _, _, _ -> iconArm[ctx.random(3)]!!}, postProcess = noPost ) return true diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt index 43ca757..05d32b9 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderCoral.kt @@ -65,7 +65,7 @@ class RenderCoral : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { renderer, coralModels[variation++], rotationFromUp[idx], - icon = { ctx, qi, q -> if (qi == 4) crustIcons[variation]!! else coralIcons[variation + (qi and 1)]!!}, + icon = { _, qi, _ -> if (qi == 4) crustIcons[variation]!! else coralIcons[variation + (qi and 1)]!!}, postProcess = noPost ) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt index 4ab7623..2a9c728 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderGrass.kt @@ -73,8 +73,8 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { fullCube, Rotation.identity, ctx.blockCenter, - icon = { ctx, qi, q -> grassInfo.grassTopTexture }, - postProcess = { ctx, qi, q, vi, v -> + icon = { _, _, _ -> grassInfo.grassTopTexture }, + postProcess = { ctx, _, _, _, _ -> rotateUV(2) if (isSnowed) { if (!ctx.aoEnabled) setGrey(1.4f) @@ -104,10 +104,8 @@ class RenderGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { grassModels[rand[0]], Rotation.identity, ctx.blockCenter + (if (isSnowed) snowOffset else Double3.zero), - icon = { ctx: ShadingContext, qi: Int, q: Quad -> - if (Config.shortGrass.useGenerated) iconGen.icon!! else iconset[rand[qi and 1]]!! - }, - postProcess = { ctx, qi, q, vi, v -> if (isSnowed) setGrey(1.0f) else multiplyColor(grassInfo.overrideColor ?: blockColor) } + icon = { _, qi, _ -> if (Config.shortGrass.useGenerated) iconGen.icon!! else iconset[rand[qi and 1]]!! }, + postProcess = { _, _, _, _, _ -> if (isSnowed) setGrey(1.0f) else multiplyColor(grassInfo.overrideColor ?: blockColor) } ) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt index cda1d7b..5fe8baf 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLeaves.kt @@ -64,8 +64,8 @@ class RenderLeaves : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { leavesModel.model, rotation, ctx.blockCenter + perturbs[rand[0]], - icon = { ctx, qi, q -> leafInfo.roundLeafTexture }, - postProcess = { ctx, qi, q, vi, v -> + icon = { _, _, _ -> leafInfo.roundLeafTexture }, + postProcess = { _, _, _, _, _ -> rotateUV(rand[1]) multiplyColor(blockColor) } @@ -76,7 +76,7 @@ class RenderLeaves : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { leavesModel.model, Rotation.identity, ctx.blockCenter + perturbs[rand[0]], - icon = { ctx, qi, q -> snowedIcon[rand[1]]!! }, + icon = { _, _, _ -> snowedIcon[rand[1]]!! }, postProcess = whitewash ) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt index 02c99ee..dcd5172 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLilypad.kt @@ -68,7 +68,7 @@ class RenderLilypad : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { Rotation.identity, ctx.blockCenter.add(perturbs[rand[4]]), forceFlat = true, - icon = { ctx, qi, q -> flowerIcon[rand[0]]!! }, + icon = { _, _, _ -> flowerIcon[rand[0]]!! }, postProcess = noPost ) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt index 3f9202b..96aee3e 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderLog.kt @@ -80,7 +80,7 @@ object StandardLogSupport : TextureListModelProcessor, IColu fun getAxis(state: IBlockState): Axis? { val axis = tryDefault(null) { state.getValue(BlockLog.LOG_AXIS).toString() } ?: - state.properties.entries.find { it.key.getName().toLowerCase() == "axis" }?.let { it.value.toString() } + state.properties.entries.find { it.key.getName().toLowerCase() == "axis" }?.value?.toString() return when (axis) { "x" -> Axis.X "y" -> Axis.Y diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt index 7891d22..fd4c48e 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderMycelium.kt @@ -47,7 +47,7 @@ class RenderMycelium : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { myceliumModel[rand[0]], Rotation.identity, ctx.blockCenter + (if (isSnowed) snowOffset else Double3.zero), - icon = { ctx, qi, q -> myceliumIcon[rand[qi and 1]]!! }, + icon = { _, qi, _ -> myceliumIcon[rand[qi and 1]]!! }, postProcess = if (isSnowed) whitewash else noPost ) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt index 0a85bbd..ef1c648 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderNetherrack.kt @@ -49,7 +49,7 @@ class RenderNetherrack : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) renderer, netherrackModel[rand[0]], Rotation.identity, - icon = { ctx, qi, q -> netherrackIcon[rand[qi and 1]]!! }, + icon = { _, qi, _ -> netherrackIcon[rand[qi and 1]]!! }, postProcess = noPost ) diff --git a/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt b/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt index 9e10f8d..dd1883c 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/RenderReeds.kt @@ -64,7 +64,7 @@ class RenderReeds : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) { reedModels[ctx.random(0)], Rotation.identity, forceFlat = true, - icon = { ctx, qi, q -> reedIcons[iconVar]!! }, + icon = { _, _, _ -> reedIcons[iconVar]!! }, postProcess = noPost ) } diff --git a/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt b/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt index 0153aad..30b22e5 100644 --- a/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt +++ b/src/main/kotlin/mods/betterfoliage/client/render/Utils.kt @@ -21,8 +21,8 @@ val snowOffset = UP * 0.0625 val normalLeavesRot = arrayOf(Rotation.identity) val denseLeavesRot = arrayOf(Rotation.identity, Rotation.rot90[EAST.ordinal], Rotation.rot90[SOUTH.ordinal]) -val whitewash: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex)->Unit = { ctx, qi, q, vi, v -> setGrey(1.4f) } -val greywash: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex)->Unit = { ctx, qi, q, vi, v -> setGrey(1.0f) } +val whitewash: PostProcessLambda = { _, _, _, _, _ -> setGrey(1.4f) } +val greywash: PostProcessLambda = { _, _, _, _, _ -> setGrey(1.0f) } val IBlockState.isSnow: Boolean get() = material.let { it == Material.SNOW || it == Material.CRAFTED_SNOW } diff --git a/src/main/kotlin/mods/octarinecore/client/render/Model.kt b/src/main/kotlin/mods/octarinecore/client/render/Model.kt index 19da9f8..44f3032 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/Model.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/Model.kt @@ -70,13 +70,13 @@ data class Quad(val v1: Vertex, val v2: Vertex, val v3: Vertex, val v4: Vertex) fun clampUV(minU: Double = -0.5, maxU: Double = 0.5, minV: Double = -0.5, maxV: Double = 0.5) = transformV { it.copy(uv = it.uv.clamp(minU, maxU, minV, maxV)) } fun mirrorUV(mirrorU: Boolean, mirrorV: Boolean) = transformV { it.copy(uv = it.uv.mirror(mirrorU, mirrorV)) } - fun setAoShader(resolver: (Quad, Vertex)->Shader, predicate: (Vertex, Int)->Boolean = { v, vi -> true }) = + fun setAoShader(factory: ShaderFactory, predicate: (Vertex, Int)->Boolean = { v, vi -> true }) = transformVI { vertex, idx -> - if (!predicate(vertex, idx)) vertex else vertex.copy(aoShader = resolver(this@Quad, vertex)) + if (!predicate(vertex, idx)) vertex else vertex.copy(aoShader = factory(this@Quad, vertex)) } - fun setFlatShader(resolver: (Quad, Vertex)->Shader, predicate: (Vertex, Int)->Boolean = { v, vi -> true }) = + fun setFlatShader(factory: ShaderFactory, predicate: (Vertex, Int)->Boolean = { v, vi -> true }) = transformVI { vertex, idx -> - if (!predicate(vertex, idx)) vertex else vertex.copy(flatShader = resolver(this@Quad, vertex)) + if (!predicate(vertex, idx)) vertex else vertex.copy(flatShader = factory(this@Quad, vertex)) } fun setFlatShader(shader: Shader) = transformVI { vertex, idx -> vertex.copy(flatShader = shader) } val flipped: Quad get() = Quad(v4, v3, v2, v1) diff --git a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt index 71d7283..81727f5 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/ModelRenderer.kt @@ -7,7 +7,10 @@ import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.util.EnumFacing import net.minecraft.util.EnumFacing.* -class ModelRenderer() : ShadingContext() { +typealias QuadIconResolver = (ShadingContext, Int, Quad) -> TextureAtlasSprite? +typealias PostProcessLambda = RenderVertex.(ShadingContext, Int, Quad, Int, Vertex) -> Unit + +class ModelRenderer : ShadingContext() { /** Holds final vertex data before it goes to the [Tessellator]. */ val temp = RenderVertex() @@ -25,14 +28,14 @@ class ModelRenderer() : ShadingContext() { * @param[rotateUV] lambda to get amount of UV rotation for each quad * @param[postProcess] lambda to perform arbitrary modifications on the [RenderVertex] just before it goes to the [Tessellator] */ - inline fun render( + fun render( worldRenderer: VertexBuffer, model: Model, - rot: Rotation, + rot: Rotation = Rotation.identity, trans: Double3 = blockContext.blockCenter, forceFlat: Boolean = false, - icon: (ShadingContext, Int, Quad) -> TextureAtlasSprite?, - postProcess: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex) -> Unit + icon: QuadIconResolver, + postProcess: PostProcessLambda ) { rotation = rot aoEnabled = Minecraft.isAmbientOcclusionEnabled() @@ -167,4 +170,4 @@ val allFaces: (EnumFacing) -> Boolean = { true } val topOnly: (EnumFacing) -> Boolean = { it == UP } /** Perform no post-processing */ -val noPost: RenderVertex.(ShadingContext, Int, Quad, Int, Vertex) -> Unit = { ctx, qi, q, vi, v -> } \ No newline at end of file +val noPost: PostProcessLambda = { _, _, _, _, _ -> } \ No newline at end of file diff --git a/src/main/kotlin/mods/octarinecore/client/render/Shaders.kt b/src/main/kotlin/mods/octarinecore/client/render/Shaders.kt index a287a37..e59be36 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/Shaders.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/Shaders.kt @@ -10,7 +10,7 @@ const val defaultEdgeDimming = 0.8f // ================================ // Shader instantiation lambdas // ================================ -fun cornerAo(fallbackAxis: EnumFacing.Axis): (EnumFacing, EnumFacing, EnumFacing)->Shader = { face, dir1, dir2 -> +fun cornerAo(fallbackAxis: EnumFacing.Axis): CornerShaderFactory = { face, dir1, dir2 -> val fallbackDir = listOf(face, dir1, dir2).find { it.axis == fallbackAxis }!! CornerSingleFallback(face, dir1, dir2, fallbackDir) } @@ -20,7 +20,7 @@ fun cornerAoTri(func: (AoData, AoData)-> AoData) = { face: EnumFacing, dir1: Enu } val cornerAoMaxGreen = cornerAoTri { s1, s2 -> if (s1.green > s2.green) s1 else s2 } -fun cornerInterpolate(edgeAxis: EnumFacing.Axis, weight: Float, dimming: Float): (EnumFacing, EnumFacing, EnumFacing)->Shader = { dir1, dir2, dir3 -> +fun cornerInterpolate(edgeAxis: EnumFacing.Axis, weight: Float, dimming: Float): CornerShaderFactory = { dir1, dir2, dir3 -> val edgeDir = listOf(dir1, dir2, dir3).find { it.axis == edgeAxis }!! val faceDirs = listOf(dir1, dir2, dir3).filter { it.axis != edgeAxis } CornerInterpolateDimming(faceDirs[0], faceDirs[1], edgeDir, weight, dimming) diff --git a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt index b853e2e..3eeed56 100644 --- a/src/main/kotlin/mods/octarinecore/client/render/Shading.kt +++ b/src/main/kotlin/mods/octarinecore/client/render/Shading.kt @@ -10,6 +10,10 @@ import net.minecraft.util.EnumFacing.* import java.lang.Math.min import java.util.* +typealias EdgeShaderFactory = (EnumFacing, EnumFacing) -> Shader +typealias CornerShaderFactory = (EnumFacing, EnumFacing, EnumFacing) -> Shader +typealias ShaderFactory = (Quad, Vertex) -> Shader + /** Holds shading values for block corners as calculated by vanilla Minecraft rendering. */ class AoData() { var valid = false @@ -140,8 +144,8 @@ interface Shader { * @param[edge] shader instantiation lambda for edge midpoint vertices */ fun faceOrientedAuto(overrideFace: EnumFacing? = null, - corner: ((EnumFacing, EnumFacing, EnumFacing)->Shader)? = null, - edge: ((EnumFacing, EnumFacing)->Shader)? = null) = + corner: CornerShaderFactory? = null, + edge: EdgeShaderFactory? = null) = fun(quad: Quad, vertex: Vertex): Shader { val quadFace = overrideFace ?: quad.normal.nearestCardinal val nearestCorner = nearestPosition(vertex.xyz, faceCorners[quadFace.ordinal].asList) { @@ -167,7 +171,7 @@ fun faceOrientedAuto(overrideFace: EnumFacing? = null, * @param[corner] shader instantiation lambda */ fun edgeOrientedAuto(overrideEdge: Pair? = null, - corner: (EnumFacing, EnumFacing, EnumFacing)->Shader) = + corner: CornerShaderFactory) = fun(quad: Quad, vertex: Vertex): Shader { val edgeDir = overrideEdge ?: nearestAngle(quad.normal, boxEdges) { it.first.vec + it.second.vec }.first val nearestFace = nearestPosition(vertex.xyz, edgeDir.toList()) { it.vec }.first