Program Listing for File Sound.hpp

Return to documentation for file (engine/include/Cacao/Sound.hpp)

#pragma once

#include "Cacao/ResourceManager.hpp"
#include "DllHelper.hpp"
#include "Asset.hpp"

#include <memory>
#include <vector>

namespace Cacao {
    class CACAO_API Sound final : public Asset {
      public:
        static std::shared_ptr<Sound> Create(std::vector<char>&& encodedAudio, const std::string& addr) {
            return std::shared_ptr<Sound>(new Sound(std::move(encodedAudio), addr));
        }

        Sound(const Sound&) = delete;
        Sound(Sound&&);
        Sound& operator=(const Sound&) = delete;
        Sound& operator=(Sound&&);

        void Realize();

        std::shared_future<void> RealizeAsync();

        void DropRealized();

        struct Impl;

        ~Sound();

      private:
        Sound(std::vector<char>&& encodedAudio, const std::string& addr);
        friend class ResourceManager;

        std::unique_ptr<Impl> impl;
        friend class ImplAccessor;
    };
}