Files
Terrarum/src/net/torvald/terrarum/modulebasegame/UIBuildingMakerGetFilename.kt

158 lines
4.4 KiB
Kotlin

package net.torvald.terrarum.modulebasegame
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import net.torvald.terrarum.*
import net.torvald.terrarum.ui.*
import net.torvald.terrarum.ui.UIItemTextButtonList.Companion.DEFAULT_BACKGROUNDCOL
import net.torvald.terrarum.ui.UINSMenu.Companion.LINE_HEIGHT
import kotlin.math.roundToInt
class UIBuildingMakerGetFilename : UICanvas() {
var confirmCallback: (String) -> Unit = {}
var cancelCallback: () -> Unit = {}
var title = "Export"
var text = listOf("")
var labelDo = "OK"
var labelDont = "Cancel"
override var width = 280
override var height = 160
private val textWidth = width - LINE_HEIGHT
private val buttonWidth = 101
private val buttonGap = (width - buttonWidth*2) / 3
override var openCloseTime = OPENCLOSE_GENERIC
val textInput = UIItemTextLineInput(
this,
(width - textWidth) / 2,
LINE_HEIGHT * (text.size + 2),
textWidth,
{ "The Yucky Panopticon" },
InputLenCap(250, InputLenCap.CharLenUnit.UTF8_BYTES)
)
val buttonOk = UIItemTextButton(
this,
{ labelDo },
buttonGap,
height - LINE_HEIGHT - LINE_HEIGHT/2,
buttonWidth
).also {
it.clickOnceListener = { _, _ ->
textInput.getTextOrPlaceholder().let { name ->
if (name.isNotBlank())
confirmCallback(name.trim())
}
this.setAsClose()
}
}
val buttonCancel = UIItemTextButton(
this,
{ labelDont },
width - buttonWidth - buttonGap,
height - LINE_HEIGHT - LINE_HEIGHT/2,
buttonWidth
).also {
it.clickOnceListener = { _, _ ->
reset()
cancelCallback()
this.setAsClose()
}
}
fun reset() {
textInput.clearText()
}
init {
addUIitem(textInput)
addUIitem(buttonOk)
addUIitem(buttonCancel)
}
override fun updateImpl(delta: Float) {
uiItems.forEach { it.update(delta) }
}
override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) {
blendNormalStraightAlpha(batch)
// draw border
batch.color = Toolkit.Theme.COL_INACTIVE
Toolkit.drawBoxBorder(batch, -1, -1 - LINE_HEIGHT, width + 2, height + LINE_HEIGHT + 2)
// draw title bar
batch.color = UINSMenu.DEFAULT_TITLEBACKCOL
Toolkit.fillArea(batch, 0, 0 - LINE_HEIGHT, width, LINE_HEIGHT)
batch.color = UINSMenu.DEFAULT_TITLETEXTCOL
App.fontGame.draw(batch, title, UINSMenu.TEXT_OFFSETX + 0, UINSMenu.TEXT_OFFSETY + 0 - LINE_HEIGHT)
// draw the back
batch.color = DEFAULT_BACKGROUNDCOL
Toolkit.fillArea(batch, 0, 0, width, height)
// draw the list
batch.color = Color.WHITE
val textWidth: Int = text.maxOf { App.fontGame.getWidth(it) }
text.forEachIndexed { index, str ->
App.fontGame.draw(batch, str, 0 + LINE_HEIGHT / 2, 0 + LINE_HEIGHT / 2 + LINE_HEIGHT * index)
}
uiItems.forEach { it.render(frameDelta, batch, camera) }
}
private var dragOriginX = 0 // relative mousepos
private var dragOriginY = 0 // relative mousepos
private var dragForReal = false
override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean {
if (mouseInScreen(screenX, screenY)) {
if (dragForReal) {
handler.setPosition(
(screenX / App.scr.magn - dragOriginX).roundToInt(),
(screenY / App.scr.magn - dragOriginY).roundToInt()
)
}
}
uiItems.forEach { it.touchDragged(screenX, screenY, pointer) }
return true
}
fun mouseOnTitleBar() =
relativeMouseX in 0 until width && relativeMouseY in -LINE_HEIGHT until 0
override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean {
if (mouseOnTitleBar()) {
dragOriginX = relativeMouseX
dragOriginY = relativeMouseY
dragForReal = true
}
else {
dragForReal = false
}
uiItems.forEach { it.touchDown(screenX, screenY, pointer, button) }
return true
}
override fun dispose() {
uiItems.forEach { it.tryDispose() }
}
}