Добавлена команда queue
This commit is contained in:
parent
a426a6dc2c
commit
d454d99d62
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -25,6 +25,7 @@ public enum TokenType {
|
||||
|
||||
// ключевые слова
|
||||
PLAY,
|
||||
QUEUE,
|
||||
STOP,
|
||||
MUSIC,
|
||||
AMBIENCE,
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user