package net.shadowfacts.phycon.block.terminal import net.minecraft.client.util.math.MatrixStack import net.shadowfacts.cacao.geometry.Point import net.shadowfacts.cacao.geometry.Size import net.shadowfacts.cacao.util.EnumHelper import net.shadowfacts.cacao.util.MouseButton import net.shadowfacts.cacao.util.texture.Texture import net.shadowfacts.cacao.view.TextureView import net.shadowfacts.cacao.view.button.AbstractButton import net.shadowfacts.phycon.PhysicalConnectivityClient import net.shadowfacts.phycon.api.TerminalSetting import net.shadowfacts.phycon.util.TerminalSettings import java.util.EnumMap /** * @author shadowfacts */ class SettingButton( val key: TerminalSettings.SettingKey, ): AbstractButton>( TextureView(null).apply { intrinsicContentSize = Size(16.0, 16.0) }, padding = 2.0 ) where E: Enum, E: TerminalSetting { private val textureCache = EnumMap(key.clazz) private val textureView: TextureView get() = content as TextureView init { updateTexture() } private fun updateTexture() { textureView.texture = textureCache.getOrPut(key.value) { val uv = key.value.uv Texture(key.value.iconTexture, uv[0], uv[1]) } } override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { if (!disabled) { val newValue = when (mouseButton) { MouseButton.LEFT -> EnumHelper.next(key.value) MouseButton.RIGHT -> EnumHelper.previous(key.value) else -> { return false } } PhysicalConnectivityClient.terminalSettings[key] = newValue updateTexture() } return super.mouseClicked(point, mouseButton) } override fun draw(matrixStack: MatrixStack, mouse: Point, delta: Float) { super.draw(matrixStack, mouse, delta) if (mouse in bounds) { key.value.tooltip?.also { window!!.drawTooltip(listOf(it)) } } } }