// G. Hagopian

#include <iostream>
#include<vector>
#include <SFML/Graphics.hpp>

void updateBalls(sf::CircleShape& a, std::vector<sf::CircleShape>& b, sf::Vector2f& vel) {
	a.setPosition(a.getPosition().x + vel.x, a.getPosition().y + vel.y);
	if (a.getPosition().x > 1190 || a.getPosition().x < 10)
		vel.x *= -1;
	if (a.getPosition().y > 590 || a.getPosition().y < 10)
		vel.y *= -1;
}

int main()
{
	sf::RenderWindow window(sf::VideoMode(1200, 600), "Billiards!");
	sf::CircleShape cueBall(10.f);
	window.setFramerateLimit(120);
	cueBall.setFillColor(sf::Color::White);
	cueBall.setOrigin(sf::Vector2f(10, 10));
	cueBall.setPosition(sf::Vector2f(300, 300));
	std::vector<sf::CircleShape> balls(3);
	balls[0].setRadius(10.f);
	balls[1].setRadius(10.f);
	balls[2].setRadius(10.f);
	balls[0].setFillColor(sf::Color(255, 255, 0));
	balls[1].setFillColor(sf::Color(0, 255, 255));
	balls[2].setFillColor(sf::Color(255,0, 255));
	balls[0].setOrigin(sf::Vector2f(10, 10));
	balls[1].setOrigin(sf::Vector2f(10, 10));
	balls[2].setOrigin(sf::Vector2f(10, 10));
	balls[0].setPosition(sf::Vector2f(900, 300));
	balls[1].setPosition(sf::Vector2f(917.32, 290));
	balls[2].setPosition(sf::Vector2f(917.32, 310));

	sf::Vector2f vel(1.f, 1.f);
	vel.x = 1.f;
	vel.y = 1.f;
	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}

		window.clear();
		updateBalls(cueBall, balls, vel);
		for(int i = 0; i < balls.size(); ++i)
			window.draw(balls[i]);
		window.draw(cueBall);
		window.display();
	}

	return 0;
}