bool MenuState::handleEvent(const sf::Event& event){ #if defined ANDROID auto& window = *getContext().window; if(event.type == sf::Event::TouchEnded){ sf::Vector2f pos = static_cast<sf::Vector2f>(window.mapPixelToCoords(sf::Vector2i(event.touch.x, event.touch.y), window.getView())); for(const auto& text:mOptions){ if(text.getGlobalBounds().contains(pos)){ if(text.getString() == "Play"){ requestStackPop(); requestStackPush(AppStates::Game); }else if(text.getString() == "Help"){ requestStackPush(AppStates::Help); }else if(text.getString() == "Exit"){ requestStackPop(); } } } }else if(event.type == sf::Event::KeyReleased){ if(event.key.code == sf::Keyboard::Escape){ requestStackPop(); } }else if(event.type == sf::Event::LostFocus){ requestStackPop(); } #else if(event.type != sf::Event::KeyReleased){ return false; } if(event.key.code == sf::Keyboard::Return){ if(mOptionIndex == Play){ requestStackPop(); requestStackPush(AppStates::Game); }else if(mOptionIndex == Help){ requestStackPush(AppStates::Help); }else if(mOptionIndex == Exit){ requestStackPop(); } }else if(event.key.code == sf::Keyboard::Up){ if(mOptionIndex > 0){ mOptionIndex--; } else{ mOptionIndex = mOptions.size() - 2; } updateOptionText(); }else if(event.key.code == sf::Keyboard::Down){ if(mOptionIndex < mOptions.size() - 2){ mOptionIndex++; }else{ mOptionIndex = 0; } updateOptionText(); } #endif return true; }
MenuState::MenuState(StateStack& stack, Context context) : State(stack, context) , mOptions() , mOptionIndex(0) { sf::Texture& texture = context.textures->get(Textures::TitleScreen); sf::Font& font = context.fonts->get(Fonts::Main); mBackgroundSprite.setTexture(texture); // A simple menu demonstration sf::Text playOption; playOption.setFont(font); playOption.setString("Play"); centerOrigin(playOption); playOption.setPosition(context.window->getView().getSize() / 2.f); mOptions.push_back(playOption); sf::Text exitOption; exitOption.setFont(font); exitOption.setString("Exit"); centerOrigin(exitOption); exitOption.setPosition(playOption.getPosition() + sf::Vector2f(0.f, 30.f)); mOptions.push_back(exitOption); updateOptionText(); }
MenuState::MenuState(StateStack& stack, Context context) : AppState(stack, context) , mOptions() , mOptionIndex(0){ loadConfig(Config::CONFIG_FILE); mBackground.setTexture(context.assets->getTexture(strBackground)); sf::Text playOption; playOption.setFont(context.assets->getFont(font)); playOption.setString("Play"); Utils::centerOrigin(playOption); playOption.setPosition(context.window->getView().getSize() / 2.f); mOptions.emplace_back(playOption); sf::Text helpOption; helpOption.setFont(context.assets->getFont(font)); helpOption.setString("Help"); Utils::centerOrigin(helpOption); helpOption.setPosition(playOption.getPosition() + sf::Vector2f(0.f, 40.f)); mOptions.emplace_back(helpOption); sf::Text exitOption; exitOption.setFont(context.assets->getFont(font)); exitOption.setString("Exit"); Utils::centerOrigin(exitOption); exitOption.setPosition(helpOption.getPosition() + sf::Vector2f(0.f, 40.f)); mOptions.emplace_back(exitOption); sf::Text gameTitle; gameTitle.setFont(context.assets->getFont(font)); gameTitle.setString("AntFarm"); gameTitle.setCharacterSize(50); Utils::centerOrigin(gameTitle); gameTitle.setPosition(playOption.getPosition() - sf::Vector2f(0.f, 100.f)); mOptions.emplace_back(gameTitle); updateOptionText(); }
bool MenuState::handleEvent(const sf::Event& event) { // The demonstration menu logic if (event.type != sf::Event::KeyPressed) return false; if (event.key.code == sf::Keyboard::Return) { if (mOptionIndex == Play) { requestStackPop(); requestStackPush(States::Game); } else if (mOptionIndex == Exit) { // The exit option was chosen, by removing itself, the stack will be empty, and the game will know it is time to close. requestStackPop(); } } else if (event.key.code == sf::Keyboard::Up) { // Decrement and wrap-around if (mOptionIndex > 0) mOptionIndex--; else mOptionIndex = mOptions.size() - 1; updateOptionText(); } else if (event.key.code == sf::Keyboard::Down) { // Increment and wrap-around if (mOptionIndex < mOptions.size() - 1) mOptionIndex++; else mOptionIndex = 0; updateOptionText(); } return true; }
MenuState::MenuState(StateStack& stack, Context context) : mBackgroundSprite0() , mBackgroundSprite1() , mBackgroundSprite2() , mStartButtonTexture(getContext().textures->get(Textures::StartButton)) , mExitButtonTexture(getContext().textures->get(Textures::ExitButton)) , State(stack, context) , mOptions() , mOptionIndex(0) { sf::Texture& texture0 = getContext().textures->get(Textures::TitleScreen0); sf::Texture& texture1 = getContext().textures->get(Textures::TitleScreen1); sf::Texture& texture2 = getContext().textures->get(Textures::TitleScreen2); // Setup the start and exit buttons mStartButtonTexture = getContext().textures->get(Textures::StartButton); mExitButtonTexture = getContext().textures->get(Textures::ExitButton); mStartButton.setTexture(mStartButtonTexture); mExitButton.setTexture(mExitButtonTexture); mStartButton.setPosition(sf::Vector2f(context.window->getView().getSize().x / 2.f - 115.f, 380.f)); mExitButton.setPosition(sf::Vector2f(context.window->getView().getSize().x / 2.f - 115.f, 460.f)); sf::Font& font = context.fonts->get(Fonts::Default); // Construct build ID mBuildInfo.setFont(font); mBuildInfo.setCharacterSize(12); mBuildInfo.setPosition(sf::Vector2f(1160.f, 750.f)); mBuildInfo.setString(Config::RELEASE_STRING); // Simple menu sf::Image playButton; playButton.loadFromFile("res/btn_start.png"); sf::Text playOption; playOption.setFont(font); playOption.setString("Play"); playOption.setCharacterSize(36); centerOrigin(playOption); playOption.setPosition(context.window->getView().getSize() / 2.f); mOptions.push_back(playOption); sf::Text exitOption; exitOption.setFont(font); exitOption.setCharacterSize(36); exitOption.setString("Exit"); centerOrigin(exitOption); exitOption.setPosition(playOption.getPosition() + sf::Vector2f(0.f, 40.f)); mOptions.push_back(exitOption); updateOptionText(); }
bool MenuState::handleEvent(const sf::Event& event) { if (event.type != sf::Event::KeyPressed) return false; if (event.key.code == sf::Keyboard::Up) { if (index > 0) index--; else index = options.size() - 1; updateOptionText(); } else if (event.key.code == sf::Keyboard::Down) { if (index < options.size() - 1) index++; else index = 0; updateOptionText(); } else if (event.key.code == sf::Keyboard::Return) { if (index == Play) { requestStackPop(); requestStackPush(States::game); } else if (index == Exit) { requestStackPop(); } } return true; }
MenuState::MenuState(StateStack& stack, Context context) :State(stack, context) ,index(0) ,options() { background_sprite.setTexture(context.textures->get(Textures::TitleScreen)); sf::Text play; play.setFont(context.fonts->get(Fonts::Main)); play.setString("Play"); play.setOrigin(play.getLocalBounds().width / 2.f, play.getLocalBounds().height / 2.f); play.setPosition(context.window->getView().getSize() / 2.f); options.push_back(play); sf::Text exit; exit.setFont(context.fonts->get(Fonts::Main)); exit.setString("Exit"); play.setOrigin(exit.getLocalBounds().width / 2.f, exit.getLocalBounds().height / 2.f); exit.setPosition(play.getPosition() + sf::Vector2f(0.f, 30.f)); options.push_back(exit); updateOptionText(); }
bool MenuState::handleEvent(const sf::Event& event) { // Check and activate based on the mouse button click location MousePosition mPos = sf::Mouse::getPosition(*getContext().window); sf::Rect<float> startrect = sf::Rect<float>(mStartButton.getPosition().x, mStartButton.getPosition().y, 230.f, 50.f); sf::Rect<float> endrect = sf::Rect<float>(mExitButton.getPosition().x, mExitButton.getPosition().y, 230.f, 50.f); if (event.type == sf::Event::MouseButtonReleased) { if (isInRect(mPos, startrect)) { requestStackPop(); requestStackPush(States::Loading); } if (isInRect(mPos, endrect)) { requestStackPop(); } } if (event.type == sf::Event::MouseMoved) { if (isInRect(mPos, startrect)) { mStartButton.setColor(sf::Color(255, 255, 255, 255)); } else { mStartButton.setColor(sf::Color(200, 200, 200, 255)); } if (isInRect(mPos, endrect)) { mExitButton.setColor(sf::Color(255, 255, 255, 255)); } else { mExitButton.setColor(sf::Color(200, 200, 200, 255)); } } // Only handle an event if the keyboard is used if (event.type != sf::Event::KeyPressed) { return false; } if (event.key.code == sf::Keyboard::Return) { if (mOptionIndex == Play) { requestStackPop(); requestStackPush(States::Loading); } else if (mOptionIndex == Exit) { // Pop the last element off the stack (itself) requestStackPop(); } } else if (event.key.code == sf::Keyboard::Down) { // Increment and wrap around if (mOptionIndex < mOptions.size() - 1) { mOptionIndex++; } else { mOptionIndex = 0; } updateOptionText(); } else if (event.key.code == sf::Keyboard::Up) { // Decrement if (mOptionIndex > 0) { mOptionIndex--; } else { mOptionIndex = mOptions.size() - 1; } updateOptionText(); } return true; }