#pragma once

#include <map>
#include <memory>
#include <vector>

#include "camera.h"
#include "fonts.h"
#include "input.h"
#include "player.h"
#include "scene.h"
#include "texture.h"
#include "timings.h"
#include "ui.h"

namespace kek {

struct PhysicsData;
struct UIData;
struct InputData;

struct KekData {
	GLFWwindow *window;
	Shader *shader;

	Camera *activeCamera;
	Scene *activeScene;

	Player *player;

	int screenWidth;
	int screenHeight;

	Timings lastTimings;

	std::map<std::string, std::weak_ptr<Texture>> loadedTextures;
	std::map<std::string, std::weak_ptr<Font>> loadedFonts;

	FT_Library freetype;

	UIData *ui;
	PhysicsData *physics;
	InputData *input;
};

extern KekData kekData;

}
