pong.gd 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. extends Node2D
  2. # Member variables
  3. const INITIAL_BALL_SPEED = 80
  4. var ball_speed = INITIAL_BALL_SPEED
  5. var screen_size = Vector2(640, 400)
  6. # Default ball direction
  7. var direction = Vector2(-1, 0)
  8. var pad_size = Vector2(8, 32)
  9. const PAD_SPEED = 150
  10. func _process(delta):
  11. # Get ball position and pad rectangles
  12. var ball_pos = get_node("ball").get_pos()
  13. var left_rect = Rect2(get_node("left").get_pos() - pad_size*0.5, pad_size)
  14. var right_rect = Rect2(get_node("right").get_pos() - pad_size*0.5, pad_size)
  15. # Integrate new ball postion
  16. ball_pos += direction*ball_speed*delta
  17. # Flip when touching roof or floor
  18. if ((ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0)):
  19. direction.y = -direction.y
  20. # Flip, change direction and increase speed when touching pads
  21. if ((left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
  22. direction.x = -direction.x
  23. ball_speed *= 1.1
  24. direction.y = randf()*2.0 - 1
  25. direction = direction.normalized()
  26. # Check gameover
  27. if (ball_pos.x < 0 or ball_pos.x > screen_size.x):
  28. ball_pos = screen_size*0.5
  29. ball_speed = INITIAL_BALL_SPEED
  30. direction = Vector2(-1, 0)
  31. get_node("ball").set_pos(ball_pos)
  32. # Move left pad
  33. var left_pos = get_node("left").get_pos()
  34. if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
  35. left_pos.y += -PAD_SPEED*delta
  36. if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
  37. left_pos.y += PAD_SPEED*delta
  38. get_node("left").set_pos(left_pos)
  39. # Move right pad
  40. var right_pos = get_node("right").get_pos()
  41. if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
  42. right_pos.y += -PAD_SPEED*delta
  43. if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
  44. right_pos.y += PAD_SPEED*delta
  45. get_node("right").set_pos(right_pos)
  46. func _ready():
  47. screen_size = get_viewport_rect().size # Get actual size
  48. pad_size = get_node("left").get_texture().get_size()
  49. set_process(true)