26 lines
674 B
GDScript
26 lines
674 B
GDScript
class_name Springboard extends Area3D
|
|
|
|
@export var launch_speed: float = 10.0
|
|
@export var audio_player: AudioStreamPlayer3D
|
|
|
|
func _ready() -> void:
|
|
body_entered.connect(_on_body_entered)
|
|
|
|
func _on_body_entered(body: PhysicsBody3D) -> void:
|
|
var rbody := body as RigidBody3D
|
|
var ch := body as Character
|
|
if rbody:
|
|
scale.y = 2.0
|
|
rbody.apply_central_impulse(rbody.mass*(
|
|
launch_speed*global_basis.y -
|
|
rbody.linear_velocity.project(global_basis.y)
|
|
))
|
|
if ch:
|
|
ch.ground_normal = global_basis.y
|
|
ch.soft_force_change_state(&'launch')
|
|
else:
|
|
audio_player.play()
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
scale.y = lerp(scale.y, 1.0, 1.0 - 0.01**delta)
|