generated from krampus/template-godot4
Held objects preserve velocity when dropped
This commit is contained in:
parent
468c5b0d7c
commit
b7843659fa
@ -23,6 +23,8 @@ var _original_damping: float
|
|||||||
var _original_collision_layer: int
|
var _original_collision_layer: int
|
||||||
var _original_collision_mask: int
|
var _original_collision_mask: int
|
||||||
|
|
||||||
|
var _linear_velocity := Vector3.ZERO
|
||||||
|
|
||||||
@onready var interact_ray: RayCast3D = %InteractRay
|
@onready var interact_ray: RayCast3D = %InteractRay
|
||||||
@onready var hold_point: Marker3D = %HoldPoint
|
@onready var hold_point: Marker3D = %HoldPoint
|
||||||
|
|
||||||
@ -45,7 +47,9 @@ func drop() -> void:
|
|||||||
_held_object.linear_damp = _original_damping
|
_held_object.linear_damp = _original_damping
|
||||||
_held_object.collision_layer = _original_collision_layer
|
_held_object.collision_layer = _original_collision_layer
|
||||||
_held_object.collision_mask = _original_collision_mask
|
_held_object.collision_mask = _original_collision_mask
|
||||||
|
_held_object.linear_velocity = _linear_velocity
|
||||||
_held_object = null
|
_held_object = null
|
||||||
|
_linear_velocity = Vector3.ZERO
|
||||||
|
|
||||||
|
|
||||||
func holding_object() -> bool:
|
func holding_object() -> bool:
|
||||||
@ -72,8 +76,12 @@ func _physics_process(delta: float) -> void:
|
|||||||
drop()
|
drop()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
var held_object_last_position := _held_object.global_position
|
||||||
|
|
||||||
var weight := 1 - exp(-hold_accel * delta)
|
var weight := 1 - exp(-hold_accel * delta)
|
||||||
_held_object.global_position = _held_object.global_position.lerp(
|
_held_object.global_position = _held_object.global_position.lerp(
|
||||||
hold_point.global_position, weight
|
hold_point.global_position, weight
|
||||||
)
|
)
|
||||||
_held_object.global_basis = _held_object.global_basis.slerp(global_basis, weight)
|
_held_object.global_basis = _held_object.global_basis.slerp(global_basis, weight)
|
||||||
|
|
||||||
|
_linear_velocity = (_held_object.global_position - held_object_last_position) / delta
|
||||||
|
Loading…
x
Reference in New Issue
Block a user