mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-19 15:04:05 +09:00
actors now always calls despawn() when being despawned
This commit is contained in:
@@ -51,10 +51,19 @@ abstract class Actor : Comparable<Actor>, Runnable {
|
||||
OVERLAY // screen overlay, not affected by lightmap
|
||||
}
|
||||
|
||||
abstract fun update(delta: Float)
|
||||
open fun update(delta: Float) {
|
||||
if (!canBeDespawned) flagDespawn = false // actively deny despawning request if cannot be despawned
|
||||
if (canBeDespawned && flagDespawn) {
|
||||
despawn()
|
||||
despawned = true
|
||||
}
|
||||
}
|
||||
|
||||
var actorValue = ActorValue(this)
|
||||
@Volatile var flagDespawn = false
|
||||
@Transient var despawnHook: (Actor) -> Unit = {}
|
||||
@Transient open val canBeDespawned = true
|
||||
@Volatile internal var despawned = false
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other == null) return false
|
||||
@@ -84,6 +93,12 @@ abstract class Actor : Comparable<Actor>, Runnable {
|
||||
}
|
||||
}
|
||||
|
||||
open fun despawn() {
|
||||
if (canBeDespawned) {
|
||||
despawnHook(this)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* ActorValue change event handler
|
||||
*
|
||||
|
||||
@@ -518,6 +518,7 @@ open class ActorWithBody : Actor {
|
||||
}
|
||||
|
||||
override fun update(delta: Float) {
|
||||
super.update(delta)
|
||||
|
||||
// re-scale hitbox
|
||||
// it's just much better to poll them than use perfectly-timed setter because latter simply cannot exist
|
||||
|
||||
Reference in New Issue
Block a user