features: score, name: only update every x seconds

This commit is contained in:
Moritz Zwerger 2023-11-06 16:21:55 +01:00
parent 05a75b9bad
commit 4eb33f282f
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 21 additions and 5 deletions

View File

@ -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()
}
}

View File

@ -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
}
}

View File

@ -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
}
}

View File

@ -26,5 +26,4 @@ class ScoreRegister(val renderer: EntitiesRenderer) : FeatureRegister {
override fun update() {
belowName = renderer.connection.scoreboard.positions[ScoreboardPositions.BELOW_NAME]
}
}