Files
Terrarum/src/net/torvald/terrarum/ui/UIItemToggleButton.kt

109 lines
3.0 KiB
Kotlin

package net.torvald.terrarum.ui
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Camera
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.CommonResourcePool
import net.torvald.terrarum.blendNormal
import net.torvald.terrarum.toInt
import kotlin.math.roundToInt
/**
* Created by Torvald on 2019-10-17.
*/
class UIItemToggleButton(
parent: UICanvas,
initialX: Int,
initialY: Int,
private var status: Boolean = false
) : UIItem(parent, initialX, initialY) {
init {
CommonResourcePool.addToLoadingList("ui_item_toggler_base") {
val t = TextureRegion(Texture(Gdx.files.internal("./assets/graphics/gui/toggler_back.tga")))
t.flip(false, true)
t
}
CommonResourcePool.addToLoadingList("ui_item_toggler_handle") {
val t = TextureRegion(Texture(Gdx.files.internal("./assets/graphics/gui/toggler_switch.tga")))
t.flip(false, true)
t
}
CommonResourcePool.loadAll()
}
override val width: Int
get() = togglerBase.regionWidth
override val height: Int
get() = togglerBase.regionHeight
private var togglerBase = CommonResourcePool.getAsTextureRegion("ui_item_toggler_base")
private var togglerHandle = CommonResourcePool.getAsTextureRegion("ui_item_toggler_handle")
private var handleTravelDist = togglerBase.regionWidth - togglerHandle.regionWidth
private var handlePos = handleTravelDist * status.toInt()
private var animTimer = 0f
private var animLength = 0.1f
private var animCalled = false
fun getStatus() = status
fun setAsTrue() {
animCalled = true
animTimer = 0f
status = true
}
fun setAsFalse() {
animCalled = true
animTimer = 0f
status = false
}
fun toggle() {
if (status) setAsFalse() else setAsTrue()
}
// define clickOnceListener by yourself!
override fun update(delta: Float) {
super.update(delta)
// make things move
if (animCalled) {
handlePos = if (status)
((animTimer / animLength) * handleTravelDist).roundToInt()
else
handleTravelDist - ((animTimer / animLength) * handleTravelDist).roundToInt()
animTimer += delta
}
if (animTimer >= animLength) {
handlePos = handleTravelDist * status.toInt()
animCalled = false
}
oldPosX = posX
oldPosY = posY
}
override fun render(batch: SpriteBatch, camera: Camera) {
batch.color = Color.WHITE
blendNormal(batch)
batch.draw(togglerBase, posX.toFloat(), posY.toFloat())
batch.draw(togglerHandle, (posX + handlePos).toFloat(), posY.toFloat())
super.render(batch, camera)
}
override fun dispose() {
}
}