From aa171bdd0e31cd54b17af4d38aa6fb0b6a955480 Mon Sep 17 00:00:00 2001 From: Charlie Groves Date: Sat, 23 Aug 2008 19:42:54 +0000 Subject: [PATCH] Expose sound types being enabled or disabled git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@646 ed5b42cb-e716-0410-a449-f6a68f950b19 --- .../media/sound/SoundEnabledObserver.java | 14 +++++++++ .../threerings/media/sound/SoundPlayer.java | 29 +++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 src/java/com/threerings/media/sound/SoundEnabledObserver.java diff --git a/src/java/com/threerings/media/sound/SoundEnabledObserver.java b/src/java/com/threerings/media/sound/SoundEnabledObserver.java new file mode 100644 index 00000000..5031ea6c --- /dev/null +++ b/src/java/com/threerings/media/sound/SoundEnabledObserver.java @@ -0,0 +1,14 @@ +package com.threerings.media.sound; + +import com.threerings.media.sound.SoundPlayer.SoundType; + +/** + * Exposes a {@link SoundType} being enabled or disabled in {@link SoundPlayer}. + */ +public interface SoundEnabledObserver +{ + /** + * Called when the given type is either enabled or disabled. + */ + void enabledChanged(SoundType type, boolean enabled); +} diff --git a/src/java/com/threerings/media/sound/SoundPlayer.java b/src/java/com/threerings/media/sound/SoundPlayer.java index 854bad28..05ce44c7 100644 --- a/src/java/com/threerings/media/sound/SoundPlayer.java +++ b/src/java/com/threerings/media/sound/SoundPlayer.java @@ -5,7 +5,9 @@ import java.util.Set; import com.google.common.collect.Sets; import com.samskivert.util.Interval; +import com.samskivert.util.ObserverList; import com.samskivert.util.RunQueue; +import com.samskivert.util.ObserverList.ObserverOp; /** * Loads, plays and loops sounds. @@ -131,13 +133,32 @@ public abstract class SoundPlayer /** * Turns on or off the specified sound type. */ - public void setEnabled (SoundType type, boolean enabled) + public void setEnabled (final SoundType type, final boolean enabled) { + boolean changed; if (enabled) { - _disabledTypes.remove(type); + changed = _disabledTypes.remove(type); } else { - _disabledTypes.add(type); + changed = _disabledTypes.add(type); } + if (changed) { + _enabledObservers.apply(new ObserverOp() { + public boolean apply (SoundEnabledObserver observer) { + observer.enabledChanged(type, enabled); + return true; + } + }); + } + } + + public void addSoundEnabledObserver (SoundEnabledObserver listener) + { + _enabledObservers.add(listener); + } + + public void removeSoundEnabledObserver (SoundEnabledObserver listener) + { + _enabledObservers.remove(listener); } /** @@ -273,4 +294,6 @@ public abstract class SoundPlayer /** A set of soundTypes for which sound is enabled. */ protected Set _disabledTypes = Sets.newHashSet(); + protected ObserverList _enabledObservers = ObserverList.newFastUnsafe(); + }