ordered vital metre -- you can display two or more vitals

Former-commit-id: 27767b632a1c65060750e49c55db7e71a0e443ae
Former-commit-id: b431478a0d43193ac60011a958f6305673334755
This commit is contained in:
Song Minjae
2017-03-05 00:28:20 +09:00
parent 08417be027
commit e9572488be
2 changed files with 28 additions and 21 deletions

View File

@@ -178,11 +178,17 @@ class StateInGame : BasicGameState() {
val vitalmetre = UIHandler(UIVitalMetre(player, { 100f }, { 100f }, Color(255, 182, 0))) val vitalmetre = UIHandler(UIVitalMetre(player, { 88f }, { 100f }, Color(255, 182, 0), 0))
//vitalmetre.setAsAlwaysVisible() //vitalmetre.setAsAlwaysVisible()
vitalmetre.isVisible = true vitalmetre.isVisible = true
vitalmetre.UI.handler = vitalmetre vitalmetre.UI.handler = vitalmetre
uiContainer.add(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 var particlesActive = 0

View File

@@ -1,5 +1,6 @@
package net.torvald.terrarum.ui package net.torvald.terrarum.ui
import net.torvald.colourutil.CIELabUtil.darkerLab
import net.torvald.terrarum.Terrarum import net.torvald.terrarum.Terrarum
import net.torvald.terrarum.gameactors.ActorHumanoid import net.torvald.terrarum.gameactors.ActorHumanoid
import net.torvald.terrarum.gameactors.floorInt import net.torvald.terrarum.gameactors.floorInt
@@ -18,11 +19,14 @@ class UIVitalMetre(
val vitalGetterVal: () -> Float, val vitalGetterVal: () -> Float,
val vitalGetterMax: () -> Float, val vitalGetterMax: () -> Float,
val color: Color, val color: Color,
val order: Int = 0 val order: Int
) : UICanvas { ) : UICanvas {
override var width: Int = 84 private val margin = 25
override var height: Int = player.baseHitboxH * 3 + 2 private val gap = 4f
override var width: Int = 80 + 2 * margin
override var height: Int = player.baseHitboxH * 3 + margin
override var handler: UIHandler? = null override var handler: UIHandler? = null
override var openCloseTime: Int = 50 override var openCloseTime: Int = 50
@@ -33,6 +37,9 @@ class UIVitalMetre(
private val theta = 33f private val theta = 33f
private val halfTheta = theta / 2f private val halfTheta = theta / 2f
private val backColor = color.darkerLab(0.3f)
override fun update(gc: GameContainer, delta: Int) { override fun update(gc: GameContainer, delta: Int) {
handler!!.setPosition( handler!!.setPosition(
(Terrarum.HALFW - relativePX).roundInt(), (Terrarum.HALFW - relativePX).roundInt(),
@@ -41,31 +48,25 @@ class UIVitalMetre(
} }
override fun render(gc: GameContainer, g: Graphics) { override fun render(gc: GameContainer, g: Graphics) {
g.lineWidth = 1.8f g.lineWidth = 2f
val saturation = 2f
// background // background
g.color = Color( g.color = backColor
(color.r * saturation) - (saturation - 1),
(color.g * saturation) - (saturation - 1),
(color.b * saturation) - (saturation - 1),
0.9f
)
g.drawArc( g.drawArc(
relativePX - circleRadius, relativePX - circleRadius - order * gap,
-circleRadius, -circleRadius - order * gap,
circleRadius * 2f, circleRadius * 2f + order * gap * 2,
circleRadius * 2f, circleRadius * 2f + order * gap * 2,
90f - halfTheta, 90f - halfTheta,
90f + halfTheta 90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax())
) )
g.color = color g.color = color
g.drawArc( g.drawArc(
relativePX - circleRadius, relativePX - circleRadius - order * gap,
-circleRadius, -circleRadius - order * gap,
circleRadius * 2f, circleRadius * 2f + order * gap * 2,
circleRadius * 2f, circleRadius * 2f + order * gap * 2,
90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax()), 90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax()),
90f + halfTheta 90f + halfTheta
) )