bool CMainMenuState::Load(CAssetManager* pAssets, eStateLoadCommands* pLoadCommands)
{
	if (GetLoaded())
	{
		return true;
	}
	//DebugPrint("[MainMenu] Loading MainMenuState...\n");
	CBaseState::Load(pAssets);

	if (pLoadCommands)
	{
		pLoadCommands[STATE_CONTROLS] = STATE_COMMAND_LOAD;
		pLoadCommands[STATE_CREDITS] = STATE_COMMAND_LOAD;
		//		pLoadCommands[STATE_STAGESELECT] = STATE_COMMAND_LOAD;
	}

	/*std::ifstream fin(pathA + "Options.txt", std::ios_base::in);

	if (fin.is_open())
	{

	int _nMasterBank = -1;

	BOOL _nFullscreen, _waifu;

	fin >> _nMasterBank;
	fin >> _nMasterBank;
	fin >> _nMasterBank;

	fin >> _nMasterBank;
	fin >> _nMasterBank;
	fin >> _nFullscreen;

	fin >> _waifu;

	if (0 == _waifu)
	{
	m_bWaifuBander = false;
	}
	else
	{
	m_bWaifuBander = true;
	}
	}
	fin.close();*/

	m_pScene = new CScene();

	m_pGUI = new CGUIManager();//CGUIManager::Load(std::string("Assets/Xml/MainMenu.xml"));

	//m_pLogo = new CUIElement( );
	//
	//m_pLogo->SetWidth(256);
	//m_pLogo->SetHeight(256);
	//m_pLogo->SetPosition(vec3f(1000 - m_pLogo->GetBounds( ).ComputeWidth( ) / 2, m_pLogo->GetBounds( ).ComputeHeight( ) / 2, 1));
	//m_pLogo->SetVisible(true);
	//
	//m_pLogo->LoadTexture(L"Assets/Images/titleLogo.png");
	//
	//m_pGUI->AddElement(m_pLogo);

	//Background
	CUIElement* pBackground = new CUIElement();
	pBackground->SetHeight(GUI_HEIGHT);
	pBackground->SetWidth(GUI_WIDTH);
	pBackground->SetPosition(vec3f(GUI_WIDTH * 0.5f, GUI_HEIGHT * 0.5f, 0));
	pBackground->LoadTexture(L"Assets/Images/MainMenu/Main_Menu.png");
	m_pGUI->AddElement(pBackground);

	//Add buttons
	CUIButton* pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Start.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.32f, 200, 60, std::string("Start"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Leaderboards.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.4f, 200, 60, std::string("Leaderboards"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Achievements.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.48f, 200, 60, std::string("Achievements"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/How_To_Play.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.56f, 200, 60, std::string("How to Play"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Options.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.64f, 200, 60, std::string("Options"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Credits.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.72f, 200, 60, std::string("Credits"));
	m_pGUI->AddElement(pButton);
	pButton = new CUIButton(std::wstring(L"Assets/Images/MainMenu/Exit.png"), GUI_WIDTH * 0.708f, GUI_HEIGHT * 0.80f, 200, 60, std::string("Quit"));
	m_pGUI->AddElement(pButton);

	m_pBackPlate = new CUIElement();

	m_pBackPlate->SetWidth(300);
	m_pBackPlate->SetHeight(300);
	m_pBackPlate->SetColor({ 1, 1, 1, 0.25f });
	m_pBackPlate->SetPosition(vec3f(300, 375, 1));
	m_pBackPlate->SetVisible(false);
	m_pBackPlate->LoadTexture(L"Assets/Images/Menus/Main_Menu_Border_v4.png");
	m_pGUI->AddElement(m_pBackPlate);

	//Load whole menu
	m_pBack = new CUIButton(std::wstring(L"Assets//Images//Menus//Back.png"), 300, 460, 150, 60, std::string("Void"));
	m_pBack->SetRenderText(false);
	m_pBack->SetVisible(false);
	m_pGUI->AddElement(m_pBack);


	m_pCampaign = new CUIButton(std::wstring(L"Assets//Images//Menus//Campaign.png"), 300, 300, 150, 60, std::string("Void"));
	m_pCampaign->SetRenderText(false);
	m_pCampaign->SetVisible(false);
	m_pGUI->AddElement(m_pCampaign);

	m_pEndless = new CUIButton(std::wstring(L"Assets//Images//Menus//Endless.png"), 300, 380, 150, 60, std::string("Void"));
	m_pEndless->SetRenderText(false);
	m_pEndless->SetVisible(false);
	m_pGUI->AddElement(m_pEndless);

	m_pScreen = new CUIElement();
	m_pScreen->SetWidth(10000);
	m_pScreen->SetHeight(8000);
	m_pScreen->SetPosition(vec3f(500, 400, 1));
	m_pScreen->SetVisible(true);

	m_pScreen->LoadTexture(L"Assets/Images/Black.png");
	//m_pGUI->AddElement(m_pScreen);

#ifdef SPINNING_SEXY
	//test object for Deferred
	{
		pAssets->LoadFBX("Assets//Models//Deferred.fbx", "Spinning Sexy");
		CRObject* bob = new CRObject();
		bob->SetTag("Spinning Sexy");
		m_pScene->AddObject(bob);
	}

	//set some light stuff
	{
		using namespace MathHelper;
		auto Lerp = [&](const DirectX::XMFLOAT3& x, const DirectX::XMFLOAT3& y, const DirectX::XMFLOAT3& s) -> DirectX::XMFLOAT3
		{
			return x + s * (y - x);
		};

		float amb = .45f;
		LightParams ambient({ amb, amb, amb }, { 0, -1, 0 });
		m_pScene->AddLight(ambient);

		LightParams light;
		light.Type = Point;
		light.Range = 2.0f;

		const int cubeSize = 3 + 0 * 2;
		const int cubeMin = -(cubeSize / 2);
		const int cubeMax = cubeSize / 2;

		const DirectX::XMFLOAT3 minExtents(-4.0f, 1.0f, -4.0f);
		const DirectX::XMFLOAT3 maxExtents(4.0f, 11.0f, 4.0f);
		const DirectX::XMFLOAT3 minColor(1.0f, 0.0f, 0.0f);
		const DirectX::XMFLOAT3 maxColor(0.0f, 1.0f, 1.0f);

		for (int x = cubeMin; x <= cubeMax; x++)
		{
			for (int y = cubeMin; y <= cubeMax; y++)
			{
				for (int z = cubeMin; z <= cubeMax; z++)
				{
					DirectX::XMFLOAT3 lerp;
					lerp.x = static_cast<float>(x - cubeMin) / (cubeSize - 1);
					lerp.y = static_cast<float>(y - cubeMin) / (cubeSize - 1);
					lerp.z = static_cast<float>(z - cubeMin) / (cubeSize - 1);

					light.Position = Lerp(minExtents, maxExtents, lerp);
					light.Color = Lerp(minColor, maxColor, lerp) * 1.5f * 1.5f;
					m_pScene->AddLight(light);
				}
			}
		}
	}
#endif
	static CEntity e;
	//Since this thing's only use us as a listener, I think I'll commandeer the render type and use it as a bool
	if (e.GetRObjectType() == CRObject::ROBJECT_STATIC)
	{
		AudioSystemWwise::Get()->RegisterListener(&e, NULL);
		e.SetRObjectType(CRObject::ROBJECT_TRANSPARENT);
	}

	return true;
}