#include <SFML/Graphics.hpp>
#include <cstdlib>
#include <vector>

using namespace sf;

class PlayerShot
{
	Sprite sprite;
	FloatRect rect;
	Clock clock;

	PlayerShot(Texture &image, FloatRect source)
	{
		sprite.setTexture(image);

		rect = FloatRect( source.left + source.width / 2, source.top - 5, 92, 160);
		sprite.setPosition(rect.left, rect.top);
		sprite.scale(0.5, 0.5);
		sprite.setColor(Color::Yellow);
	}

	void update(float time)
	{
		rect.top -= 0.5*time;
		sprite.setPosition(rect.left, rect.top);
	}
};

class Player
{
public:
	Sprite sprite;
	FloatRect rect;
	Clock clock;
	std::vector<PlayerShot> shots;
	Texture shotTexture;

	Player(Texture &image)
	{
		sprite.setTexture(image);
		rect = FloatRect((VideoMode::getDesktopMode().width - 92) / 2, VideoMode::getDesktopMode().height - 200, 92, 160);
		sprite.setPosition(rect.left, rect.top);
		sprite.scale(0.5, 0.5);
		sprite.setColor(Color::Green);
		shotTexture.loadFromFile("C:/data/2.png");
	}

	void update(float time)
	{
		if ((Keyboard::isKeyPressed(Keyboard::A) || Keyboard::isKeyPressed(Keyboard::Left)) && rect.left > 0)
			rect.left -= 0.1*time;
		if ((Keyboard::isKeyPressed(Keyboard::D) || Keyboard::isKeyPressed(Keyboard::Right)) && rect.left < VideoMode::getDesktopMode().width-92)
			rect.left += 0.1*time;
		sprite.setPosition(rect.left, rect.top);
		if (clock.getElapsedTime().asSeconds() >= 1)
		{
			shot();
			clock.restart();
		}
	}
private:
	void shot()
	{
		rect.top -= 5;
		//shots.push_back(PlayerShot(shotTexture, rect));
	}
};

class Enemy
{
public:
	float dx = rand()%VideoMode::getDesktopMode().width, dy=0;
	Sprite sprite;
	FloatRect rect;
	Clock clock;

	Enemy(Texture &image)
	{
		sprite.setTexture(image);
		rect = FloatRect(rand() % VideoMode::getDesktopMode().width, 0, 18, 32);
		sprite.setPosition(rect.left, rect.top);
		sprite.scale(0.2, 0.2);
		sprite.setColor(Color::Red);
	}

	void update(float time)
	{
		rect.top += 0.02*time;
		sprite.setPosition(rect.left,rect.top);
		if (clock.getElapsedTime().asSeconds() >= 1)
		{
			shot();
			clock.restart();
		}
	}

private:
	void shot()
	{

	}
};

int main()
{
	RenderWindow window(VideoMode::getDesktopMode() , "Test",Style::Fullscreen);
	Texture t;
	t.loadFromFile("C:/data/1.png");
	Player player(t);

	Clock clock;
	while (window.isOpen())
	{
		float time = clock.getElapsedTime().asMicroseconds();
		clock.restart();
		time /= 70;
		Event event;
		while (window.pollEvent(event))
		{
			if (event.type == Event::Closed)
				window.close();
		}
		if (Keyboard::isKeyPressed(Keyboard::Escape))
			window.close();
		player.update(time);
		window.clear();
		window.draw(player.sprite);
		window.display();
		
	}
	return 0;
}