Добавлена команда queue
This commit is contained in:
parent
a426a6dc2c
commit
d454d99d62
@ -28,6 +28,7 @@ public final class Lexer {
|
|||||||
static {
|
static {
|
||||||
KEYWORDS = new HashMap<String, TokenType>();
|
KEYWORDS = new HashMap<String, TokenType>();
|
||||||
KEYWORDS.put("play", TokenType.PLAY);
|
KEYWORDS.put("play", TokenType.PLAY);
|
||||||
|
KEYWORDS.put("queue", TokenType.QUEUE);
|
||||||
KEYWORDS.put("stop", TokenType.STOP);
|
KEYWORDS.put("stop", TokenType.STOP);
|
||||||
KEYWORDS.put("music", TokenType.MUSIC);
|
KEYWORDS.put("music", TokenType.MUSIC);
|
||||||
KEYWORDS.put("ambience", TokenType.AMBIENCE);
|
KEYWORDS.put("ambience", TokenType.AMBIENCE);
|
||||||
|
@ -146,6 +146,7 @@ public final class Parser {
|
|||||||
if (match(token, TokenType.COMMAND)) return command();
|
if (match(token, TokenType.COMMAND)) return command();
|
||||||
if (match(token, TokenType.SCENE)) return scene();
|
if (match(token, TokenType.SCENE)) return scene();
|
||||||
if (match(token, TokenType.PLAY)) return play();
|
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.STOP)) return stop();
|
||||||
if (match(token, TokenType.SHOW)) return show();
|
if (match(token, TokenType.SHOW)) return show();
|
||||||
|
|
||||||
@ -392,6 +393,24 @@ public final class Parser {
|
|||||||
return false;
|
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() {
|
private boolean stop() {
|
||||||
if (match(TokenType.MUSIC)) {
|
if (match(TokenType.MUSIC)) {
|
||||||
final FadeInfo fade = matchFade();
|
final FadeInfo fade = matchFade();
|
||||||
|
@ -25,6 +25,7 @@ public enum TokenType {
|
|||||||
|
|
||||||
// ключевые слова
|
// ключевые слова
|
||||||
PLAY,
|
PLAY,
|
||||||
|
QUEUE,
|
||||||
STOP,
|
STOP,
|
||||||
MUSIC,
|
MUSIC,
|
||||||
AMBIENCE,
|
AMBIENCE,
|
||||||
|
@ -3,6 +3,7 @@ package com.annimon.everlastingsummer;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import com.annimon.everlastingsummer.TouchGesture.TouchGestureType;
|
import com.annimon.everlastingsummer.TouchGesture.TouchGestureType;
|
||||||
@ -50,6 +51,7 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
|
|||||||
private FrameLayout container;
|
private FrameLayout container;
|
||||||
private TextView textview;
|
private TextView textview;
|
||||||
private MediaPlayer musicPlayer, soundPlayer;
|
private MediaPlayer musicPlayer, soundPlayer;
|
||||||
|
private LinkedList<String> musicQueue, soundQueue;
|
||||||
|
|
||||||
private MapPlaces places;
|
private MapPlaces places;
|
||||||
private Characters characters;
|
private Characters characters;
|
||||||
@ -75,6 +77,9 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
|
|||||||
container = (FrameLayout) findViewById(R.id.container);
|
container = (FrameLayout) findViewById(R.id.container);
|
||||||
textview = (TextView) findViewById(R.id.text);
|
textview = (TextView) findViewById(R.id.text);
|
||||||
|
|
||||||
|
musicQueue = new LinkedList<String>();
|
||||||
|
soundQueue = new LinkedList<String>();
|
||||||
|
|
||||||
background.setOnTouchListener(new TouchGesture(this, this));
|
background.setOnTouchListener(new TouchGesture(this, this));
|
||||||
|
|
||||||
spriteInContainer = new HashMap<String, ImageView>();
|
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) {
|
public void music(String name, FadeInfo fade) {
|
||||||
try {
|
try {
|
||||||
stopMusic(fade);
|
stopMusic(fade);
|
||||||
musicPlayer = new MediaPlayer();
|
musicPlayer = new MediaPlayer();
|
||||||
|
musicPlayer.setOnCompletionListener(musicCompleteListener);
|
||||||
musicPlayer.setDataSource( IOUtil.getFD(PathResolver.music(name)) );
|
musicPlayer.setDataSource( IOUtil.getFD(PathResolver.music(name)) );
|
||||||
musicPlayer.prepare();
|
musicPlayer.prepare();
|
||||||
musicPlayer.setVolume(1f, 1f);
|
musicPlayer.setVolume(1f, 1f);
|
||||||
@ -394,6 +418,7 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
|
|||||||
try {
|
try {
|
||||||
stopSound(fade);
|
stopSound(fade);
|
||||||
soundPlayer = new MediaPlayer();
|
soundPlayer = new MediaPlayer();
|
||||||
|
soundPlayer.setOnCompletionListener(soundCompleteListener);
|
||||||
soundPlayer.setDataSource( IOUtil.getFD(PathResolver.sound(name)) );
|
soundPlayer.setDataSource( IOUtil.getFD(PathResolver.sound(name)) );
|
||||||
soundPlayer.prepare();
|
soundPlayer.prepare();
|
||||||
soundPlayer.setVolume(1f, 1f);
|
soundPlayer.setVolume(1f, 1f);
|
||||||
@ -475,4 +500,24 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
|
|||||||
onMenuItemSelected(item);
|
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