diff --git a/src/net/torvald/terrarum/StateInGame.kt b/src/net/torvald/terrarum/StateInGame.kt index e5f93a42f..e03f15273 100644 --- a/src/net/torvald/terrarum/StateInGame.kt +++ b/src/net/torvald/terrarum/StateInGame.kt @@ -98,6 +98,9 @@ class StateInGame : BasicGameState() { private val UI_QUICK_BAR = "uiQuickBar" private val UI_INVENTORY_PLAYER = "uiInventoryPlayer" private val UI_INVENTORY_ANON = "uiInventoryAnon" + private val UI_VITAL1 = "uiVital1" + private val UI_VITAL2 = "uiVital2" + private val UI_VITAL3 = "uiVital3" var paused: Boolean = false get() = consoleHandler.isOpened @@ -156,6 +159,8 @@ class StateInGame : BasicGameState() { // set smooth lighting as in config KeyToggler.forceSet(KEY_LIGHTMAP_SMOOTH, Terrarum.getConfigBoolean("smoothlighting")) + + // queue up game UIs // lesser UIs // quick bar @@ -164,6 +169,7 @@ class StateInGame : BasicGameState() { uiAliases[UI_QUICK_BAR]!!.setPosition(0, 0) uiAliases[UI_QUICK_BAR]!!.UI.handler = uiAliases[UI_QUICK_BAR] uiContainer.add(uiAliases[UI_QUICK_BAR]!!) + // pie menu uiAliases[UI_PIE_MENU] = UIHandler(UIPieMenu()) uiAliases[UI_PIE_MENU]!!.setPosition( @@ -173,22 +179,22 @@ class StateInGame : BasicGameState() { uiAliases[UI_PIE_MENU]!!.UI.handler = uiAliases[UI_PIE_MENU] uiContainer.add(uiAliases[UI_PIE_MENU]!!) + // vital metre + // fill in getter functions by + // (uiAliases[UI_QUICK_BAR]!!.UI as UIVitalMetre).vitalGetterMax = { some_function } + uiAliases[UI_VITAL1] = UIHandler(UIVitalMetre(player, { null }, { null }, null, 0)) + uiAliases[UI_VITAL1]!!.setAsAlwaysVisible() + uiAliases[UI_VITAL2] = UIHandler(UIVitalMetre(player, { null }, { null }, null, 1)) + uiAliases[UI_VITAL2]!!.setAsAlwaysVisible() + uiAliases[UI_VITAL3] = UIHandler(UIVitalMetre(player, { null }, { null }, null, 2)) + uiAliases[UI_VITAL3]!!.setAsAlwaysVisible() + + + + + // audio test //AudioResourceLibrary.ambientsWoods[0].play() - - - - val vitalmetre = UIHandler(UIVitalMetre(player, { 88f }, { 100f }, Color(255, 182, 0), 0)) - //vitalmetre.setAsAlwaysVisible() - vitalmetre.isVisible = true - vitalmetre.UI.handler = vitalmetre - uiContainer.add(vitalmetre) - - val vitalmetre2 = UIHandler(UIVitalMetre(player, { 72f }, { 100f }, Color(180, 255, 0), 1)) - //vitalmetre.setAsAlwaysVisible() - vitalmetre2.isVisible = true - vitalmetre2.UI.handler = vitalmetre2 - uiContainer.add(vitalmetre2) } var particlesActive = 0 diff --git a/src/net/torvald/terrarum/ui/UIVitalMetre.kt b/src/net/torvald/terrarum/ui/UIVitalMetre.kt index 9dd45a96d..da7350a80 100644 --- a/src/net/torvald/terrarum/ui/UIVitalMetre.kt +++ b/src/net/torvald/terrarum/ui/UIVitalMetre.kt @@ -16,28 +16,28 @@ import org.newdawn.slick.Input */ class UIVitalMetre( var player: ActorHumanoid, - val vitalGetterVal: () -> Float, - val vitalGetterMax: () -> Float, - val color: Color, + var vitalGetterVal: () -> Float?, + var vitalGetterMax: () -> Float?, + var color: Color?, val order: Int ) : UICanvas { private val margin = 25 private val gap = 4f - override var width: Int = 80 + 2 * margin - override var height: Int = player.baseHitboxH * 3 + margin + override var width: Int = 80 + 2 * margin; set(value) { throw Error("operation not permitted") } + override var height: Int; get() = player.baseHitboxH * 3 + margin; set(value) { throw Error("operation not permitted") } override var handler: UIHandler? = null override var openCloseTime: Int = 50 private val relativePX = width / 2f - private val relativePY = player.baseHitboxH * 1.5f - private val circleRadius = player.baseHitboxH * 3f + private val relativePY: Float; get() = player.baseHitboxH * 1.5f + private val circleRadius: Float; get() = player.baseHitboxH * 3f private val theta = 33f private val halfTheta = theta / 2f - private val backColor = color.darkerLab(0.3f) + private val backColor: Color; get() = color?.darkerLab(0.3f) ?: Color.black override fun update(gc: GameContainer, delta: Int) { @@ -48,28 +48,31 @@ class UIVitalMetre( } override fun render(gc: GameContainer, g: Graphics) { - g.lineWidth = 2f + if (vitalGetterVal() != null && vitalGetterMax() != null) { - // background - g.color = backColor - g.drawArc( - relativePX - circleRadius - order * gap, - -circleRadius - order * gap, - circleRadius * 2f + order * gap * 2, - circleRadius * 2f + order * gap * 2, - 90f - halfTheta, - 90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax()) - ) + g.lineWidth = 2f - g.color = color - g.drawArc( - relativePX - circleRadius - order * gap, - -circleRadius - order * gap, - circleRadius * 2f + order * gap * 2, - circleRadius * 2f + order * gap * 2, - 90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax()), - 90f + halfTheta - ) + // background + g.color = backColor + g.drawArc( + relativePX - circleRadius - order * gap, + -circleRadius - order * gap, + circleRadius * 2f + order * gap * 2, + circleRadius * 2f + order * gap * 2, + 90f - halfTheta, + 90f + halfTheta - theta * (vitalGetterVal()!! / vitalGetterMax()!!) + ) + + g.color = color + g.drawArc( + relativePX - circleRadius - order * gap, + -circleRadius - order * gap, + circleRadius * 2f + order * gap * 2, + circleRadius * 2f + order * gap * 2, + 90f + halfTheta - theta * (vitalGetterVal()!! / vitalGetterMax()!!), + 90f + halfTheta + ) + } } override fun processInput(gc: GameContainer, delta: Int, input: Input) {