Добавлена команда queue

This commit is contained in:
Victor 2015-05-03 13:33:24 +03:00
parent a426a6dc2c
commit d454d99d62
4 changed files with 66 additions and 0 deletions

View File

@ -28,6 +28,7 @@ public final class Lexer {
static {
KEYWORDS = new HashMap<String, TokenType>();
KEYWORDS.put("play", TokenType.PLAY);
KEYWORDS.put("queue", TokenType.QUEUE);
KEYWORDS.put("stop", TokenType.STOP);
KEYWORDS.put("music", TokenType.MUSIC);
KEYWORDS.put("ambience", TokenType.AMBIENCE);

View File

@ -146,6 +146,7 @@ public final class Parser {
if (match(token, TokenType.COMMAND)) return command();
if (match(token, TokenType.SCENE)) return scene();
if (match(token, TokenType.PLAY)) return play();
if (match(token, TokenType.QUEUE)) return queue();
if (match(token, TokenType.STOP)) return stop();
if (match(token, TokenType.SHOW)) return show();
@ -392,6 +393,24 @@ public final class Parser {
return false;
}
private boolean queue() {
if (match(TokenType.MUSIC)) return queueMusic();
if (match(TokenType.SOUND)) return queueSound();
return false;
}
private boolean queueMusic() {
final String name = consume(TokenType.TEXT).getText();
ViewActivity.getInstance().addMusicToQueue(name);
return false;
}
private boolean queueSound() {
final String name = consume(TokenType.TEXT).getText();
ViewActivity.getInstance().addSoundToQueue(name);
return false;
}
private boolean stop() {
if (match(TokenType.MUSIC)) {
final FadeInfo fade = matchFade();

View File

@ -25,6 +25,7 @@ public enum TokenType {
// ключевые слова
PLAY,
QUEUE,
STOP,
MUSIC,
AMBIENCE,

View File

@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.annimon.everlastingsummer.TouchGesture.TouchGestureType;
@ -50,6 +51,7 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
private FrameLayout container;
private TextView textview;
private MediaPlayer musicPlayer, soundPlayer;
private LinkedList<String> musicQueue, soundQueue;
private MapPlaces places;
private Characters characters;
@ -75,6 +77,9 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
container = (FrameLayout) findViewById(R.id.container);
textview = (TextView) findViewById(R.id.text);
musicQueue = new LinkedList<String>();
soundQueue = new LinkedList<String>();
background.setOnTouchListener(new TouchGesture(this, this));
spriteInContainer = new HashMap<String, ImageView>();
@ -367,10 +372,29 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
});
}
public void addMusicToQueue(String name) {
if ( (musicPlayer != null) && (musicPlayer.isPlaying()) ) {
// Если музыка играет, просто добавляем в очередь
musicQueue.addLast(name);
} else {
// Воспроизводим
music(name, NO_FADE);
}
}
public void addSoundToQueue(String name) {
if ( (soundPlayer != null) && (soundPlayer.isPlaying()) ) {
soundQueue.addLast(name);
} else {
sound(name, false, NO_FADE);
}
}
public void music(String name, FadeInfo fade) {
try {
stopMusic(fade);
musicPlayer = new MediaPlayer();
musicPlayer.setOnCompletionListener(musicCompleteListener);
musicPlayer.setDataSource( IOUtil.getFD(PathResolver.music(name)) );
musicPlayer.prepare();
musicPlayer.setVolume(1f, 1f);
@ -394,6 +418,7 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
try {
stopSound(fade);
soundPlayer = new MediaPlayer();
soundPlayer.setOnCompletionListener(soundCompleteListener);
soundPlayer.setDataSource( IOUtil.getFD(PathResolver.sound(name)) );
soundPlayer.prepare();
soundPlayer.setVolume(1f, 1f);
@ -475,4 +500,24 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
onMenuItemSelected(item);
}
};
private final MediaPlayer.OnCompletionListener musicCompleteListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (musicQueue.size() > 0) {
music(musicQueue.removeFirst(), NO_FADE);
}
}
};
private final MediaPlayer.OnCompletionListener soundCompleteListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (soundQueue.size() > 0) {
sound(soundQueue.removeFirst(), false, NO_FADE);
}
}
};
}