Refactor sound support so it can work on both desktop and android

This commit is contained in:
drdev
2014-05-09 01:08:52 +00:00
parent 82f121a7ef
commit 0c6c1f897c
7 changed files with 45 additions and 10 deletions

4
.gitattributes vendored
View File

@@ -946,6 +946,8 @@ forge-gui-desktop/src/main/java/forge/screens/workshop/menus/WorkshopFileMenu.ja
forge-gui-desktop/src/main/java/forge/screens/workshop/views/VCardDesigner.java -text forge-gui-desktop/src/main/java/forge/screens/workshop/views/VCardDesigner.java -text
forge-gui-desktop/src/main/java/forge/screens/workshop/views/VCardScript.java -text forge-gui-desktop/src/main/java/forge/screens/workshop/views/VCardScript.java -text
forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java -text forge-gui-desktop/src/main/java/forge/screens/workshop/views/VWorkshopCatalog.java -text
forge-gui-desktop/src/main/java/forge/sound/AltSoundSystem.java -text
forge-gui-desktop/src/main/java/forge/sound/AudioClip.java -text
forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java -text forge-gui-desktop/src/main/java/forge/toolbox/CardFaceSymbols.java -text
forge-gui-desktop/src/main/java/forge/toolbox/ContextMenuBuilder.java -text forge-gui-desktop/src/main/java/forge/toolbox/ContextMenuBuilder.java -text
forge-gui-desktop/src/main/java/forge/toolbox/FAbsolutePositioner.java -text forge-gui-desktop/src/main/java/forge/toolbox/FAbsolutePositioner.java -text
@@ -16449,8 +16451,6 @@ forge-gui/src/main/java/forge/quest/io/QuestDuelReader.java -text
forge-gui/src/main/java/forge/quest/io/ReadPriceList.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/io/ReadPriceList.java svneol=native#text/plain
forge-gui/src/main/java/forge/quest/io/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/io/package-info.java svneol=native#text/plain
forge-gui/src/main/java/forge/quest/package-info.java svneol=native#text/plain forge-gui/src/main/java/forge/quest/package-info.java svneol=native#text/plain
forge-gui/src/main/java/forge/sound/AltSoundSystem.java -text
forge-gui/src/main/java/forge/sound/AudioClip.java -text
forge-gui/src/main/java/forge/sound/EventVisualizer.java -text forge-gui/src/main/java/forge/sound/EventVisualizer.java -text
forge-gui/src/main/java/forge/sound/IAudioClip.java -text forge-gui/src/main/java/forge/sound/IAudioClip.java -text
forge-gui/src/main/java/forge/sound/NoSoundClip.java -text forge-gui/src/main/java/forge/sound/NoSoundClip.java -text

View File

@@ -63,6 +63,9 @@ import forge.screens.match.controllers.CStack;
import forge.screens.match.views.VField; import forge.screens.match.views.VField;
import forge.screens.match.views.VHand; import forge.screens.match.views.VHand;
import forge.screens.match.views.VPrompt; import forge.screens.match.views.VPrompt;
import forge.sound.AltSoundSystem;
import forge.sound.AudioClip;
import forge.sound.IAudioClip;
import forge.toolbox.FButton; import forge.toolbox.FButton;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
@@ -435,4 +438,14 @@ public class GuiDesktop implements IGuiBase {
public LobbyPlayer getQuestPlayer() { public LobbyPlayer getQuestPlayer() {
return getGuiPlayer(); return getGuiPlayer();
} }
@Override
public IAudioClip createAudioClip(String filename) {
return AudioClip.fileExists(filename) ? new AudioClip(filename) : null;
}
@Override
public void startAltSoundSystem(String filename, boolean isSynchronized) {
new AltSoundSystem(filename, isSynchronized).start();
}
} }

View File

@@ -42,6 +42,7 @@ import forge.properties.ForgeProfileProperties;
import forge.screens.match.FControl; import forge.screens.match.FControl;
import forge.screens.match.views.VPhaseIndicator.PhaseLabel; import forge.screens.match.views.VPhaseIndicator.PhaseLabel;
import forge.screens.match.winlose.ViewWinLose; import forge.screens.match.winlose.ViewWinLose;
import forge.sound.IAudioClip;
import forge.toolbox.FOptionPane; import forge.toolbox.FOptionPane;
import forge.toolbox.GuiChoose; import forge.toolbox.GuiChoose;
import forge.util.ITriggerEvent; import forge.util.ITriggerEvent;
@@ -363,4 +364,14 @@ public class GuiMobile implements IGuiBase {
public LobbyPlayer getQuestPlayer() { public LobbyPlayer getQuestPlayer() {
return getGuiPlayer(); return getGuiPlayer();
} }
@Override
public IAudioClip createAudioClip(String filename) {
return null; //TODO: Support audio clips
}
@Override
public void startAltSoundSystem(String filename, boolean isSynchronized) {
//TODO: Support alt sound system
}
} }

View File

@@ -28,6 +28,7 @@ import forge.game.zone.ZoneType;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.match.input.InputQueue; import forge.match.input.InputQueue;
import forge.properties.ForgeProfileProperties; import forge.properties.ForgeProfileProperties;
import forge.sound.IAudioClip;
import forge.util.ITriggerEvent; import forge.util.ITriggerEvent;
@@ -84,4 +85,6 @@ public interface IGuiBase {
LobbyPlayer createAiPlayer(String name, int avatarIndex); LobbyPlayer createAiPlayer(String name, int avatarIndex);
LobbyPlayer getQuestPlayer(); LobbyPlayer getQuestPlayer();
ForgeProfileProperties getProfileProps(); ForgeProfileProperties getProfileProps();
IAudioClip createAudioClip(String filename);
void startAltSoundSystem(String filename, boolean isSynchronized);
} }

View File

@@ -2,6 +2,7 @@ package forge.sound;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import forge.GuiBase;
import forge.events.UiEvent; import forge.events.UiEvent;
import forge.game.event.GameEvent; import forge.game.event.GameEvent;
import forge.model.FModel; import forge.model.FModel;
@@ -41,9 +42,12 @@ public class SoundSystem {
} }
IAudioClip clip = loadedClips.get(type); IAudioClip clip = loadedClips.get(type);
if (null == clip) { // cache miss if (clip == null) { // cache miss
String resource = type.getResourceFileName(); String resource = type.getResourceFileName();
clip = AudioClip.fileExists(resource) ? new AudioClip(resource) : emptySound; clip = GuiBase.getInterface().createAudioClip(resource);
if (clip == null) {
clip = emptySound;
}
loadedClips.put(type, clip); loadedClips.put(type, clip);
} }
return clip; return clip;
@@ -62,7 +66,10 @@ public class SoundSystem {
IAudioClip clip = loadedScriptClips.get(fileName); IAudioClip clip = loadedScriptClips.get(fileName);
if (null == clip) { // cache miss if (null == clip) { // cache miss
clip = AudioClip.fileExists(fileName) ? new AudioClip(fileName) : emptySound; clip = GuiBase.getInterface().createAudioClip(fileName);
if (clip == null) {
clip = emptySound;
}
loadedScriptClips.put(fileName, clip); loadedScriptClips.put(fileName, clip);
} }
return clip; return clip;
@@ -74,8 +81,9 @@ public class SoundSystem {
*/ */
public void play(String resourceFileName, boolean isSynchronized) { public void play(String resourceFileName, boolean isSynchronized) {
if (isUsingAltSystem()) { if (isUsingAltSystem()) {
new AltSoundSystem(ForgeConstants.SOUND_DIR + resourceFileName, isSynchronized).start(); GuiBase.getInterface().startAltSoundSystem(ForgeConstants.SOUND_DIR + resourceFileName, isSynchronized);
} else { }
else {
IAudioClip snd = fetchResource(resourceFileName); IAudioClip snd = fetchResource(resourceFileName);
if (!isSynchronized || snd.isDone()) { if (!isSynchronized || snd.isDone()) {
snd.play(); snd.play();
@@ -88,8 +96,9 @@ public class SoundSystem {
*/ */
public void play(SoundEffectType type, boolean isSynchronized) { public void play(SoundEffectType type, boolean isSynchronized) {
if (isUsingAltSystem()) { if (isUsingAltSystem()) {
new AltSoundSystem(ForgeConstants.SOUND_DIR + type.getResourceFileName(), isSynchronized).start(); GuiBase.getInterface().startAltSoundSystem(ForgeConstants.SOUND_DIR + type.getResourceFileName(), isSynchronized);
} else { }
else {
IAudioClip snd = fetchResource(type); IAudioClip snd = fetchResource(type);
if (!isSynchronized || snd.isDone()) { if (!isSynchronized || snd.isDone()) {
snd.play(); snd.play();
@@ -148,5 +157,4 @@ public class SoundSystem {
play(effect, effect.isSynced()); play(effect, effect.isSynced());
} }
} }
} }