From 1599dd39c947a6f209b52582d9557a80eca9f31a Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Tue, 21 Jun 2022 22:46:36 +0700 Subject: [PATCH] Add SkinGrid, make SkinElement not be a data class --- .../mc/otm/client/render/SkinElement.kt | 36 ++++++++- .../mc/otm/registry/AndroidResearch.kt | 76 ++++++------------- 2 files changed, 58 insertions(+), 54 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt index 34e0db4a5..2ffa6db23 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/SkinElement.kt @@ -4,8 +4,40 @@ import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack import net.minecraft.resources.ResourceLocation -@JvmRecord -data class SkinElement @JvmOverloads constructor( +class SkinGrid( + val texture: ResourceLocation, + val width: Float, + val height: Float, + val rows: Int = 16, + val columns: Int = 16, +) { + private var row = 0 + private var column = 0 + + val imageWidth get() = width * columns + val imageHeight get() = height * rows + + fun skip() { + column++ + + if (column >= columns) { + jump() + } + } + + fun jump() { + row++ + column = 0 + } + + fun next(): SkinElement { + val element = SkinElement(texture, column * width, row * height, width, height, imageWidth, imageHeight) + skip() + return element + } +} + +class SkinElement @JvmOverloads constructor( val texture: ResourceLocation = RenderHelper.WIDGETS, val image_x: Float, val image_y: Float, diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidResearch.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidResearch.kt index ec868f300..7cab66fe9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidResearch.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/AndroidResearch.kt @@ -14,6 +14,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchBuilder import ru.dbotthepony.mc.otm.android.AndroidResearchType import ru.dbotthepony.mc.otm.android.feature.NanobotsArmor import ru.dbotthepony.mc.otm.client.render.SkinElement +import ru.dbotthepony.mc.otm.client.render.SkinGrid object AndroidResearch { val ICONS = ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/gui/android_upgrades.png") @@ -44,62 +45,33 @@ object AndroidResearch { val ICON_EXTENDED_REACH: SkinElement init { - var x = 0f - var y = 0f + val grid = SkinGrid(ICONS, 18f, 18f, 7, 7) - ICON_TRANSFER = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_ATTACK_BOOST = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_PLASMA_SHIELD_BOOST = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_CLOAK = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_GRAVITATIONAL_STABILIZER = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_AIR_BAGS = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_JUMP_BOOST = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) + ICON_TRANSFER = grid.next() + ICON_ATTACK_BOOST = grid.next() + ICON_PLASMA_SHIELD_BOOST = grid.next() + ICON_CLOAK = grid.next() + ICON_GRAVITATIONAL_STABILIZER = grid.next() + ICON_AIR_BAGS = grid.next() + ICON_JUMP_BOOST = grid.next() - y += 18f - x = 0f + ICON_FEATHER_FALLING = grid.next() + ICON_ARC = grid.next() + ICON_ARROW = grid.next() + ICON_ARMOR = grid.next() + ICON_NANOBOTS = grid.next() + ICON_NIGHT_VISION = grid.next() + ICON_OXYGEN_SUPPLY = grid.next() - ICON_FEATHER_FALLING = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_ARC = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_ARROW = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_ARMOR = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_NANOBOTS = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_NIGHT_VISION = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_OXYGEN_SUPPLY = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) + ICON_PLASMA_SHIELD = grid.next() + ICON_SHOCKWAVE = grid.next() + ICON_LIMB_OVERCLOCKING = grid.next() + ICON_STEP_ASSIST = grid.next() + ICON_ENDER_TELEPORT = grid.next() + ICON_WIRELESS_CHARGING = grid.next() + ICON_UNKNOWN = grid.next() - y += 18 - x = 0f - - ICON_PLASMA_SHIELD = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_SHOCKWAVE = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_LIMB_OVERCLOCKING = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_STEP_ASSIST = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_ENDER_TELEPORT = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_WIRELESS_CHARGING = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f - ICON_UNKNOWN = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - - y += 18f - x = 0f - - ICON_EXTENDED_REACH = SkinElement(ICONS, x, y, 18f, 18f, 126f, 126f) - x += 18f + ICON_EXTENDED_REACH = grid.next() } private val registry = DeferredRegister.create(AndroidResearchType::class.java, OverdriveThatMatters.MOD_ID)