mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 00:47:26 -04:00
features: score, name: only update every x seconds
This commit is contained in:
parent
05a75b9bad
commit
4eb33f282f
@ -112,7 +112,7 @@ class EntityData(
|
||||
fun <K> observe(field: EntityDataField, watcher: (value: K?) -> Unit) {
|
||||
val index = connection.registries.getEntityDataIndex(field) ?: return // field not available
|
||||
watcherLock.lock()
|
||||
this.watcher.getOrPut(index) { mutableSetOf() }.add(watcher.unsafeCast())
|
||||
this.watcher.getOrPut(index) { mutableSetOf() }.add(watcher.unsafeCast()) // TODO: use weakref?
|
||||
watcherLock.unlock()
|
||||
}
|
||||
}
|
||||
|
@ -26,9 +26,18 @@ import de.bixilon.minosoft.gui.rendering.entities.feature.text.BillboardTextFeat
|
||||
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
|
||||
|
||||
class EntityNameFeature(renderer: EntityRenderer<*>) : BillboardTextFeature(renderer, null) {
|
||||
private var delta = 0.0f
|
||||
|
||||
init {
|
||||
renderer.entity.data.observe<ChatComponent?>(Entity.CUSTOM_NAME_DATA) { delta = 0.0f }
|
||||
}
|
||||
|
||||
override fun update(millis: Long, delta: Float) {
|
||||
updateName()
|
||||
this.delta += delta
|
||||
if (delta >= UPDATE_INTERVAL) {
|
||||
updateName()
|
||||
this.delta = 0.0f
|
||||
}
|
||||
super.update(millis, delta)
|
||||
}
|
||||
|
||||
@ -76,5 +85,6 @@ class EntityNameFeature(renderer: EntityRenderer<*>) : BillboardTextFeature(rend
|
||||
|
||||
companion object {
|
||||
const val SNEAKING_DISTANCE = 32
|
||||
const val UPDATE_INTERVAL = 0.2f
|
||||
}
|
||||
}
|
||||
|
@ -23,11 +23,17 @@ import de.bixilon.minosoft.gui.rendering.entities.feature.text.BillboardTextMesh
|
||||
import de.bixilon.minosoft.gui.rendering.entities.renderer.living.player.PlayerRenderer
|
||||
|
||||
class EntityScoreFeature(renderer: PlayerRenderer<*>) : BillboardTextFeature(renderer, null) {
|
||||
private var delta = 0.0f
|
||||
private val manager = renderer.renderer.features.score
|
||||
|
||||
|
||||
override fun update(millis: Long, delta: Float) {
|
||||
updateScore()
|
||||
renderer.name.offset = if (this.text != null) NAME_OFFSET else DEFAULT_OFFSET
|
||||
this.delta += delta
|
||||
if (delta >= UPDATE_INTERVAL) {
|
||||
updateScore()
|
||||
renderer.name.offset = if (this.text != null) NAME_OFFSET else DEFAULT_OFFSET
|
||||
this.delta = 0.0f
|
||||
}
|
||||
super.update(millis, delta)
|
||||
}
|
||||
|
||||
@ -63,6 +69,7 @@ class EntityScoreFeature(renderer: PlayerRenderer<*>) : BillboardTextFeature(ren
|
||||
|
||||
companion object {
|
||||
const val RENDER_DISTANCE = 10
|
||||
const val UPDATE_INTERVAL = 0.5f
|
||||
val NAME_OFFSET = DEFAULT_OFFSET + PROPERTIES.lineHeight * BillboardTextMesh.SCALE
|
||||
}
|
||||
}
|
||||
|
@ -26,5 +26,4 @@ class ScoreRegister(val renderer: EntitiesRenderer) : FeatureRegister {
|
||||
override fun update() {
|
||||
belowName = renderer.connection.scoreboard.positions[ScoreboardPositions.BELOW_NAME]
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user