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.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

View File

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