2021-03-24 21:28:03 +00:00
|
|
|
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<E>(
|
|
|
|
val key: TerminalSettings.SettingKey<E>,
|
|
|
|
): AbstractButton<SettingButton<E>>(
|
|
|
|
TextureView(null).apply {
|
|
|
|
intrinsicContentSize = Size(16.0, 16.0)
|
|
|
|
},
|
|
|
|
padding = 2.0
|
|
|
|
) where E: Enum<E>, E: TerminalSetting {
|
|
|
|
|
|
|
|
private val textureCache = EnumMap<E, Texture>(key.clazz)
|
|
|
|
|
|
|
|
private val textureView: TextureView
|
|
|
|
get() = content as TextureView
|
|
|
|
|
|
|
|
init {
|
2021-03-28 17:40:23 +00:00
|
|
|
update()
|
2021-03-24 21:28:03 +00:00
|
|
|
}
|
|
|
|
|
2021-03-28 17:40:23 +00:00
|
|
|
private fun update() {
|
2021-03-24 21:28:03 +00:00
|
|
|
textureView.texture = textureCache.getOrPut(key.value) {
|
|
|
|
val uv = key.value.uv
|
|
|
|
Texture(key.value.iconTexture, uv[0], uv[1])
|
|
|
|
}
|
2021-03-28 17:40:23 +00:00
|
|
|
tooltip = key.value.tooltip
|
2021-03-24 21:28:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2021-03-28 17:40:23 +00:00
|
|
|
update()
|
2021-03-24 21:28:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return super.mouseClicked(point, mouseButton)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|