r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
Audio.hpp
Go to the documentation of this file.
1///
2/// @file Audio.hpp
3/// @brief This file contains the audio system definition
4/// @namespace ecs
5///
6
7#pragma once
8
9#include "ECS/Component.hpp"
11#include "ECS/Registry.hpp"
12#include "Interfaces/IAudio.hpp"
13#include "Utils/Common.hpp"
14
15namespace ecs
16{
17
18 ///
19 /// @class AudioSystem
20 /// @brief Class for audio system
21 /// @namespace ecs
22 ///
23 class AudioSystem final : public ASystem
24 {
25 public:
26 explicit AudioSystem(const std::shared_ptr<eng::IAudio> &audio, const float &audioVolume,
27 Registry &registry, bool &playSelectionMusic)
28 : m_audio(audio), m_registry(registry), m_audioVolume(audioVolume),
29 m_playSelectionMusic(playSelectionMusic)
30 {
31
32 registry.onComponentAdded(
33 [&audio, &registry](const Entity e, const std::type_info &type)
34 {
35 const auto *audioComp = registry.getComponent<Audio>(e);
36
37 if (type == typeid(Audio))
38 {
39 if (audioComp)
40 {
41 audio->createAudio(audioComp->path, audioComp->volume, audioComp->loop,
42 audioComp->id + std::to_string(e));
43 }
44 }
45 });
47 registry.createEntity()
48 .with<Audio>("menu_input", utl::Path::Audio::AUDIO_INPUT, 10.F, false, false)
49 .build();
50 m_selectionSoundName = "menu_input" + std::to_string(m_selectionSoundEntity);
51 }
52 ~AudioSystem() override = default;
53
54 AudioSystem(const AudioSystem &) = delete;
55 AudioSystem &operator=(const AudioSystem &) = delete;
58
59 void update(Registry &registry, float /* dt */) override
60 {
61 for (auto &[entity, audio] : registry.getAll<Audio>())
62 {
63 std::string audioName = audio.id + std::to_string(entity);
64 m_audio->setVolume(audioName, audio.volume * m_audioVolume);
65 m_audio->setLoop(audioName, audio.loop);
66
67 const auto status = m_audio->isPlaying(audioName);
68 if (audio.play)
69 {
70 if (status != eng::Status::Playing)
71 {
72 m_audio->playAudio(audioName);
73 if (!audio.loop)
74 {
75 audio.play = false;
76 }
77 }
78 }
79 else if (audio.loop)
80 {
81 if (status != eng::Status::Stopped)
82 {
83 m_audio->stopAudio(audioName);
84 }
85 }
86 }
88 {
89 if (m_selectionSoundName.empty())
90 return;
91
95 }
96 }
97
98 private:
99 const std::shared_ptr<eng::IAudio> &m_audio;
101 const float &m_audioVolume;
102
106 }; // class AudioSystem
107} // namespace ecs
This file contains the component definitions.
This file contains the Audio interface.
This file contains the interface for systems.
This file contains the Registry class declaration.
Abstract class for system.
Definition ISystems.hpp:34
Class for audio system.
Definition Audio.hpp:24
AudioSystem(AudioSystem &&)=delete
bool & m_playSelectionMusic
Definition Audio.hpp:105
~AudioSystem() override=default
Registry & m_registry
Definition Audio.hpp:100
AudioSystem(const std::shared_ptr< eng::IAudio > &audio, const float &audioVolume, Registry &registry, bool &playSelectionMusic)
Definition Audio.hpp:26
Entity m_selectionSoundEntity
Definition Audio.hpp:103
AudioSystem & operator=(const AudioSystem &)=delete
void update(Registry &registry, float) override
Definition Audio.hpp:59
const std::shared_ptr< eng::IAudio > & m_audio
Definition Audio.hpp:99
AudioSystem(const AudioSystem &)=delete
std::string m_selectionSoundName
Definition Audio.hpp:104
AudioSystem & operator=(AudioSystem &&)=delete
const float & m_audioVolume
Definition Audio.hpp:101
EntityBuilder & with(Args &&...args)
Definition Registry.hpp:40
Class for managing entities and their components.
Definition Registry.hpp:25
EntityBuilder createEntity()
Definition Registry.hpp:53
void onComponentAdded(std::function< void(Entity, const std::type_info &)> cb)
Definition Registry.hpp:91
std::unordered_map< Entity, T > & getAll()
Definition Registry.hpp:77
T * getComponent(Entity e)
Definition Registry.hpp:71
virtual void setVolume(const std::string &name, float volume)=0
virtual void playAudio(const std::string &name)=0
virtual Status isPlaying(const std::string &name)=0
virtual void setLoop(const std::string &name, bool loop)=0
virtual void stopAudio(const std::string &name)=0
This file contains common definitions and constants.
std::uint32_t Entity
Definition Entity.hpp:13
constexpr auto AUDIO_INPUT
Definition Common.hpp:87