diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3d77d33..62087d1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2,9 +2,13 @@
RpyPlayer. Everlasting Summer
Действия
+ Предыдущая сцена
+ Следующая сцена
Навигация
+ - @string/to_prev_scene
+ - @string/to_next_scene
- @string/navigate
diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java
index bac15f8..b608a50 100644
--- a/src/com/annimon/everlastingsummer/Parser.java
+++ b/src/com/annimon/everlastingsummer/Parser.java
@@ -71,6 +71,39 @@ public final class Parser {
} while (!terminal);
}
+ public void prevScene() {
+ // Для перехода к предыдущей сцене, следует два раза найти токен SCENE,
+ // т.к. при первом поиске мы найдём лишь текущую.
+ final int currentScene = find(TokenType.SCENE, -1);
+ final int pos = findFrom(currentScene, TokenType.SCENE, -1);
+ // Если не нашли - перематываем на начало.
+ if (pos == position) position = 0;
+ else position = pos;
+ next();
+ }
+
+ public void nextScene() {
+ position = find(TokenType.SCENE, 1);
+ next();
+ }
+
+ private int find(TokenType which, int step) {
+ return findFrom(position, which, step);
+ }
+
+ private int findFrom(int from, TokenType which, int step) {
+ int pos = from;
+ while (true) {
+ pos += step;
+ if (pos < 0 || pos >= tokensCount) break;
+
+ final Token token = tokens.get(pos);
+ if (which == token.getType()) return pos;
+ }
+ // Возвращаем текущее значение во избежание лишних проверок.
+ return from;
+ }
+
private boolean statement() {
// http://www.renpy.org/wiki/renpy/doc/reference/The_Ren%27Py_Language#Grammar_Rules
final Token token = get(0);
diff --git a/src/com/annimon/everlastingsummer/ViewActivity.java b/src/com/annimon/everlastingsummer/ViewActivity.java
index d41351f..321d589 100644
--- a/src/com/annimon/everlastingsummer/ViewActivity.java
+++ b/src/com/annimon/everlastingsummer/ViewActivity.java
@@ -153,6 +153,12 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
private void onMenuItemSelected(int item) {
switch (item) {
case 0:
+ Parser.getInstance().prevScene();
+ break;
+ case 1:
+ Parser.getInstance().nextScene();
+ break;
+ case 2:
Dialogs.with(getInstance()).showNavigate();
break;
}