Ball.gd 822 B

123456789101112131415161718192021222324252627282930313233343536
  1. class_name Ball
  2. extends RigidBody2D
  3. export (Color) var interrupt_color = Color.white
  4. signal kace_contact
  5. const brick_layer = 2
  6. const interrupt_speed = 700
  7. const cell_size = Vector2(20, 10)
  8. func interrupt_ball():
  9. modulate = interrupt_color
  10. go_down_unstopped()
  11. func go_down_unstopped():
  12. linear_velocity.y = interrupt_speed
  13. linear_velocity = linear_velocity.normalized() * interrupt_speed
  14. set_collision_mask_bit(brick_layer, false)
  15. func _integrate_forces(state : Physics2DDirectBodyState):
  16. for i in range(state.get_contact_count()):
  17. var contact_pos = state.get_contact_local_position(i)
  18. var contact_normal = state.get_contact_local_normal(i)
  19. var correct_pos = contact_pos - contact_normal * cell_size
  20. emit_signal("kace_contact", correct_pos)
  21. func _on_Launcher_interrupt_wave():
  22. interrupt_ball()