#pragma once
#include <vector>

#include "BaseGame.h"
#include "Camera.h"
#include "WorldLevel.h"
#include "WorldTile.h"

class Game : public BaseGame
{
public:
	explicit Game(const Window& window);
	Game(const Game& other) = delete;
	Game& operator=(const Game& other) = delete;
	Game(Game&& other) = delete;
	Game& operator=(Game&& other) = delete;
	// http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rh-override
	~Game();

	void Update(float elapsedSec) override;
	void Draw() const override;

	// Event handling
	void ProcessKeyDownEvent(const SDL_KeyboardEvent& e) override;
	void ProcessKeyUpEvent(const SDL_KeyboardEvent& e) override;
	void ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) override;
	void ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) override;
	void ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) override;

	void ProcessImGui() override;

private:
	// FUNCTIONS
	void Initialize();
	void Cleanup();


	Camera m_Camera;
	WorldLevel m_WorldLevel;

	Point2f m_MousePos{};
	Point2f m_MouseOffset{};
	bool m_IsRightMouseDown{};

};
