class_name MovementComponent extends Node @export var move_speed := 4.5 @export var jump_velocity := 4.5 @export var deceleration := 0.75 var body: CharacterBody3D var direction: Vector3 var gravity: float func _ready(): if owner.has_signal("direction_changed"): owner.direction_changed.connect(on_direction_changed) if owner.has_signal("jumped"): owner.jumped.connect(jump) body = owner as CharacterBody3D gravity = ProjectSettings.get_setting("physics/3d/default_gravity") func _physics_process(delta): if direction: body.velocity.x = direction.x * move_speed body.velocity.z = direction.z * move_speed else: body.velocity.x *= deceleration body.velocity.z *= deceleration if !body.is_on_floor(): body.velocity.y -= gravity * delta body.move_and_slide() func on_direction_changed(new_direction: Vector3): direction = new_direction func can_jump() -> bool: return body.is_on_floor() func jump(): body.velocity.y = jump_velocity