CSC3224_Computer_Games_Development / Game / MainMenu.cpp
MainMenu.cpp
Raw
#include "MainMenu.h"

MainMenu::MenuResult MainMenu::Show(sf::RenderWindow& window)
{
	//Load menu image from file
	sf::Texture image;
	image.loadFromFile(TEXTURE_DIR"mainmenu.png");
	sf::Sprite sprite(image);
	//Setup clickable regions

	//Play menu item coordinates
	MenuItem levelTest;
	levelTest.rect.top = 0;
	levelTest.rect.height = 160;
	levelTest.rect.left = 0;
	levelTest.rect.width = 500;
	levelTest.action = LevelTest;

	MenuItem level1Button;
	level1Button.rect.top = 0;
	level1Button.rect.height = 160;
	level1Button.rect.left = 510;
	level1Button.rect.width = 1023;
	level1Button.action = Level1;

	MenuItem level2Button;
	level2Button.rect.top = 160;
	level2Button.rect.height = 390;
	level2Button.rect.left = 0;
	level2Button.rect.width = 500;
	level2Button.action = Level2;

	MenuItem level3Button;
	level3Button.rect.top = 160;
	level3Button.rect.height = 390;
	level3Button.rect.left = 510;
	level3Button.rect.width = 1023;
	level3Button.action = Level3;

	//Exit menu item coordinates
	MenuItem exitButton;
	exitButton.rect.top = 395;
	exitButton.rect.height = 560;
	exitButton.rect.left = 0;
	exitButton.rect.width = 1023;
	exitButton.action = Exit;

	_menuItems.push_back(levelTest);
	_menuItems.push_back(level1Button);
	_menuItems.push_back(level2Button);
	_menuItems.push_back(level3Button);
	_menuItems.push_back(exitButton);
	
	window.draw(sprite);
	window.display();

	return GetMenuResponse(window);
}

MainMenu::MenuResult MainMenu::HandleClick(int x, int y)
{
	std::list<MenuItem>::iterator it;

	for (it = _menuItems.begin(); it != _menuItems.end(); it++)
	{
		sf::Rect<int> menuItemRect = (*it).rect;
		if (x > menuItemRect.left
			&& x < menuItemRect.left + menuItemRect.width
			&& y > menuItemRect.top
			&& y < menuItemRect.height + menuItemRect.top)
		{
			return (*it).action;
		}
	}

	return Nothing;
}

MainMenu::MenuResult MainMenu::GetMenuResponse(sf::RenderWindow& window)
{
	sf::Event menuEvent;

	while (42 != 43)
	{

		while (window.pollEvent(menuEvent))
		{
			if (menuEvent.type == sf::Event::MouseButtonPressed)
			{
				std::cout << "x Button: " << menuEvent.mouseButton.x << std::endl;
				std::cout << "y Button: " << menuEvent.mouseButton.y << std::endl;
				return HandleClick(menuEvent.mouseButton.x, menuEvent.mouseButton.y);
			}
			if (menuEvent.type == sf::Event::Closed)
			{
				return Exit;
			}
		}
	}
}