mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-06 08:38:30 +09:00
vital metre prototype
Former-commit-id: c3f95f7ef280eabc5516ad6885386cb89d6ee35d Former-commit-id: ab9cd5bd8daf27d37828a5ca4a737a723d76fa1a
This commit is contained in:
@@ -175,6 +175,14 @@ class StateInGame : BasicGameState() {
|
|||||||
|
|
||||||
// audio test
|
// audio test
|
||||||
//AudioResourceLibrary.ambientsWoods[0].play()
|
//AudioResourceLibrary.ambientsWoods[0].play()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
val vitalmetre = UIHandler(UIVitalMetre(player, { 100f }, { 100f }, Color(255, 182, 0)))
|
||||||
|
//vitalmetre.setAsAlwaysVisible()
|
||||||
|
vitalmetre.isVisible = true
|
||||||
|
vitalmetre.UI.handler = vitalmetre
|
||||||
|
uiContainer.add(vitalmetre)
|
||||||
}
|
}
|
||||||
|
|
||||||
var particlesActive = 0
|
var particlesActive = 0
|
||||||
|
|||||||
@@ -581,7 +581,7 @@ infix fun Color.screen(other: Color) = Color(
|
|||||||
1f - (1f - this.a) * (1f - other.a)
|
1f - (1f - this.a) * (1f - other.a)
|
||||||
)
|
)
|
||||||
|
|
||||||
infix fun Color.mul(other: Color) = Color(
|
operator fun Color.times(other: Color) = Color(
|
||||||
this.r * other.r,
|
this.r * other.r,
|
||||||
this.g * other.g,
|
this.g * other.g,
|
||||||
this.b * other.b,
|
this.b * other.b,
|
||||||
|
|||||||
@@ -44,10 +44,14 @@ open class ActorWithSprite(renderOrder: ActorOrder, val immobileBody: Boolean =
|
|||||||
|
|
||||||
@Transient private val world: GameWorld = Terrarum.ingame.world
|
@Transient private val world: GameWorld = Terrarum.ingame.world
|
||||||
|
|
||||||
protected var hitboxTranslateX: Double = 0.0// relative to spritePosX
|
var hitboxTranslateX: Double = 0.0// relative to spritePosX
|
||||||
protected var hitboxTranslateY: Double = 0.0// relative to spritePosY
|
protected set
|
||||||
protected var baseHitboxW: Int = 0
|
var hitboxTranslateY: Double = 0.0// relative to spritePosY
|
||||||
protected var baseHitboxH: Int = 0
|
protected set
|
||||||
|
var baseHitboxW: Int = 0
|
||||||
|
protected set
|
||||||
|
var baseHitboxH: Int = 0
|
||||||
|
protected set
|
||||||
/**
|
/**
|
||||||
* * Position: top-left point
|
* * Position: top-left point
|
||||||
* * Unit: pixel
|
* * Unit: pixel
|
||||||
|
|||||||
@@ -49,6 +49,28 @@ interface UICanvas {
|
|||||||
* Do not modify handler!!.openCloseCounter here.
|
* Do not modify handler!!.openCloseCounter here.
|
||||||
*/
|
*/
|
||||||
fun endClosing(gc: GameContainer, delta: Int)
|
fun endClosing(gc: GameContainer, delta: Int)
|
||||||
}
|
|
||||||
|
|
||||||
const val OPENCLOSE_GENERIC = 200
|
companion object {
|
||||||
|
const val OPENCLOSE_GENERIC = 200
|
||||||
|
|
||||||
|
fun doOpeningFade(handler: UIHandler?, openCloseTime: Int) {
|
||||||
|
handler!!.opacity = handler!!.openCloseCounter.toFloat() / openCloseTime
|
||||||
|
}
|
||||||
|
|
||||||
|
fun doClosingFade(handler: UIHandler?, openCloseTime: Int) {
|
||||||
|
handler!!.opacity = (openCloseTime - handler!!.openCloseCounter.toFloat()) / openCloseTime
|
||||||
|
}
|
||||||
|
|
||||||
|
fun endOpeningFade(handler: UIHandler?) {
|
||||||
|
handler!!.opacity = 1f
|
||||||
|
}
|
||||||
|
|
||||||
|
fun endClosingFade(handler: UIHandler?) {
|
||||||
|
handler!!.opacity = 0f
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO add drawer slide in/out (quadratic)
|
||||||
|
|
||||||
|
// TODO add blackboard take in/out (sinusoidal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -133,8 +133,8 @@ constructor(val UI: UICanvas) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setAsAlwaysVisible() {
|
fun setAsAlwaysVisible() {
|
||||||
alwaysVisible = true
|
|
||||||
isVisible = true
|
isVisible = true
|
||||||
|
alwaysVisible = true
|
||||||
isOpened = true
|
isOpened = true
|
||||||
isOpening = false
|
isOpening = false
|
||||||
isClosing = false
|
isClosing = false
|
||||||
|
|||||||
@@ -82,22 +82,22 @@ class UIPieMenu : UICanvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun doOpening(gc: GameContainer, delta: Int) {
|
override fun doOpening(gc: GameContainer, delta: Int) {
|
||||||
handler!!.opacity = handler!!.openCloseCounter.toFloat() / openCloseTime
|
UICanvas.doOpeningFade(handler, openCloseTime)
|
||||||
handler!!.scale = smallenSize + (1f.minus(smallenSize) * handler!!.opacity)
|
handler!!.scale = smallenSize + (1f.minus(smallenSize) * handler!!.opacity)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun doClosing(gc: GameContainer, delta: Int) {
|
override fun doClosing(gc: GameContainer, delta: Int) {
|
||||||
handler!!.opacity = (openCloseTime - handler!!.openCloseCounter.toFloat()) / openCloseTime
|
UICanvas.doClosingFade(handler, openCloseTime)
|
||||||
handler!!.scale = smallenSize + (1f.minus(smallenSize) * handler!!.opacity)
|
handler!!.scale = smallenSize + (1f.minus(smallenSize) * handler!!.opacity)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endOpening(gc: GameContainer, delta: Int) {
|
override fun endOpening(gc: GameContainer, delta: Int) {
|
||||||
handler!!.opacity = 1f
|
UICanvas.endOpeningFade(handler)
|
||||||
handler!!.scale = 1f
|
handler!!.scale = 1f
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun endClosing(gc: GameContainer, delta: Int) {
|
override fun endClosing(gc: GameContainer, delta: Int) {
|
||||||
handler!!.opacity = 0f
|
UICanvas.endClosingFade(handler)
|
||||||
handler!!.scale = 1f
|
handler!!.scale = 1f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
107
src/net/torvald/terrarum/ui/UIVitalMetre.kt
Normal file
107
src/net/torvald/terrarum/ui/UIVitalMetre.kt
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
package net.torvald.terrarum.ui
|
||||||
|
|
||||||
|
import net.torvald.terrarum.Terrarum
|
||||||
|
import net.torvald.terrarum.gameactors.ActorHumanoid
|
||||||
|
import net.torvald.terrarum.gameactors.floorInt
|
||||||
|
import net.torvald.terrarum.gameactors.roundInt
|
||||||
|
import net.torvald.terrarum.times
|
||||||
|
import org.newdawn.slick.Color
|
||||||
|
import org.newdawn.slick.GameContainer
|
||||||
|
import org.newdawn.slick.Graphics
|
||||||
|
import org.newdawn.slick.Input
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by SKYHi14 on 2017-03-03.
|
||||||
|
*/
|
||||||
|
class UIVitalMetre(
|
||||||
|
var player: ActorHumanoid,
|
||||||
|
val vitalGetterVal: () -> Float,
|
||||||
|
val vitalGetterMax: () -> Float,
|
||||||
|
val color: Color,
|
||||||
|
val order: Int = 0
|
||||||
|
) : UICanvas {
|
||||||
|
|
||||||
|
override var width: Int = 84
|
||||||
|
override var height: Int = player.baseHitboxH * 3 + 2
|
||||||
|
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 theta = 33f
|
||||||
|
private val halfTheta = theta / 2f
|
||||||
|
|
||||||
|
override fun update(gc: GameContainer, delta: Int) {
|
||||||
|
handler!!.setPosition(
|
||||||
|
(Terrarum.HALFW - relativePX).roundInt(),
|
||||||
|
(Terrarum.HALFH - relativePY).floorInt()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun render(gc: GameContainer, g: Graphics) {
|
||||||
|
g.lineWidth = 1.8f
|
||||||
|
val saturation = 2f
|
||||||
|
|
||||||
|
// background
|
||||||
|
g.color = Color(
|
||||||
|
(color.r * saturation) - (saturation - 1),
|
||||||
|
(color.g * saturation) - (saturation - 1),
|
||||||
|
(color.b * saturation) - (saturation - 1),
|
||||||
|
0.9f
|
||||||
|
)
|
||||||
|
g.drawArc(
|
||||||
|
relativePX - circleRadius,
|
||||||
|
-circleRadius,
|
||||||
|
circleRadius * 2f,
|
||||||
|
circleRadius * 2f,
|
||||||
|
90f - halfTheta,
|
||||||
|
90f + halfTheta
|
||||||
|
)
|
||||||
|
|
||||||
|
g.color = color
|
||||||
|
g.drawArc(
|
||||||
|
relativePX - circleRadius,
|
||||||
|
-circleRadius,
|
||||||
|
circleRadius * 2f,
|
||||||
|
circleRadius * 2f,
|
||||||
|
90f + halfTheta - theta * (vitalGetterVal() / vitalGetterMax()),
|
||||||
|
90f + halfTheta
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun processInput(gc: GameContainer, delta: Int, input: Input) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doOpening(gc: GameContainer, delta: Int) {
|
||||||
|
UICanvas.doOpeningFade(handler, openCloseTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doClosing(gc: GameContainer, delta: Int) {
|
||||||
|
UICanvas.doClosingFade(handler, openCloseTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun endOpening(gc: GameContainer, delta: Int) {
|
||||||
|
UICanvas.endOpeningFade(handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun endClosing(gc: GameContainer, delta: Int) {
|
||||||
|
UICanvas.endClosingFade(handler)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
X-------------+ (84)
|
||||||
|
| |
|
||||||
|
| |
|
||||||
|
| @ |
|
||||||
|
| @ |
|
||||||
|
|, ,|
|
||||||
|
| ''-------'' |
|
||||||
|
+-------------+
|
||||||
|
|
||||||
|
X: UICanvas position
|
||||||
|
|
||||||
|
*/
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package net.torvald.terrarum.virtualcomputer.worldobject.ui
|
package net.torvald.terrarum.virtualcomputer.worldobject.ui
|
||||||
|
|
||||||
import net.torvald.terrarum.ui.*
|
import net.torvald.terrarum.ui.*
|
||||||
|
import net.torvald.terrarum.ui.UICanvas.Companion.OPENCLOSE_GENERIC
|
||||||
import net.torvald.terrarum.virtualcomputer.terminal.Terminal
|
import net.torvald.terrarum.virtualcomputer.terminal.Terminal
|
||||||
import org.newdawn.slick.GameContainer
|
import org.newdawn.slick.GameContainer
|
||||||
import org.newdawn.slick.Graphics
|
import org.newdawn.slick.Graphics
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ object WeatherMixer {
|
|||||||
|
|
||||||
fun Float.clampOne() = if (this > 1) 1f else this
|
fun Float.clampOne() = if (this > 1) 1f else this
|
||||||
|
|
||||||
operator fun Color.times(other: Color) = Color(this.r * other.r, this.g * other.g, this.b * other.b, 1f)
|
private operator fun Color.times(other: Color) = Color(this.r * other.r, this.g * other.g, this.b * other.b, 1f)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a GL of specific time
|
* Get a GL of specific time
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 234 KiB |
Reference in New Issue
Block a user