152 lines
4.8 KiB
Kotlin
152 lines
4.8 KiB
Kotlin
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|