mirror of
https://github.com/Relintai/pandemonium_demo_projects.git
synced 2024-12-21 13:56:50 +01:00
68 lines
2.0 KiB
GDScript3
68 lines
2.0 KiB
GDScript3
|
extends Node2D
|
||
|
|
||
|
const PAD_SPEED = 150
|
||
|
const INITIAL_BALL_SPEED = 80
|
||
|
|
||
|
var ball_speed = INITIAL_BALL_SPEED
|
||
|
var screen_size = Vector2(640, 400)
|
||
|
|
||
|
# Default ball direction.
|
||
|
var direction = Vector2.LEFT
|
||
|
var pad_size = Vector2(8, 32)
|
||
|
|
||
|
onready var ball = $Ball
|
||
|
onready var left_paddle = $LeftPaddle
|
||
|
onready var right_paddle = $RightPaddle
|
||
|
|
||
|
func _ready():
|
||
|
screen_size = get_viewport_rect().size # Get actual size.
|
||
|
pad_size = left_paddle.get_texture().get_size()
|
||
|
|
||
|
|
||
|
func _process(delta):
|
||
|
# Get ball position and pad rectangles.
|
||
|
var ball_pos = ball.get_position()
|
||
|
var left_rect = Rect2(left_paddle.get_position() - pad_size * 0.5, pad_size)
|
||
|
var right_rect = Rect2(right_paddle.get_position() - pad_size * 0.5, pad_size)
|
||
|
|
||
|
# Integrate new ball postion.
|
||
|
ball_pos += direction * ball_speed * delta
|
||
|
|
||
|
# Flip when touching roof or floor.
|
||
|
if (ball_pos.y < 0 and direction.y < 0) or (ball_pos.y > screen_size.y and direction.y > 0):
|
||
|
direction.y = -direction.y
|
||
|
|
||
|
# Flip, change direction and increase speed when touching pads.
|
||
|
if (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0):
|
||
|
direction.x = -direction.x
|
||
|
ball_speed *= 1.1
|
||
|
direction.y = randf() * 2.0 - 1
|
||
|
direction = direction.normalized()
|
||
|
|
||
|
# Check gameover.
|
||
|
if ball_pos.x < 0 or ball_pos.x > screen_size.x:
|
||
|
ball_pos = screen_size * 0.5
|
||
|
ball_speed = INITIAL_BALL_SPEED
|
||
|
direction = Vector2(-1, 0)
|
||
|
|
||
|
ball.set_position(ball_pos)
|
||
|
|
||
|
# Move left pad.
|
||
|
var left_pos = left_paddle.get_position()
|
||
|
|
||
|
if left_pos.y > 0 and Input.is_action_pressed("left_move_up"):
|
||
|
left_pos.y += -PAD_SPEED * delta
|
||
|
if left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down"):
|
||
|
left_pos.y += PAD_SPEED * delta
|
||
|
|
||
|
left_paddle.set_position(left_pos)
|
||
|
|
||
|
# Move right pad.
|
||
|
var right_pos = right_paddle.get_position()
|
||
|
if right_pos.y > 0 and Input.is_action_pressed("right_move_up"):
|
||
|
right_pos.y += -PAD_SPEED * delta
|
||
|
if right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down"):
|
||
|
right_pos.y += PAD_SPEED * delta
|
||
|
|
||
|
right_paddle.set_position(right_pos)
|