Добавлена возможность перехода к предыдущей/следующей сцене
This commit is contained in:
parent
6a726c08fc
commit
74a20ae795
@ -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>
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user