extends Node2D var bullet_intraframe_mov_delta := 0.0 var predicted_tick := 0 var bullets = [] func _ready() -> void: child_exiting_tree.connect(_on_child_exiting_tree) func _process(delta: float) -> void: for bullet in bullets: var prev_pos = bullet.get_current_pos(predicted_tick) var next_pos = bullet.get_current_pos(predicted_tick + 1) var interpolated_pos = prev_pos.lerp(next_pos, bullet_intraframe_mov_delta) bullet.position = interpolated_pos if bullet.beyond_kill_boundary(predicted_tick): bullet.queue_free() func _on_child_exiting_tree(node: DanmakuBullet): bullets.erase(node)