Добавлена возможность перехода к предыдущей/следующей сцене

This commit is contained in:
Victor 2015-04-10 23:39:51 +03:00
parent 6a726c08fc
commit 74a20ae795
3 changed files with 43 additions and 0 deletions

View File

@ -2,9 +2,13 @@
<string name="app_name">RpyPlayer. Everlasting Summer</string> <string name="app_name">RpyPlayer. Everlasting Summer</string>
<string name="actions">Действия</string> <string name="actions">Действия</string>
<string name="to_prev_scene">Предыдущая сцена</string>
<string name="to_next_scene">Следующая сцена</string>
<string name="navigate">Навигация</string> <string name="navigate">Навигация</string>
<string-array name="menu_items"> <string-array name="menu_items">
<item>@string/to_prev_scene</item>
<item>@string/to_next_scene</item>
<item>@string/navigate</item> <item>@string/navigate</item>
</string-array> </string-array>

View File

@ -71,6 +71,39 @@ public final class Parser {
} while (!terminal); } 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() { private boolean statement() {
// http://www.renpy.org/wiki/renpy/doc/reference/The_Ren%27Py_Language#Grammar_Rules // http://www.renpy.org/wiki/renpy/doc/reference/The_Ren%27Py_Language#Grammar_Rules
final Token token = get(0); final Token token = get(0);

View File

@ -153,6 +153,12 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
private void onMenuItemSelected(int item) { private void onMenuItemSelected(int item) {
switch (item) { switch (item) {
case 0: case 0:
Parser.getInstance().prevScene();
break;
case 1:
Parser.getInstance().nextScene();
break;
case 2:
Dialogs.with(getInstance()).showNavigate(); Dialogs.with(getInstance()).showNavigate();
break; break;
} }