package net.shadowfacts.phycon.block.terminal import net.minecraft.item.ItemStack import net.minecraft.util.Identifier import net.shadowfacts.cacao.util.KeyModifiers import net.shadowfacts.cacao.util.texture.Texture import net.shadowfacts.cacao.view.Label import net.shadowfacts.cacao.view.TextureView import net.shadowfacts.cacao.view.button.Button import net.shadowfacts.cacao.view.textfield.NumberField import net.shadowfacts.cacao.viewcontroller.ViewController import net.shadowfacts.kiwidsl.dsl import net.shadowfacts.phycon.PhysicalConnectivity import org.lwjgl.glfw.GLFW import kotlin.math.ceil import kotlin.math.floor /** * @author shadowfacts */ class TerminalRequestAmountViewController( val screen: AbstractTerminalScreen<*, *>, val stack: ItemStack, ): ViewController() { companion object { private val BACKGROUND = Texture(Identifier(PhysicalConnectivity.MODID, "textures/gui/terminal_amount.png"), 0, 0) } lateinit var field: NumberField private set override fun viewDidLoad() { super.viewDidLoad() val pane = view.addLayoutGuide() view.solver.dsl { pane.widthAnchor equalTo 158 pane.heightAnchor equalTo 62 pane.centerXAnchor equalTo view.centerXAnchor pane.centerYAnchor equalTo view.centerYAnchor } val background = view.addSubview(TextureView(BACKGROUND)).apply { zIndex = -1.0 } field = view.addSubview(AmountField(this)).apply { drawBackground = false } field.becomeFirstResponder() val requestLabel = Label("Request", shadow = true) val request = view.addSubview(Button(requestLabel) { doRequest() }) val plusOneLabel = Label("+1", shadow = true) val plusOne = view.addSubview(Button(plusOneLabel) { field.number = (field.number ?: 1) + 1 }) val plusTenLabel = Label("+10", shadow = true) val plusTen = view.addSubview(Button(plusTenLabel) { val old = field.number ?: 1 field.number = ceil((old + 1) / 10.0).toInt() * 10 }) val plusHundredLabel = Label("+100", shadow = true) val plusHundred = view.addSubview(Button(plusHundredLabel) { val old = field.number ?: 1 field.number = ceil((old + 1) / 100.0).toInt() * 100 }) val minusOneLabel = Label("-1", shadow = true) val minusOne = view.addSubview(Button(minusOneLabel) { field.number = (field.number ?: 1) - 1 }) val minusTenLabel = Label("-10", shadow = true) val minusTen = view.addSubview(Button(minusTenLabel) { val old = field.number ?: 1 field.number = floor((old - 1) / 10.0).toInt() * 10 }) val minusHundredLabel = Label("-100", shadow = true) val minusHundred = view.addSubview(Button(minusHundredLabel) { val old = field.number ?: 1 field.number = floor((old - 1) / 100.0).toInt() * 100 }) view.solver.dsl { background.leftAnchor equalTo pane.leftAnchor background.rightAnchor equalTo pane.rightAnchor background.topAnchor equalTo pane.topAnchor background.bottomAnchor equalTo pane.bottomAnchor field.leftAnchor equalTo (pane.leftAnchor + 8) field.topAnchor equalTo (pane.topAnchor + 27) field.widthAnchor equalTo 80 field.heightAnchor equalTo 9 request.leftAnchor equalTo (pane.leftAnchor + 101) request.centerYAnchor equalTo field.centerYAnchor request.widthAnchor equalTo 50 request.heightAnchor equalTo 20 plusOne.leftAnchor equalTo (pane.leftAnchor + 7) plusTen.leftAnchor equalTo (plusOne.rightAnchor + 3) plusHundred.leftAnchor equalTo (plusTen.rightAnchor + 3) plusHundred.rightAnchor equalTo (pane.leftAnchor + 97) plusOne.widthAnchor equalTo plusTen.widthAnchor plusOne.widthAnchor equalTo plusHundred.widthAnchor plusOne.topAnchor equalTo (pane.topAnchor + 7) plusTen.topAnchor equalTo (pane.topAnchor + 7) plusHundred.topAnchor equalTo (pane.topAnchor + 7) plusOne.heightAnchor equalTo 14 plusTen.heightAnchor equalTo 14 plusHundred.heightAnchor equalTo 14 minusOne.leftAnchor equalTo (pane.leftAnchor + 7) minusTen.leftAnchor equalTo (minusOne.rightAnchor + 3) minusHundred.leftAnchor equalTo (minusTen.rightAnchor + 3) minusHundred.rightAnchor equalTo (pane.leftAnchor + 97) minusOne.widthAnchor equalTo minusTen.widthAnchor minusOne.widthAnchor equalTo minusHundred.widthAnchor minusOne.topAnchor equalTo (pane.topAnchor + 41) minusTen.topAnchor equalTo (pane.topAnchor + 41) minusHundred.topAnchor equalTo (pane.topAnchor + 41) minusOne.heightAnchor equalTo 14 minusTen.heightAnchor equalTo 14 minusHundred.heightAnchor equalTo 14 } } private fun doRequest() { screen.requestItem(stack, field.number ?: 1) window!!.removeFromScreen() screen.amountVC = null } class AmountField(val vc: TerminalRequestAmountViewController): NumberField(1) { override fun keyPressed(keyCode: Int, modifiers: KeyModifiers): Boolean { return if (keyCode == GLFW.GLFW_KEY_ENTER) { vc.doRequest() true } else { super.keyPressed(keyCode, modifiers) } } } }