Eliminate unintentional entity tick time increase

This commit is contained in:
DBotThePony 2024-05-02 19:24:15 +07:00
parent b5c9b1f35a
commit 23dab02cc5
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -254,17 +254,30 @@ abstract class AbstractEntity : Comparable<AbstractEntity> {
}
}
// for fast check on completed tasks
// This is necessary to cancel tasks when we are removed, so we don't reference ourselves
// in event loop after we have been removed
private val scheduledTasks = PriorityQueue<ScheduledFuture<*>>()
private val scheduledTasks = ObjectArrayList<ScheduledFuture<*>>()
protected fun scheduleInTicks(ticks: Int, action: Runnable) {
scheduledTasks.add(world.eventLoop.schedule(action, ticks * Starbound.TIMESTEP_NANOS, TimeUnit.NANOSECONDS))
var task: ScheduledFuture<*>? = null
task = world.eventLoop.schedule(Runnable {
scheduledTasks.remove(task!!)
action.run()
}, ticks * Starbound.TIMESTEP_NANOS, TimeUnit.NANOSECONDS)
scheduledTasks.add(task)
}
protected fun schedule(time: Long, unit: TimeUnit, action: Runnable) {
scheduledTasks.add(world.eventLoop.schedule(action, time, unit))
var task: ScheduledFuture<*>? = null
task = world.eventLoop.schedule(Runnable {
scheduledTasks.remove(task!!)
action.run()
}, time, unit)
scheduledTasks.add(task)
}
var isRemote: Boolean = false
@ -382,10 +395,6 @@ abstract class AbstractEntity : Comparable<AbstractEntity> {
open fun damagedOther(notification: DamageNotificationPacket) {}
open fun tick(delta: Double) {
while (scheduledTasks.isNotEmpty() && scheduledTasks.peek().isDone) {
scheduledTasks.poll()
}
if (networkGroup.upstream.isInterpolating) {
networkGroup.upstream.tickInterpolation(delta)
}