mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-19 23:14:05 +09:00
new: world update ahchoring
This commit is contained in:
@@ -8,6 +8,7 @@ import net.torvald.terrarum.gameactors.ActorID
|
||||
import net.torvald.terrarum.gameactors.ActorWithBody
|
||||
import net.torvald.terrarum.gameactors.ActorWithBody.Companion.PHYS_EPSILON_DIST
|
||||
import net.torvald.terrarum.gameactors.BlockMarkerActor
|
||||
import net.torvald.terrarum.gameactors.WorldUpdater
|
||||
import net.torvald.terrarum.gamecontroller.KeyToggler
|
||||
import net.torvald.terrarum.gamecontroller.TerrarumKeyboardEvent
|
||||
import net.torvald.terrarum.gameitems.ItemID
|
||||
@@ -147,6 +148,13 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
|
||||
val actorAdditionQueue = ArrayList<Triple<Actor, Throwable, (Actor) -> Unit>>() // actor, stacktrace object, onSpawn
|
||||
val actorRemovalQueue = ArrayList<Triple<Actor, Throwable, (Actor) -> Unit>>() // actor, stacktrace object, onDespawn
|
||||
|
||||
/**
|
||||
* Registry of actors that implement [WorldUpdater].
|
||||
* World simulation (fluids, wires, tile updates) is active around these actors.
|
||||
* Automatically maintained when actors are added/removed.
|
||||
*/
|
||||
val worldUpdaters: MutableSet<ActorWithBody> = HashSet()
|
||||
|
||||
/**
|
||||
* ## BIG NOTE: Calculated actor distance is the **Euclidean distance SQUARED**
|
||||
*
|
||||
@@ -378,6 +386,10 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
|
||||
actorContainer.removeAt(indexToDelete)
|
||||
}
|
||||
}
|
||||
// Unregister from worldUpdaters if applicable
|
||||
if (actor is WorldUpdater && actor is ActorWithBody) {
|
||||
worldUpdaters.remove(actor)
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun forceAddActor(actor: Actor?, caller: Throwable = StackTraceRecorder()) {
|
||||
@@ -388,6 +400,10 @@ open class IngameInstance(val batch: FlippingSpriteBatch, val isMultiplayer: Boo
|
||||
}
|
||||
else {
|
||||
actorContainerActive.add(actor)
|
||||
// Register to worldUpdaters if applicable
|
||||
if (actor is WorldUpdater && actor is ActorWithBody) {
|
||||
worldUpdaters.add(actor)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user