Files
Terrarum/src/net/torvald/terrarum/modulebasegame/ui/UIWatchLargeDigital.kt

119 lines
3.5 KiB
Kotlin

package net.torvald.terrarum.modulebasegame.ui
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.OrthographicCamera
import com.badlogic.gdx.graphics.Texture
import com.badlogic.gdx.graphics.g2d.SpriteBatch
import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.*
import net.torvald.terrarum.gameworld.WorldTime
import net.torvald.terrarum.modulebasegame.imagefont.WatchFont
import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.ui.UINotControllable
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import kotlin.math.roundToInt
/**
* Created by minjaesong on 2017-06-11.
*/
@UINotControllable
class UIWatchLargeDigital() : UICanvas() {
override var width = 162
override var height = 25
override var openCloseTime: Second = 0f
private var ELuptimer = 10f // init value higher than uptime: to make the light turned off by default
private val ELuptime = 4f
private var ELon = false
private val atlas = Texture(ModMgr.getGdxFile("basegame", "gui/watchface_large_digital.tga"))
private val watchface = TextureRegion(atlas, 0, 0, 162, 25)
private val seasonIcon = Array(4) {
TextureRegion(atlas, 12 * it, 25, 12, 7)
}
private val seasonPos = arrayOf(
143 to 4,
131 to 4,
131 to 12,
143 to 12,
)
private val watchFont = WatchFont
private val moonDial = TextureRegionPack(ModMgr.getGdxFile("basegame", "fonts/watch_17pxmoondial.tga"), 17, 17)
private val moonDialCount = moonDial.horizontalCount
private val lcdLitColELoff = Color(0xc0c0c0ff.toInt())
private val lcdLitColELon = Color(0x404040ff)
private val lcdLitCol: Color = lcdLitColELoff
//get() = if (ELon) lcdLitColELon else lcdLitColELoff
private val worldTime: WorldTime
get() = INGAME.world.worldTime
override fun updateImpl(delta: Float) {
if (ELon) {
ELuptimer += delta
}
if (mouseUp || Gdx.input.isKeyPressed(ControlPresets.getKey("control_key_interact"))) {
ELuptimer = 0f
ELon = true
}
if (ELuptimer >= ELuptime) {
ELon = false
}
}
override fun renderImpl(frameDelta: Float, batch: SpriteBatch, camera: OrthographicCamera) {
// disabling light button
batch.color = Color.WHITE
batch.draw(watchface, -1f, -1f)
// day name
batch.color = lcdLitCol
watchFont.draw(batch, worldTime.getDayNameShort().toUpperCase(), 73f, 7f)
// day
watchFont.draw(batch, worldTime.calendarDay.toString().padStart(2, '@'), 107f, 7f)
// hour
watchFont.draw(batch, worldTime.hours.toString().padStart(2, '@'), 27f, 7f)
// minute
watchFont.draw(batch, worldTime.minutes.toString().padStart(2, '0'), 49f, 7f)
// season marker
val season = worldTime.calendarMonth - 1
seasonPos[season].let { (x, y) ->
batch.draw(seasonIcon[season], x.toFloat(), y.toFloat())
}
// moon dial
val moonPhase = (worldTime.moonPhase * moonDialCount).roundToInt() % moonDialCount
batch.color = lcdLitCol
batch.draw(moonDial.get(moonPhase, 0), 6f, 3f)
}
override fun doOpening(delta: Float) {
}
override fun doClosing(delta: Float) {
}
override fun endOpening(delta: Float) {
}
override fun endClosing(delta: Float) {
}
override fun dispose() {
atlas.dispose()
moonDial.dispose()
}
}