diff --git a/src/player/hold_component.gd b/src/player/hold_component.gd index f55dfd5..b806d35 100644 --- a/src/player/hold_component.gd +++ b/src/player/hold_component.gd @@ -23,6 +23,8 @@ var _original_damping: float var _original_collision_layer: int var _original_collision_mask: int +var _linear_velocity := Vector3.ZERO + @onready var interact_ray: RayCast3D = %InteractRay @onready var hold_point: Marker3D = %HoldPoint @@ -45,7 +47,9 @@ func drop() -> void: _held_object.linear_damp = _original_damping _held_object.collision_layer = _original_collision_layer _held_object.collision_mask = _original_collision_mask + _held_object.linear_velocity = _linear_velocity _held_object = null + _linear_velocity = Vector3.ZERO func holding_object() -> bool: @@ -72,8 +76,12 @@ func _physics_process(delta: float) -> void: drop() return + var held_object_last_position := _held_object.global_position + var weight := 1 - exp(-hold_accel * delta) _held_object.global_position = _held_object.global_position.lerp( hold_point.global_position, weight ) _held_object.global_basis = _held_object.global_basis.slerp(global_basis, weight) + + _linear_velocity = (_held_object.global_position - held_object_last_position) / delta