/
del00n
/
Space_Lab
Обзор
Документация
Войти
/
del00n
/
Space_Lab
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Menu.h
90 строк
2 KB
del00n
upload files
15 янв 2026, 13:41
15 янв 2026, 13:41
197850f
Код
Авторство
О чём код?
#pragma once #include <SFML/Graphics.hpp> #include <algorithm> #include <string> #include <vector> #include "LevelManager.h" enum class MenuState { MAIN_MENU, LEVEL_SELECT, LEVEL_CONFIG, LEVEL_EDITOR, PLAYING, EXITING }; struct MenuButton { sf::RectangleShape shape; std::string text; bool hovered = false; MenuButton() = default; MenuButton(sf::Vector2f pos, sf::Vector2f size, const std::string& txt) : text(txt) { shape.setPosition(pos); shape.setSize(size); shape.setFillColor(sf::Color(60, 60, 60)); shape.setOutlineColor(sf::Color(100, 150, 255)); shape.setOutlineThickness(2.f); } void update(sf::Vector2f mousePos) { hovered = shape.getGlobalBounds().contains(mousePos); shape.setFillColor(hovered ? sf::Color(100, 100, 150) : sf::Color(60, 60, 60)); } bool isClicked(sf::Vector2f mousePos) const { return shape.getGlobalBounds().contains(mousePos); } }; class Menu { public: Menu(); MenuState handleEvents(sf::RenderWindow& window); void render(sf::RenderWindow& window); MenuState getCurrentState() const { return currentState; } void setState(MenuState state) { currentState = state; } int getSelectedLevel() const { return selectedLevel; } void setSelectedLevel(int level) { selectedLevel = level; } LevelConfig& getEditingConfig() { return editingConfig; } const LevelConfig& getEditingConfig() const { return editingConfig; } int getWaypointCount() const { return editingConfig.waypointCount; } float getPlanetMass() const { return editingConfig.planetMass; } private: MenuState currentState = MenuState::MAIN_MENU; bool editingMode = false; sf::Font font; std::vector<MenuButton> mainMenuButtons; std::vector<MenuButton> levelSelectButtons; int selectedLevel = 0; LevelManager levelManager; LevelConfig editingConfig; int selectedPlanet = -1; bool draggingPlanet = false; sf::Vector2f dragOffset{0.f, 0.f}; void renderMainMenu(sf::RenderWindow& window); void renderLevelSelect(sf::RenderWindow& window, bool isEditing = false); void renderLevelConfig(sf::RenderWindow& window); void renderLevelEditor(sf::RenderWindow& window); void setupMainMenu(); void setupLevelSelect(); void saveCurrentLevel(); };