mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-12 06:41:51 +09:00
109 lines
3.0 KiB
Kotlin
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() {
|
|
}
|
|
} |