package net.shadowfacts.phycon.block.terminal 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 { update() } private fun update() { textureView.texture = textureCache.getOrPut(key.value) { val uv = key.value.uv Texture(key.value.iconTexture, uv[0], uv[1]) } tooltip = key.value.tooltip } 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 update() } return super.mouseClicked(point, mouseButton) } }