mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-13 12:04:06 +09:00
125 lines
3.8 KiB
Kotlin
125 lines
3.8 KiB
Kotlin
package net.torvald.terrarum.ui
|
|
|
|
import com.badlogic.gdx.Input
|
|
import com.badlogic.gdx.graphics.Camera
|
|
import com.badlogic.gdx.graphics.Color
|
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch
|
|
import net.torvald.terrarum.Terrarum
|
|
import net.torvald.terrarum.gameactors.AVKey
|
|
import net.torvald.terrarum.gameactors.Second
|
|
import net.torvald.terrarum.gameworld.fmod
|
|
import net.torvald.terrarum.itemproperties.ItemCodex
|
|
|
|
/**
|
|
* Created by minjaesong on 2016-07-20.
|
|
*/
|
|
class UIQuickBar : UICanvas() {
|
|
private val gutter = 8
|
|
override var width: Int = (ItemSlotImageBuilder.slotImage.tileW + gutter) * SLOT_COUNT
|
|
override var height: Int = ItemSlotImageBuilder.slotImage.tileH + 4 + Terrarum.fontGame.lineHeight.toInt()
|
|
/**
|
|
* In milliseconds
|
|
*/
|
|
override var openCloseTime: Second = 0.16f
|
|
|
|
private val startPointX = ItemSlotImageBuilder.slotImage.tileW / 2
|
|
private val startPointY = ItemSlotImageBuilder.slotImage.tileH / 2
|
|
|
|
private var selection: Int
|
|
get() = Terrarum.ingame!!.player.actorValue.getAsInt(AVKey.__PLAYER_QUICKSLOTSEL) ?: 0
|
|
set(value) { Terrarum.ingame!!.player.actorValue.set(AVKey.__PLAYER_QUICKSLOTSEL, value.fmod(SLOT_COUNT)) }
|
|
|
|
override fun updateUI(delta: Float) {
|
|
}
|
|
|
|
override fun renderUI(batch: SpriteBatch, camera: Camera) {
|
|
|
|
for (i in 0..SLOT_COUNT - 1) {
|
|
val image = if (i == selection)
|
|
ItemSlotImageBuilder.produceLarge(false, (i + 1) % SLOT_COUNT)
|
|
else
|
|
ItemSlotImageBuilder.produce(true, (i + 1) % SLOT_COUNT)
|
|
|
|
val slotX = startPointX + (CELL_SIZE + gutter).times(i).toFloat()
|
|
val slotY = startPointY.toFloat()
|
|
|
|
// draw slots
|
|
batch.color = Color(1f, 1f, 1f, handler.opacity * finalOpacity)
|
|
batch.draw(
|
|
image,
|
|
slotX,
|
|
slotY
|
|
)
|
|
|
|
// draw item
|
|
val itemPair = Terrarum.ingame!!.player.inventory.getQuickBar(i)
|
|
|
|
if (itemPair != null) {
|
|
val itemImage = ItemCodex.getItemImage(itemPair.item)
|
|
val itemW = itemImage.regionWidth
|
|
val itemH = itemImage.regionHeight
|
|
|
|
batch.color = Color(1f, 1f, 1f, handler.opacity)
|
|
batch.draw(
|
|
itemImage, // using fixed CELL_SIZE for reasons
|
|
slotX + (CELL_SIZE - itemW) / 2f,
|
|
slotY + (CELL_SIZE - itemH) / 2f
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
override fun doOpening(delta: Float) {
|
|
handler.opacity = handler.openCloseCounter.toFloat() / openCloseTime
|
|
}
|
|
|
|
override fun doClosing(delta: Float) {
|
|
handler.opacity = (openCloseTime - handler.openCloseCounter.toFloat()) / openCloseTime
|
|
}
|
|
|
|
override fun endOpening(delta: Float) {
|
|
handler.opacity = 1f
|
|
}
|
|
|
|
override fun endClosing(delta: Float) {
|
|
handler.opacity = 0f
|
|
}
|
|
|
|
override fun scrolled(amount: Int): Boolean {
|
|
// super.scrolled(amount) // no UIItems here
|
|
|
|
selection = selection.plus(if (amount > 1) 1 else if (amount < -1) -1 else 0).fmod(SLOT_COUNT)
|
|
|
|
return true
|
|
}
|
|
|
|
override fun keyDown(keycode: Int): Boolean {
|
|
selection = when (keycode) {
|
|
Input.Keys.NUM_1 -> 0
|
|
Input.Keys.NUM_2 -> 1
|
|
Input.Keys.NUM_3 -> 2
|
|
Input.Keys.NUM_4 -> 3
|
|
Input.Keys.NUM_5 -> 4
|
|
Input.Keys.NUM_6 -> 5
|
|
Input.Keys.NUM_7 -> 6
|
|
Input.Keys.NUM_8 -> 7
|
|
Input.Keys.NUM_9 -> 8
|
|
Input.Keys.NUM_0 -> 9
|
|
else -> return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
override fun dispose() {
|
|
}
|
|
|
|
|
|
companion object {
|
|
val finalOpacity = 0.8f
|
|
|
|
const val SLOT_COUNT = 10
|
|
const val CELL_SIZE = 32
|
|
}
|
|
} |