14 lines
638 B
GDScript
14 lines
638 B
GDScript
extends Node
|
|
|
|
@export var controller : CharacterBody3D
|
|
@export_range(0.0, 500.0, 0.1) var force : float = 1
|
|
@export var enabled : bool = false
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if enabled and controller.get_slide_collision_count() > 0:
|
|
var collision = controller.get_last_slide_collision()
|
|
if collision.get_collider() is RigidBody3D:
|
|
var direction = -collision.get_normal()
|
|
var speed = clamp(controller.velocity.length(), 1.0, 10.0)
|
|
var impulse_position = collision.get_position() - collision.get_collider().global_position
|
|
collision.get_collider().apply_impulse(direction * speed * force, impulse_position)
|