int wmain()
{
	Graphics::Init();

	Graphics::NewWindow(UVector2(1600u, 900u), UVector2(1600u, 900u), false, "Graphics Engine");

	Graphics::NewCamera();

	GameLoop gameLoop;

	gameLoop.Run();

	Graphics::Quit();

	return 0;
}
void Init()
{
    HWND consoleWindow = GetConsoleWindow(); // Get the current console window
    SetWindowPos(consoleWindow, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER); // Move it to the Top Left and don't change its size or 'z' order

    Graphics::Init();
    Text::Init("Fonts/Pokemon Red.ttf", { 255, 255, 255, 255 }, 32);
    Time::Init();

    Graphics::NewWindow({ 1600, 900 }, false, { 1600, 900 }, "New Window", 1);

    /*srand(time(NULL));

    float fCurrentTime = 0;
    float fPreviousTime = 0;
    float fDeltaTime = 0;

    float fAnimateTime = 0;

    System::Point2D<float> Center = { 800, 400 };

    System::Point2D<float> CirclePos = { 0, 0 };

    System::Point2D<float> LineBeginPos = { Center.X, Center.Y + 250 }, LineEndPos = { Center.X, Center.Y + 350 };

    System::Color<float> CircleColor = { 255, 255, 255, 255 };

    float fMovementRadius = 50;
    float fAngle = 0, fLineAngle = 0;

    bool bFade = true;
    bool bAnimateLine = false;

    bool bMoveLeft = true;
    bool bZoom = false;

    Graphics::GLSurface<float>* Eyes = Graphics::LoadSurface<float>("Images/Eyes.png");
    Graphics::GLSurface<float>* NewEyes = Graphics::LoadSurface<float>("Images/Eyes.png");

    float fZoomTime = 0, fNewZoomTime = 0;
    float fZoomSpeed = 0.1, fNewZoomSpeed = 0.1;

    NewEyes->Pos = Center;
    NewEyes->bIsActive = false;
    NewEyes->Scale = { 0.001f, 0.001f };
    NewEyes->Center = { 180, 80 };

    Eyes->Pos = { 314 / 2, 219 / 2 };
    Eyes->Center = { 180, 80 };

    bool bEyesHigh = false;

    while (true)
    {
    	if (GetAsyncKeyState(VK_SPACE))
    		bAnimateLine = true;
    	if (GetAsyncKeyState(VK_RETURN))
    	{
    		Eyes->Scale = { 0.001f, 0.001f };
    		bZoom = true;
    	}

    	fPreviousTime = fCurrentTime;
    	fCurrentTime = clock();
    	fDeltaTime = (fCurrentTime - fPreviousTime) / ONE_SECOND;

    	fAngle += 5 * fDeltaTime;
    	CirclePos = { fMovementRadius * cosf(fAngle), fMovementRadius * sinf(fAngle) };
    	CirclePos += Center;

    	if (bFade)
    		CircleColor.Alpha -= 100 * fDeltaTime;
    	else
    		CircleColor.Alpha += 100 * fDeltaTime;

    	if (bFade && CircleColor.Alpha <= 0)
    	{
    		CircleColor.Alpha = 0;
    		bFade = false;
    	}
    	else if (!bFade && CircleColor.Alpha >= 255)
    	{
    		CircleColor.Alpha = 255;
    		bFade = true;
    	}

    	if (bAnimateLine)
    	{
    		fAnimateTime += fDeltaTime;

    		if (bMoveLeft)
    			fLineAngle += 2 * fDeltaTime;
    		else
    			fLineAngle -= 2 * fDeltaTime;

    		if (bMoveLeft && fLineAngle >= PI)
    		{
    			fLineAngle = PI;
    			bMoveLeft = false;
    		}
    		else if (!bMoveLeft && fLineAngle <= 0)
    		{
    			fLineAngle = 0;
    			bMoveLeft = true;
    		}

    		LineBeginPos = { 100 * cosf(fLineAngle), -100 * sinf(fLineAngle) + 350 };
    		LineBeginPos += Center;

    		if (fAnimateTime > 5)
    		{
    			fAnimateTime = 0;
    			fLineAngle = 0;
    			bAnimateLine = false;
    		}
    	}

    	CircleColor.Blue = rand() % 255;
    	CircleColor.Green = rand() % 255;
    	CircleColor.Red = rand() % 255;

    	if (bZoom)
    	{
    		if (Eyes->bIsActive)
    		{
    			Eyes->Pos = Center;
    			Eyes->Scale.W += fZoomSpeed * fDeltaTime;
    			Eyes->Scale.H = Eyes->Scale.W;

    			fZoomSpeed += fZoomSpeed * 1.7 * fDeltaTime;
    			fZoomTime += fDeltaTime;

    			if (fZoomTime >= 3)
    			{
    				bEyesHigh = true;
    				NewEyes->bIsActive = true;
    			}
    			if (fZoomTime >= 6)
    			{
    				bEyesHigh = false;
    				fZoomTime = 0;
    				Eyes->Scale = { 0.01f, 0.01f };
    				fZoomSpeed = 0.1;
    			}
    		}

    		if (NewEyes->bIsActive)
    		{
    			NewEyes->Scale.W += fNewZoomSpeed * fDeltaTime;
    			NewEyes->Scale.H = NewEyes->Scale.W;

    			fNewZoomSpeed += fNewZoomSpeed * 1.7 * fDeltaTime;
    			fNewZoomTime += fDeltaTime;

    			if (fNewZoomTime >= 3)
    			{
    				bEyesHigh = false;
    			}
    			if (fNewZoomTime >= 6)
    			{
    				bEyesHigh = true;
    				fNewZoomTime = 0;
    				NewEyes->Scale = { 0.01f, 0.01f };
    				fNewZoomSpeed = 0.1;
    			}
    		}
    	}

    	Graphics::DrawCircle(CirclePos, 100.0f, 50.0f, CircleColor);
    	Graphics::DrawLine(LineBeginPos, LineEndPos, { 255, 0, 255, 255 });
    	Graphics::DrawLine({ 0, 0 }, CirclePos, CircleColor);
    	Graphics::DrawLine({ 0, 900 }, CirclePos, CircleColor);
    	Graphics::DrawLine({ 1600, 0 }, CirclePos, CircleColor);
    	Graphics::DrawLine({ 1600, 900 }, CirclePos, CircleColor);
    	if (bEyesHigh)
    	{
    		Graphics::DrawSurface(*Eyes);
    		Graphics::DrawSurface(*NewEyes);
    	}
    	else
    	{
    		Graphics::DrawSurface(*NewEyes);
    		Graphics::DrawSurface(*Eyes);
    	}

    	Graphics::Flip();
    }*/

    srand((unsigned int)time(NULL));

    GameLoop oGameLoop;

    oGameLoop.Run();
}