diff options
| author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-10 19:13:48 +0100 | 
|---|---|---|
| committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-12-10 19:13:48 +0100 | 
| commit | 0cb7f2f82ca167656b3c5cb9f0cc3b44c59cb0eb (patch) | |
| tree | 8fa80428c08140d964eb122b5a1f8130bf10464a /src/crepe/api/AudioSource.h | |
| parent | 9ff08f61023a910e3d4df1f1f52d8af0fc72c153 (diff) | |
| parent | 7cbc577e94ed048f2a8146fab6972ae6ff290be7 (diff) | |
Merge branch 'master' into loek/scripts
Diffstat (limited to 'src/crepe/api/AudioSource.h')
| -rw-r--r-- | src/crepe/api/AudioSource.h | 74 | 
1 files changed, 74 insertions, 0 deletions
| diff --git a/src/crepe/api/AudioSource.h b/src/crepe/api/AudioSource.h new file mode 100644 index 0000000..b20e490 --- /dev/null +++ b/src/crepe/api/AudioSource.h @@ -0,0 +1,74 @@ +#pragma once + +#include "../Component.h" +#include "../facade/SoundHandle.h" +#include "../types.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 |