NinePatchRect movement freezes whole node

Godot Version

4.6.stable

Question

im trying to make my falling platform ( LowerLiftComponet.gd ) shake only visually before falling. before i had it shake physically, causing the play to have unpredictable velocity applied when jumping off of the platform in it’s shaking state
i switched over to visual, but now the platform doesnt do anything in falling platform mode, as it works as a lowering platform otherwise
can someone help me figure this out ?

TrackLift.gd

@icon("res://Gfx/Images/Editor/UI/icon_lift.svg")
@tool
extends PathFollow2D
class_name Lift
# ONREADY
@onready var rect = $Platform/CollisionShape2D
@onready var area_rect = $Platform/Area2D/CollisionShape2D
@onready var visible_rect = $Platform/VisibleOnScreenNotifier2D
@onready var interaction = $Platform/Area2D
@onready var sprite_rect = $Platform/NinePatchRect
@onready var platform = $Platform
@onready var origin = global_position

# EXPORTS
@export var enabled = true
@export var persistent = false

@export_range(0.5, 10) var duration = 3.0
@export var reverse = true

@export var size = Vector2(4,2)

@export var preview = false

@export var texture: Texture2D
@export var track: Track2D

@export var varient = false

var toRatio = 1
var on_screen = false

func _ready() -> void:
	rect.shape = RectangleShape2D.new()
	area_rect.shape = RectangleShape2D.new()

func _physics_process(delta: float) -> void:
	visible_rect.global_position = origin
	if texture:
		sprite_rect.texture = texture
	if not rect.shape:
		return
	var tile_size = size * 8
	rect.shape.size = (tile_size)-Vector2(2,0)
	area_rect.shape.size = tile_size
	sprite_rect.size = tile_size
	sprite_rect.position = -tile_size/2
	visible_rect.rect.size = tile_size + Vector2(16,16)
	visible_rect.rect.position = -tile_size/2 - Vector2(8,8)
	on_screen = visible_rect.is_on_screen()
	
	if not get_parent() is Path2D or not enabled:
		return
	
	sprite_rect.position = Vector2(
		-sprite_rect.size.x/2, -sprite_rect.size.y/2
	)
	if not Engine.is_editor_hint() or preview:
		var seconds = duration*60
		progress_ratio = move_toward(progress_ratio, toRatio, 1.0/(seconds))
		if progress_ratio == toRatio:
			if reverse:
				if toRatio == 1:
					toRatio = 0
				else:
					toRatio = 1
			else:
				progress_ratio = 0
		global_position = round(global_position)
	else:
		progress_ratio = 0

LowerLiftComponet (Works only as a child of a Lift node)

extends Node

@onready var parent: Lift = get_parent()
@onready var platform: CharacterBody2D = parent.find_child("Platform")
@onready var interaction: Area2D = platform.find_child("Area2D")
@onready var origin = platform.global_position
@onready var sprite_rect :NinePatchRect= parent.sprite_rect

@export var fall_speed = 18.7
@export var gravity = 467.4

var check_rule = 0

var fell = false
var player_touched = false

func _ready() -> void:
	_secondary_behavior()

func _secondary_behavior():
	while parent.varient:
		while not player_touched and not fell:
			await get_tree().create_timer(0).timeout
		var i = 12
		var spr_origin = sprite_rect.global_position
		while i > 0:
			i -= 1
			sprite_rect.global_position = spr_origin + shake(Vector2.ZERO)
			await get_tree().create_timer(0).timeout
			await get_tree().create_timer(0).timeout
		sprite_rect.global_position = spr_origin
		fell = true
		while fell:
			await get_tree().create_timer(0).timeout

func _physics_process(delta: float) -> void:
	if not parent.on_screen:
		if parent.persistent:
			return
		platform.global_position = origin
		platform.velocity = Vector2.ZERO
		fell = false
		player_touched = false
		return
	var touched = false
	var player: PlayerController = get_overlapping_player_from_feet()
	if player and not fell:
		if parent.varient:
			player_touched = true
		else:
			touched = true
	
	if parent.varient:
		if fell:
			platform.velocity.y += gravity * delta
		platform.move_and_slide()
		return
	if touched:
		var force = 3.2
		if player.y_grounded < 3:
			force = 7.5
		platform.velocity.y += force
		if platform.velocity.y > fall_speed:
			platform.velocity.y = fall_speed
		check_rule = 24
	else:
		if check_rule > 0:
			check_rule -= 1
		else:
			platform.velocity.y -= 3.2
			if platform.velocity.y < -fall_speed:
				platform.velocity.y = -fall_speed
	
	platform.move_and_slide()
	if platform.global_position.y < origin.y:
		platform.global_position.y = origin.y
		platform.velocity.y = 0
	platform.global_position.x = origin.x
	platform.position.x = round(platform.position.x)

func get_overlapping_player_from_feet() -> PlayerController:
	var o = interaction.get_overlapping_areas()
	for i in o:
		if i.is_in_group("PlayerFeet"):
			return i.get_parent()
	return

func shake(value: Variant, magnitude = 1):
	if value is Vector2:
		var v = Vector2.ZERO
		v.x = randi_range(-magnitude, magnitude)
		v.y = randi_range(-magnitude, magnitude)
		return value+v