mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-09 01:54:04 +09:00
119 lines
3.5 KiB
Kotlin
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()
|
|
}
|
|
} |