ICT290 / src / scene / mainMenu / menuState.h
menuState.h
Raw
#pragma once

#include <memory>
#include "../../engine/UI.h"
#include "../../engine/resources.h"
#include "../../engine/stateManager.h"
#include "../theArchanist/map/gameMap.h"

/**
 * Struct to represent the sounds used in the menu
 */
struct MenuSounds {
    Sound click{"buttonClick.ogg", false, 60};
    Sound music{"loneliness.ogg", true, 30};
};

/**
 * Struct to represent the settings for level config
 */
struct ArchSettings {
    enum Difficulty { easy = 0, medium, hard };
    int seed{0};
    int levels{3};
    int difficulty{Difficulty::medium};
};

/**
 * @class menuState
 * @brief The state that represents the main menu for our project. From here
 * settings can be edited and game selected.
 *
 * @author Chase Percy
 *
 */
class menuState {
   public:
    static std::shared_ptr<State> init(Resources& engineResources);

    static void destroy();

    static void pause(bool option);

    static void handleEvents(SDL_Event& event);

    static void update(float deltaTime);

    static void draw();

    static void setCamera();

   private:
    static std::shared_ptr<State> m_thisState;  /// This state
    static gameMap m_map;  /// the map to be drawn in the background
    static float m_timer;  /// the timer for updating and drawing a new map
    static MenuSounds m_sounds;          /// the sounds to be used in the menu
    static ArchSettings m_archSettings;  /// the settings to update
};