diff options
author | Pacien TRAN-GIRARD | 2014-05-22 14:55:25 +0200 |
---|---|---|
committer | Pacien TRAN-GIRARD | 2014-05-22 20:21:16 +0200 |
commit | ba0d0039b3463cba497abd25f4fbf62cf74398e3 (patch) | |
tree | dd631355159b3f2e09d87169358707a258a903a3 | |
parent | c863481f22231dab3ba1ca2f47db39d402caca33 (diff) | |
download | esieequest-ba0d0039b3463cba497abd25f4fbf62cf74398e3.tar.gz |
Implement music on Swing GUI
-rw-r--r-- | .classpath | 4 | ||||
-rw-r--r-- | build.xml | 4 | ||||
-rw-r--r-- | lib/easyogg.jar | bin | 0 -> 9520 bytes | |||
-rw-r--r-- | lib/jogg-0.0.7.jar | bin | 0 -> 6839 bytes | |||
-rw-r--r-- | lib/jorbis-0.0.15.jar | bin | 0 -> 58917 bytes | |||
-rw-r--r-- | lib/startup2.jar | bin | 0 -> 104522 bytes | |||
-rw-r--r-- | res/res/snd/END.ogg | bin | 0 -> 1155224 bytes | |||
-rw-r--r-- | res/res/snd/FEED_ATHANASE.ogg | bin | 0 -> 513150 bytes | |||
-rw-r--r-- | res/res/snd/FIND_CONSOLE.ogg | bin | 0 -> 1627908 bytes | |||
-rw-r--r-- | res/res/snd/FIND_DISK.ogg | bin | 0 -> 969007 bytes | |||
-rw-r--r-- | res/res/snd/INSTALL_CONSOLE.ogg | bin | 0 -> 1719262 bytes | |||
-rw-r--r-- | res/res/snd/INTRO.ogg | bin | 0 -> 923189 bytes | |||
-rw-r--r-- | res/res/snd/RUN_CONSOLE.ogg | bin | 0 -> 121718 bytes | |||
-rw-r--r-- | res/res/snd/WHAT_HAPPENED.ogg | bin | 0 -> 2019139 bytes | |||
-rw-r--r-- | src/esieequest/view/app/UserInterface.java | 97 |
15 files changed, 96 insertions, 9 deletions
@@ -7,5 +7,9 @@ | |||
7 | <classpathentry kind="lib" path="lib/guava-16.0.1.jar"/> | 7 | <classpathentry kind="lib" path="lib/guava-16.0.1.jar"/> |
8 | <classpathentry kind="lib" path="lib/guava-gwt-16.0.1.jar"/> | 8 | <classpathentry kind="lib" path="lib/guava-gwt-16.0.1.jar"/> |
9 | <classpathentry kind="lib" path="lib/lombok.jar"/> | 9 | <classpathentry kind="lib" path="lib/lombok.jar"/> |
10 | <classpathentry kind="lib" path="lib/easyogg.jar"/> | ||
11 | <classpathentry kind="lib" path="lib/jogg-0.0.7.jar"/> | ||
12 | <classpathentry kind="lib" path="lib/jorbis-0.0.15.jar"/> | ||
13 | <classpathentry kind="lib" path="lib/startup2.jar"/> | ||
10 | <classpathentry kind="output" path="war/WEB-INF/classes"/> | 14 | <classpathentry kind="output" path="war/WEB-INF/classes"/> |
11 | </classpath> | 15 | </classpath> |
@@ -22,6 +22,10 @@ | |||
22 | <copy todir="war/WEB-INF/lib" file="lib/guava-16.0.1.jar" /> | 22 | <copy todir="war/WEB-INF/lib" file="lib/guava-16.0.1.jar" /> |
23 | <copy todir="war/WEB-INF/lib" file="lib/guava-gwt-16.0.1.jar" /> | 23 | <copy todir="war/WEB-INF/lib" file="lib/guava-gwt-16.0.1.jar" /> |
24 | <copy todir="war/WEB-INF/lib" file="lib/lombok.jar" /> | 24 | <copy todir="war/WEB-INF/lib" file="lib/lombok.jar" /> |
25 | <copy todir="war/WEB-INF/lib" file="lib/easyogg.jar" /> | ||
26 | <copy todir="war/WEB-INF/lib" file="lib/jogg-0.0.7.jar" /> | ||
27 | <copy todir="war/WEB-INF/lib" file="lib/jorbis-0.0.15.jar" /> | ||
28 | <copy todir="war/WEB-INF/lib" file="lib/startup2.jar" /> | ||
25 | </target> | 29 | </target> |
26 | 30 | ||
27 | <target name="javac" depends="libs" description="Compile java source to bytecode"> | 31 | <target name="javac" depends="libs" description="Compile java source to bytecode"> |
diff --git a/lib/easyogg.jar b/lib/easyogg.jar new file mode 100644 index 0000000..bf70633 --- /dev/null +++ b/lib/easyogg.jar | |||
Binary files differ | |||
diff --git a/lib/jogg-0.0.7.jar b/lib/jogg-0.0.7.jar new file mode 100644 index 0000000..1cbd1ad --- /dev/null +++ b/lib/jogg-0.0.7.jar | |||
Binary files differ | |||
diff --git a/lib/jorbis-0.0.15.jar b/lib/jorbis-0.0.15.jar new file mode 100644 index 0000000..4cf51f9 --- /dev/null +++ b/lib/jorbis-0.0.15.jar | |||
Binary files differ | |||
diff --git a/lib/startup2.jar b/lib/startup2.jar new file mode 100644 index 0000000..697ed76 --- /dev/null +++ b/lib/startup2.jar | |||
Binary files differ | |||
diff --git a/res/res/snd/END.ogg b/res/res/snd/END.ogg new file mode 100644 index 0000000..db2b370 --- /dev/null +++ b/res/res/snd/END.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/FEED_ATHANASE.ogg b/res/res/snd/FEED_ATHANASE.ogg new file mode 100644 index 0000000..94e8668 --- /dev/null +++ b/res/res/snd/FEED_ATHANASE.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/FIND_CONSOLE.ogg b/res/res/snd/FIND_CONSOLE.ogg new file mode 100644 index 0000000..39aee7e --- /dev/null +++ b/res/res/snd/FIND_CONSOLE.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/FIND_DISK.ogg b/res/res/snd/FIND_DISK.ogg new file mode 100644 index 0000000..b852de2 --- /dev/null +++ b/res/res/snd/FIND_DISK.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/INSTALL_CONSOLE.ogg b/res/res/snd/INSTALL_CONSOLE.ogg new file mode 100644 index 0000000..fe7a296 --- /dev/null +++ b/res/res/snd/INSTALL_CONSOLE.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/INTRO.ogg b/res/res/snd/INTRO.ogg new file mode 100644 index 0000000..da90187 --- /dev/null +++ b/res/res/snd/INTRO.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/RUN_CONSOLE.ogg b/res/res/snd/RUN_CONSOLE.ogg new file mode 100644 index 0000000..8c43dd1 --- /dev/null +++ b/res/res/snd/RUN_CONSOLE.ogg | |||
Binary files differ | |||
diff --git a/res/res/snd/WHAT_HAPPENED.ogg b/res/res/snd/WHAT_HAPPENED.ogg new file mode 100644 index 0000000..0aac689 --- /dev/null +++ b/res/res/snd/WHAT_HAPPENED.ogg | |||
Binary files differ | |||
diff --git a/src/esieequest/view/app/UserInterface.java b/src/esieequest/view/app/UserInterface.java index facc706..ed8e78f 100644 --- a/src/esieequest/view/app/UserInterface.java +++ b/src/esieequest/view/app/UserInterface.java | |||
@@ -12,9 +12,12 @@ import java.awt.event.FocusEvent; | |||
12 | import java.awt.event.FocusListener; | 12 | import java.awt.event.FocusListener; |
13 | import java.awt.event.KeyEvent; | 13 | import java.awt.event.KeyEvent; |
14 | import java.awt.image.BufferedImage; | 14 | import java.awt.image.BufferedImage; |
15 | import java.io.IOException; | ||
15 | import java.net.URL; | 16 | import java.net.URL; |
16 | import java.util.HashMap; | 17 | import java.util.HashMap; |
17 | import java.util.Map.Entry; | 18 | import java.util.Map.Entry; |
19 | import java.util.Timer; | ||
20 | import java.util.TimerTask; | ||
18 | 21 | ||
19 | import javax.swing.AbstractAction; | 22 | import javax.swing.AbstractAction; |
20 | import javax.swing.JButton; | 23 | import javax.swing.JButton; |
@@ -28,6 +31,8 @@ import javax.swing.border.EmptyBorder; | |||
28 | 31 | ||
29 | import lombok.Getter; | 32 | import lombok.Getter; |
30 | 33 | ||
34 | import org.newdawn.easyogg.OggClip; | ||
35 | |||
31 | import com.wordpress.tipsforjava.swing.StretchIcon; | 36 | import com.wordpress.tipsforjava.swing.StretchIcon; |
32 | 37 | ||
33 | import esieequest.controller.GameEngine; | 38 | import esieequest.controller.GameEngine; |
@@ -54,7 +59,7 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
54 | private static final String ILLUSTRATION_DIR = "res/frame/"; | 59 | private static final String ILLUSTRATION_DIR = "res/frame/"; |
55 | private static final String ILLUSTRATION_EXT = ".html"; | 60 | private static final String ILLUSTRATION_EXT = ".html"; |
56 | 61 | ||
57 | private static final String SOUND_DIR = "res/audio/"; | 62 | private static final String SOUND_DIR = "res/snd/"; |
58 | private static final String SOUND_EXT = ".ogg"; | 63 | private static final String SOUND_EXT = ".ogg"; |
59 | 64 | ||
60 | private GameEngine gameEngine; | 65 | private GameEngine gameEngine; |
@@ -98,6 +103,12 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
98 | private JButton leftButton; | 103 | private JButton leftButton; |
99 | private JButton rightButton; | 104 | private JButton rightButton; |
100 | 105 | ||
106 | private final Timer timer; | ||
107 | private TimerTask timerTask; | ||
108 | |||
109 | private OggClip audio; | ||
110 | private boolean muted; | ||
111 | |||
101 | /** | 112 | /** |
102 | * The default constructor. | 113 | * The default constructor. |
103 | */ | 114 | */ |
@@ -107,6 +118,8 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
107 | this.bindKeys(); | 118 | this.bindKeys(); |
108 | this.bindFocus(); | 119 | this.bindFocus(); |
109 | this.setControlsState(false); | 120 | this.setControlsState(false); |
121 | this.timer = new Timer(); | ||
122 | this.muted = false; | ||
110 | } | 123 | } |
111 | 124 | ||
112 | /** | 125 | /** |
@@ -310,6 +323,20 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
310 | }); | 323 | }); |
311 | } | 324 | } |
312 | 325 | ||
326 | this.layout.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( | ||
327 | KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), KeyEvent.VK_ESCAPE); | ||
328 | |||
329 | this.layout.getActionMap().put(KeyEvent.VK_ESCAPE, new AbstractAction() { | ||
330 | |||
331 | private static final long serialVersionUID = 1L; | ||
332 | |||
333 | @Override | ||
334 | public void actionPerformed(final ActionEvent actionEvent) { | ||
335 | UserInterface.this.skipScene(); | ||
336 | } | ||
337 | |||
338 | }); | ||
339 | |||
313 | } | 340 | } |
314 | 341 | ||
315 | /** | 342 | /** |
@@ -388,7 +415,7 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
388 | */ | 415 | */ |
389 | private void setIllustration(final String imageName) { | 416 | private void setIllustration(final String imageName) { |
390 | final URL imageURL = this.getClass().getClassLoader().getResource( | 417 | final URL imageURL = this.getClass().getClassLoader().getResource( |
391 | imageName + UserInterface.ILLUSTRATION_EXT); | 418 | UserInterface.ILLUSTRATION_DIR + imageName + UserInterface.ILLUSTRATION_EXT); |
392 | final StretchIcon imageIcon; | 419 | final StretchIcon imageIcon; |
393 | if (imageURL == null) { | 420 | if (imageURL == null) { |
394 | imageIcon = new StretchIcon(this.generatePlaceholderImage(imageName), true); | 421 | imageIcon = new StretchIcon(this.generatePlaceholderImage(imageName), true); |
@@ -415,6 +442,14 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
415 | } | 442 | } |
416 | 443 | ||
417 | /** | 444 | /** |
445 | * Skips the currently player Scene. | ||
446 | */ | ||
447 | private void skipScene() { | ||
448 | this.timerTask.run(); | ||
449 | this.timerTask.cancel(); | ||
450 | } | ||
451 | |||
452 | /** | ||
418 | * Opens the inventory (switches to the inventory tab). | 453 | * Opens the inventory (switches to the inventory tab). |
419 | */ | 454 | */ |
420 | private void openInventory() { | 455 | private void openInventory() { |
@@ -448,16 +483,46 @@ abstract class UserInterface implements Viewable, ActionListener { | |||
448 | * the URL of the audio file | 483 | * the URL of the audio file |
449 | */ | 484 | */ |
450 | private void playAudio(final String fileName) { | 485 | private void playAudio(final String fileName) { |
451 | // TODO Auto-generated method stub | 486 | if (this.audio != null) { |
452 | // this.echo(Text.NOT_IMPLEMENTED.toString()); | 487 | this.audio.stop(); |
488 | this.audio.close(); | ||
489 | } | ||
490 | |||
491 | try { | ||
492 | this.audio = new OggClip(UserInterface.SOUND_DIR + fileName + UserInterface.SOUND_EXT); | ||
493 | this.setAudioGain(); | ||
494 | this.audio.play(); | ||
495 | } catch (final IOException e) { | ||
496 | e.printStackTrace(); | ||
497 | } | ||
453 | } | 498 | } |
454 | 499 | ||
455 | /** | 500 | /** |
456 | * Toggles the sound (music). | 501 | * Toggles the sound (music). |
457 | */ | 502 | */ |
458 | private void toggleAudio() { | 503 | private void toggleAudio() { |
459 | // TODO Auto-generated method stub | 504 | this.muted = !this.muted; |
460 | this.echo(Text.NOT_IMPLEMENTED.toString()); | 505 | this.setAudioGain(); |
506 | } | ||
507 | |||
508 | /** | ||
509 | * Sets the gain. | ||
510 | * | ||
511 | * FIXME: PulseAudio does not comply with the JSAPI | ||
512 | */ | ||