From 74a20ae795aa2f21b897cf21ef8dc431fa24467f Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 10 Apr 2015 23:39:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=BA=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B=D0=B4=D1=83?= =?UTF-8?q?=D1=89=D0=B5=D0=B9/=D1=81=D0=BB=D0=B5=D0=B4=D1=83=D1=8E=D1=89?= =?UTF-8?q?=D0=B5=D0=B9=20=D1=81=D1=86=D0=B5=D0=BD=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/values/strings.xml | 4 +++ src/com/annimon/everlastingsummer/Parser.java | 33 +++++++++++++++++++ .../everlastingsummer/ViewActivity.java | 6 ++++ 3 files changed, 43 insertions(+) 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; }