aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/system/AudioSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe/system/AudioSystem.cpp')
-rw-r--r--src/crepe/system/AudioSystem.cpp23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/crepe/system/AudioSystem.cpp b/src/crepe/system/AudioSystem.cpp
index 98aff58..b105a4d 100644
--- a/src/crepe/system/AudioSystem.cpp
+++ b/src/crepe/system/AudioSystem.cpp
@@ -13,14 +13,12 @@ void AudioSystem::update() {
RefVector<AudioSource> components = component_manager.get_components_by_type<AudioSource>();
for (AudioSource & component : components) {
- if (!component.active) continue;
-
Sound & resource = resource_manager.get<Sound>(component.source);
if (component.private_data.empty()) {
auto & data = component.private_data.set<ComponentPrivate>();
this->update_last(component, data);
- data.last_playing = false; // always start
+ data.last_active = false;
}
auto & data = component.private_data.get<ComponentPrivate>();
@@ -31,27 +29,26 @@ void AudioSystem::update() {
}
void AudioSystem::diff_update(AudioSource & component, ComponentPrivate & data, Sound & resource) {
- bool update_playing = component.playing != data.last_playing;
bool update_volume = component.volume != data.last_volume;
bool update_loop = component.loop != data.last_loop;
bool update_active = component.active != data.last_active;
if (update_active) {
if (component.active) {
- update_playing = true;
- if (component.play_on_awake)
- component.playing = true;
+ component.oneshot_play = component.play_on_awake;
} else {
this->context.stop(data.handle);
return;
}
}
if (!component.active) return;
- if (update_playing) {
- if (component.playing) data.handle = this->context.play(resource);
- else this->context.stop(data.handle);
- } else {
- component.playing = this->context.get_playing(data.handle);
+ if (component.oneshot_play) {
+ data.handle = this->context.play(resource);
+ component.oneshot_play = false;
+ }
+ if (component.oneshot_stop) {
+ this->context.stop(data.handle);
+ component.oneshot_stop = false;
}
if (update_volume) {
this->context.set_volume(resource, data.handle, component.volume);
@@ -63,8 +60,8 @@ void AudioSystem::diff_update(AudioSource & component, ComponentPrivate & data,
void AudioSystem::update_last(const AudioSource & component, ComponentPrivate & data) {
data.last_active = component.active;
+ if (!component.active) return;
data.last_loop = component.loop;
- data.last_playing = component.playing;
data.last_volume = component.volume;
}