diff options
author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-10 13:40:42 +0100 |
---|---|---|
committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-12-10 13:40:42 +0100 |
commit | d80c98ee03e59e0c38e025a7fe83ab4c39115fb8 (patch) | |
tree | c31c861b82d384e64071b4e7f64dfafe99b888c0 /src/crepe/api/AudioSource.h | |
parent | b2c72ee8ce282bb13b0fbeb2ddb01fdfd6ad1280 (diff) | |
parent | 7a8657dfe019104aced61a5b63e63f61ad919f7a (diff) |
font progress
Diffstat (limited to 'src/crepe/api/AudioSource.h')
-rw-r--r-- | src/crepe/api/AudioSource.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/crepe/api/AudioSource.h b/src/crepe/api/AudioSource.h new file mode 100644 index 0000000..7c1f161 --- /dev/null +++ b/src/crepe/api/AudioSource.h @@ -0,0 +1,75 @@ +#pragma once + +#include "../Component.h" +#include "../types.h" +#include "../facade/SoundHandle.h" + +#include "Asset.h" +#include "GameObject.h" + +namespace crepe { + +class AudioSystem; + +//! Audio source component +class AudioSource : public Component { + //! AudioSource components are handled by AudioSystem + friend class AudioSystem; + +protected: + /** + * \param source Sound sample to load + */ + AudioSource(game_object_id_t id, const Asset & source); + //! Only ComponentManager creates components + friend class ComponentManager; + +public: + // std::unique_ptr needs to be able to destoy this component + virtual ~AudioSource() = default; + +public: + //! Start this audio source + void play(bool looping = false); + //! Stop this audio source + void stop(); + +public: + //! Play when this component becomes active + bool play_on_awake = false; + //! Repeat the current audio clip during playback + bool loop = false; + //! Normalized volume (0.0 - 1.0) + float volume = 1.0; + +private: + //! This audio source's clip + const Asset source; + + /** + * \name One-shot state variables + * + * These variables trigger function calls when set to true, and are unconditionally reset on + * every system update. + * + * \{ + */ + //! Play this sample + bool oneshot_play = false; + //! Stop this sample + bool oneshot_stop = false; + //! \} + /** + * \name State diffing variables + * \{ + */ + typeof(active) last_active = false; + typeof(volume) last_volume = volume; + typeof(loop) last_loop = loop; + //! \} + //! This source's voice handle + SoundHandle voice{}; + +}; + +} // namespace crepe |