// // Created by Иван Ильин on 17.10.2021. // #ifndef SHOOTER_SOUNDCONTROLLER_H #define SHOOTER_SOUNDCONTROLLER_H #include #include #include class SoundTag final { private: const std::string _name; public: explicit SoundTag(std::string name = "") : _name(std::move(name)) {} [[nodiscard]] std::string str() const { return _name; } bool operator==(const SoundTag& tag) const { return _name == tag._name; } bool operator!=(const SoundTag& tag) const { return _name != tag._name; } bool operator<(const SoundTag& tag) const { return _name < tag._name; } }; class SoundController final { private: std::map _sounds; static SoundController* _instance; static bool _validInstance; SoundController() = default; public: SoundController(const SoundController&) = delete; SoundController& operator=(SoundController&) = delete; static void playSound(const SoundTag& soundTag, const std::string& filename); static void pauseSound(const SoundTag& soundTag); static void stopSound(const SoundTag& soundTag); static sf::Sound::Status getStatus(const SoundTag& soundTag); static void init(); static void free(); }; #endif //SHOOTER_SOUNDCONTROLLER_H