
extends Area2D

const DEFAULT_SPEED=80

var direction = Vector2(1,0)
var ball_speed = DEFAULT_SPEED
var stopped=false



onready var screen_size = get_viewport_rect().size

sync func _reset_ball(for_left):

	position = screen_size / 2
	if (for_left):
		direction = Vector2(-1,0)
	else:
		direction = Vector2( 1,0)

	ball_speed = DEFAULT_SPEED

sync func stop():
	stopped=true

func _process(delta):

	# ball will move normally for both players
	# even if it's sightly out of sync between them
	# so each player sees the motion as smooth and not jerky

	if (not stopped):
		translate( direction * ball_speed * delta )

	# check screen bounds to make ball bounce

	if ((position.y < 0 and direction.y < 0) or (position.y > screen_size.y and direction.y > 0)):
		direction.y = -direction.y

	if (is_network_master()):
		# only master will decide when the ball is out in the left side (it's own side)
		# this makes the game playable even if latency is high and ball is going fast
		# otherwise ball might be out in the other player's screen but not this one

		if (position.x < 0 ):
			get_parent().rpc("update_score",false)
			rpc("_reset_ball",false)
	else:
		# only the slave will decide when the ball is out in the right side (it's own side)
		# this makes the game playable even if latency is high and ball is going fast
		# otherwise ball might be out in the other player's screen but not this one

		if (position.x > screen_size.x):
			get_parent().rpc("update_score",true)
			rpc("_reset_ball",true)


sync func bounce(left,random):

	#using sync because both players can make it bounce
	if (left):
		direction.x = abs(direction.x)
	else:
		direction.x = -abs(direction.x)

	ball_speed *= 1.1
	direction.y = random*2.0 - 1
	direction = direction.normalized()

func _ready():
	set_process(true)

