pong.gd 2.0 KB

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