MenuSelect.hpp
Namespaces
Name
Source code
/*
** EPITECH PROJECT, 2022
** R-TYPEMIRROR
** File description:
** Buttons
*/
#pragma once
#include "World.hpp"
#include "SFML/Graphics.hpp"
#include "../../../client/GetWorld.hpp"
#include "../../../client/AudioManager.hpp"
namespace ecs::systems
{
std::function<void(World &)> menuSelect = [](World &world) {
auto &positions = world.registry.getComponents<component::Position>();
auto &drawables = world.registry.getComponents<component::Drawable>();
auto &sizes = world.registry.getComponents<component::Size>();
auto &activables = world.registry.getComponents<component::Activable>();
auto mousePosition = sf::Mouse::getPosition(utils::Window::getInstance());
auto itButton = utils::constant::buttonValueMap.find(utils::constant::PLAY);
auto itButtonRoom = utils::constant::buttonValueMap.find(utils::constant::ROOM);
auto itHoveredButton = utils::constant::buttonValueMap.find(utils::constant::PLAY_HOVER);
for (size_t i = 0; i < positions.size() && i < drawables.size() && i < sizes.size(); i++) {
auto &pos = positions[i];
auto &draw = drawables[i];
auto &size = sizes[i];
auto &activ = activables[i];
if (draw && pos && size && activ) {
if ((mousePosition.x >= pos->x && mousePosition.x <= pos->x + size->width) && (mousePosition.y >= pos->y && mousePosition.y <= pos->y + size->height) && activ->getIsButton()) {
if (!activ->getIsHover() && activ->getIsActivate())
audio::AudioManager::playSFX("button_hover");
switch(activ->getButtonType()) {
case utils::constant::PLAY: {
activ->setButtonType(utils::constant::PLAY_HOVER);
draw->rect.top = itHoveredButton->second.rectTop;
draw->rect.left = 220;
draw->rect.width = itHoveredButton->second.defaultRectWidth;
draw->rect.height = itHoveredButton->second.defaultRectHeight;
break;
}
case utils::constant::OPTION: {
activ->setButtonType(utils::constant::OPTION_HOVER);
draw->rect.top = itHoveredButton->second.rectTop;
draw->rect.left = 3542;
draw->rect.width = itHoveredButton->second.defaultRectWidth;
draw->rect.height = itHoveredButton->second.defaultRectHeight;
break;
}
case utils::constant::QUIT: {
activ->setButtonType(utils::constant::QUIT_HOVER);
draw->rect.top = itHoveredButton->second.rectTop;
draw->rect.left = 4670;
draw->rect.width = itHoveredButton->second.defaultRectWidth;
draw->rect.height = itHoveredButton->second.defaultRectHeight;
break;
}
case utils::constant::ROOM: {
activ->setButtonType(utils::constant::ROOM_HOVER);
draw->rect.top = 1510;
draw->rect.width = itHoveredButton->second.defaultRectWidth;
draw->rect.height = itHoveredButton->second.defaultRectHeight;
break;
}
case utils::constant::SOUND_LEFT: {
auto itLeft = utils::constant::buttonValueMap.find(utils::constant::SOUND_LEFT_HOVER);
activ->setButtonType(utils::constant::SOUND_LEFT_HOVER);
draw->rect.top = itLeft->second.rectTop;
draw->rect.left = itLeft->second.rectLeft;
break;
}
case utils::constant::SOUND_RIGHT: {
auto itRight = utils::constant::buttonValueMap.find(utils::constant::SOUND_RIGHT_HOVER);
activ->setButtonType(utils::constant::SOUND_RIGHT_HOVER);
draw->rect.top = itRight->second.rectTop;
draw->rect.left = itRight->second.rectLeft;
break;
}
case utils::constant::MUSIC_LEFT: {
auto itLeft = utils::constant::buttonValueMap.find(utils::constant::MUSIC_LEFT_HOVER);
activ->setButtonType(utils::constant::MUSIC_LEFT_HOVER);
draw->rect.top = itLeft->second.rectTop;
draw->rect.left = itLeft->second.rectLeft;
break;
}
case utils::constant::MUSIC_RIGHT: {
auto itRight = utils::constant::buttonValueMap.find(utils::constant::MUSIC_RIGHT_HOVER);
activ->setButtonType(utils::constant::MUSIC_RIGHT_HOVER);
draw->rect.top = itRight->second.rectTop;
draw->rect.left = itRight->second.rectLeft;
break;
}
case utils::constant::HOW_TO: {
auto itHowTo = utils::constant::buttonValueMap.find(utils::constant::HOW_TO_HOVER);
activ->setButtonType(utils::constant::HOW_TO_HOVER);
draw->rect.top = itHowTo->second.rectTop;
draw->rect.left = itHowTo->second.rectLeft;
break;
}
case utils::constant::SETTINGS: {
auto itSettings = utils::constant::buttonValueMap.find(utils::constant::SETTINGS_HOVER);
activ->setButtonType(utils::constant::SETTINGS_HOVER);
draw->rect.top = itSettings->second.rectTop;
draw->rect.left = itSettings->second.rectLeft;
break;
}
default: break;
}
if (activ->getButtonType() == utils::constant::QUIT_HOVER)
if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
utils::Window::getInstance().close();
activ->setIsHover(true);
} else if (activ->getIsHover() && activ->getIsButton()){
activ->getButtonType() == utils::constant::ROOM ? draw->rect.top = itButtonRoom->second.rectTop : 0;
switch(activ->getButtonType()) {
case utils::constant::PLAY_HOVER: {
activ->setButtonType(utils::constant::PLAY);
draw->rect.left = 324;
draw->rect.top = itButton->second.rectTop;
draw->rect.width = itButton->second.defaultRectWidth;
draw->rect.height = itButton->second.defaultRectHeight;
break;
}
case utils::constant::OPTION_HOVER: {
activ->setButtonType(utils::constant::OPTION);
draw->rect.left = 3651;
draw->rect.top = itButton->second.rectTop;
draw->rect.width = itButton->second.defaultRectWidth;
draw->rect.height = itButton->second.defaultRectHeight;
break;
}
case utils::constant::QUIT_HOVER: {
activ->setButtonType(utils::constant::QUIT);
draw->rect.left = 4760;
draw->rect.top = itButton->second.rectTop;
draw->rect.width = itButton->second.defaultRectWidth;
draw->rect.height = itButton->second.defaultRectHeight;
break;
}
case utils::constant::ROOM_HOVER: {
activ->setButtonType(utils::constant::ROOM);
draw->rect.top = 456;
draw->rect.width = itButtonRoom->second.defaultRectWidth;
draw->rect.height = itButtonRoom->second.defaultRectHeight;
break;
}
case utils::constant::SOUND_LEFT_HOVER: {
auto itLeft = utils::constant::buttonValueMap.find(utils::constant::SOUND_LEFT);
activ->setButtonType(utils::constant::SOUND_LEFT);
draw->rect.top = itLeft->second.rectTop;
draw->rect.left = itLeft->second.rectLeft;
break;
}
case utils::constant::SOUND_RIGHT_HOVER: {
auto itRight = utils::constant::buttonValueMap.find(utils::constant::SOUND_RIGHT);
activ->setButtonType(utils::constant::SOUND_RIGHT);
draw->rect.top = itRight->second.rectTop;
draw->rect.left = itRight->second.rectLeft;
break;
}
case utils::constant::MUSIC_LEFT_HOVER: {
auto itLeft = utils::constant::buttonValueMap.find(utils::constant::MUSIC_LEFT);
activ->setButtonType(utils::constant::MUSIC_LEFT);
draw->rect.top = itLeft->second.rectTop;
draw->rect.left = itLeft->second.rectLeft;
break;
}
case utils::constant::MUSIC_RIGHT_HOVER: {
auto itRight = utils::constant::buttonValueMap.find(utils::constant::MUSIC_RIGHT);
activ->setButtonType(utils::constant::MUSIC_RIGHT);
draw->rect.top = itRight->second.rectTop;
draw->rect.left = itRight->second.rectLeft;
break;
}
case utils::constant::HOW_TO_HOVER: {
auto itHowTo = utils::constant::buttonValueMap.find(utils::constant::HOW_TO);
activ->setButtonType(utils::constant::HOW_TO);
draw->rect.top = itHowTo->second.rectTop;
draw->rect.left = itHowTo->second.rectLeft;
break;
}
case utils::constant::SETTINGS_HOVER: {
auto itSettings = utils::constant::buttonValueMap.find(utils::constant::SETTINGS);
activ->setButtonType(utils::constant::SETTINGS);
draw->rect.top = itSettings->second.rectTop;
draw->rect.left = itSettings->second.rectLeft;
break;
}
default:
break;
}
activ->setIsHover(false);
}
}
}
};
} // namespace ecs::systems
Updated on 2022-11-13 at 17:21:37 +0100
Last updated