diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-04-27 13:44:22 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-04-27 13:44:22 +0200 |
commit | 5469cf7b6da512e48f3d614704e51cfdd6966f08 (patch) | |
tree | bc27fbdffa4d08fba55d231c0a2a2efb1d84d5e0 /ball.gd |
Diffstat (limited to 'ball.gd')
-rw-r--r-- | ball.gd | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -0,0 +1,35 @@ +extends RigidBody2D + + +var reset_state := false +var target_vector := Vector2.ZERO + +var collision_buffer: Array + + +func _integrate_forces(state: PhysicsDirectBodyState2D) -> void: + if reset_state: + reset_state = false + state.transform = Transform2D(0.0, target_vector) + + for idx in state.get_contact_count(): + var body := state.get_contact_collider_object(idx) + + if body.is_in_group("bumper"): + body.animate_bump() + apply_central_impulse( + state.get_contact_local_normal(idx) * + body.get_impulse() + ) + + if not collision_buffer.has(body): + collision_buffer.append(body) + get_tree().current_scene.get_node("HUD").score += 50 + + if state.get_contact_count() == 0: + collision_buffer.clear() + + +func move_body(target_position: Vector2) -> void: + target_vector = target_position + reset_state = true |