From e8f7ff45ebade9daee211108bc60c800feef64e4 Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 4 Apr 2015 15:09:43 +0300 Subject: [PATCH] Initial commit --- .gitignore | 9 + AndroidManifest.xml | 36 +++ ic_launcher-web.png | Bin 0 -> 101774 bytes proguard-project.txt | 20 ++ project.properties | 14 + res/drawable-hdpi/ic_launcher.png | Bin 0 -> 3088 bytes res/drawable-mdpi/ic_launcher.png | Bin 0 -> 1619 bytes res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 4917 bytes res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 10252 bytes res/layout/main.xml | 32 +++ res/values/strings.xml | 5 + .../annimon/everlastingsummer/FadeInfo.java | 45 +++ src/com/annimon/everlastingsummer/IOUtil.java | 49 ++++ src/com/annimon/everlastingsummer/Lexer.java | 190 +++++++++++++ .../everlastingsummer/MainActivity.java | 43 +++ src/com/annimon/everlastingsummer/Parser.java | 262 +++++++++++++++++ .../everlastingsummer/PathResolver.java | 61 ++++ src/com/annimon/everlastingsummer/Token.java | 28 ++ .../annimon/everlastingsummer/TokenType.java | 56 ++++ .../everlastingsummer/ViewActivity.java | 265 ++++++++++++++++++ 20 files changed, 1115 insertions(+) create mode 100644 .gitignore create mode 100644 AndroidManifest.xml create mode 100644 ic_launcher-web.png create mode 100644 proguard-project.txt create mode 100644 project.properties create mode 100644 res/drawable-hdpi/ic_launcher.png create mode 100644 res/drawable-mdpi/ic_launcher.png create mode 100644 res/drawable-xhdpi/ic_launcher.png create mode 100644 res/drawable-xxhdpi/ic_launcher.png create mode 100644 res/layout/main.xml create mode 100644 res/values/strings.xml create mode 100644 src/com/annimon/everlastingsummer/FadeInfo.java create mode 100644 src/com/annimon/everlastingsummer/IOUtil.java create mode 100644 src/com/annimon/everlastingsummer/Lexer.java create mode 100644 src/com/annimon/everlastingsummer/MainActivity.java create mode 100644 src/com/annimon/everlastingsummer/Parser.java create mode 100644 src/com/annimon/everlastingsummer/PathResolver.java create mode 100644 src/com/annimon/everlastingsummer/Token.java create mode 100644 src/com/annimon/everlastingsummer/TokenType.java create mode 100644 src/com/annimon/everlastingsummer/ViewActivity.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ab6ae7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.classpath +.cproject +.project +.settings +bin/ +gen/ +obj/ +tmp/ +proguard/ \ No newline at end of file diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..5e46a1a --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ic_launcher-web.png b/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..03c95372196d7bc53716002bef9a08cb7b26c455 GIT binary patch literal 101774 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%0A@;gP7gqCq?Lpg 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 literal 0 HcmV?d00001 diff --git a/proguard-project.txt b/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..4ab1256 --- /dev/null +++ b/project.properties @@ -0,0 +1,14 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-19 diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2a81b09eb7d696f9130c75b00acbee352bfd5468 GIT binary patch literal 3088 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 literal 0 HcmV?d00001 diff --git a/res/layout/main.xml b/res/layout/main.xml new file mode 100644 index 0000000..7e203c9 --- /dev/null +++ b/res/layout/main.xml @@ -0,0 +1,32 @@ + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..cbd84ae --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,5 @@ + + + Everlasting Summer RpyPlayer + + diff --git a/src/com/annimon/everlastingsummer/FadeInfo.java b/src/com/annimon/everlastingsummer/FadeInfo.java new file mode 100644 index 0000000..85d34c6 --- /dev/null +++ b/src/com/annimon/everlastingsummer/FadeInfo.java @@ -0,0 +1,45 @@ +package com.annimon.everlastingsummer; + +/** + * Информация о плавном переходе состояния воспроизведения. + * @author aNNiMON + */ +public final class FadeInfo { + + private boolean in, out; + private double duration; + + public FadeInfo() { + this(false, false, 0); + } + + public FadeInfo(boolean in, boolean out, double duration) { + this.in = in; + this.out = out; + this.duration = duration; + } + + public boolean isIn() { + return in; + } + + public void setIn(boolean in) { + this.in = in; + } + + public boolean isOut() { + return out; + } + + public void setOut(boolean out) { + this.out = out; + } + + public double getDuration() { + return duration; + } + + public void setDuration(double duration) { + this.duration = duration; + } +} diff --git a/src/com/annimon/everlastingsummer/IOUtil.java b/src/com/annimon/everlastingsummer/IOUtil.java new file mode 100644 index 0000000..52fd916 --- /dev/null +++ b/src/com/annimon/everlastingsummer/IOUtil.java @@ -0,0 +1,49 @@ +package com.annimon.everlastingsummer; + +import java.io.BufferedReader; +import java.io.FileDescriptor; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Environment; + +/** + * Класс для работы с файловой системой. + * @author aNNiMON + */ +public final class IOUtil { + + private static String SDCARD = Environment.getExternalStorageDirectory().getPath(); + private static String ES = SDCARD + "/everlastingsummer/"; + + public static Bitmap readBitmap(String file) throws IOException { + final InputStream is = open(file); + final Bitmap result = BitmapFactory.decodeStream(is); + is.close(); + return result; + } + + public static FileDescriptor getFD(String file) throws IOException { + // TODO: is = ...; result = ..getFD; is.close; return result + return new FileInputStream(ES + file).getFD(); + } + + public static InputStream open(String file) throws IOException { + return new FileInputStream(ES + file); + } + + public static String readContents(InputStream is) throws IOException { + final StringBuilder sb = new StringBuilder(); + final BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String line; + while ( (line = reader.readLine()) != null ) { + sb.append(line); + sb.append("\n"); + } + reader.close(); + return sb.toString(); + } +} diff --git a/src/com/annimon/everlastingsummer/Lexer.java b/src/com/annimon/everlastingsummer/Lexer.java new file mode 100644 index 0000000..dee9bc0 --- /dev/null +++ b/src/com/annimon/everlastingsummer/Lexer.java @@ -0,0 +1,190 @@ +package com.annimon.everlastingsummer; + +import java.util.LinkedList; +import java.util.List; + +/** + * @author aNNiMON + */ +public final class Lexer { + + public static List tokenize(String input) { + return new Lexer().process(input).getTokens(); + } + + private final List tokens; + private final StringBuilder buffer; + + private static final String OPERATOR_CHARS = "=+-()[]$"; + private static final TokenType[] OPERATOR_TYPES = new TokenType[] { + TokenType.EQ, + TokenType.PLUS, TokenType.MINUS, + TokenType.LPAREN, TokenType.RPAREN, TokenType.LBRACKET, TokenType.RBRACKET, + TokenType.COMMAND + }; + + private static final String[] KEYWORDS = { + "play", "stop", + "music", "ambience", "sound", "sound_loop", + "fadein", "fadeout", + + "scene", "anim", "bg", "cg", + "at", + "window", "hide", "show", + "with", + "return", + + "renpy.pause", "persistent.sprite_time", + "prolog_time", "day_time", "sunset_time", "night_time" + }; + private static final TokenType[] KEYWORD_TYPES = new TokenType[] { + TokenType.PLAY, TokenType.STOP, + TokenType.MUSIC, TokenType.AMBIENCE, TokenType.SOUND, TokenType.SOUNDLOOP, + TokenType.FADEIN, TokenType.FADEOUT, + + TokenType.SCENE, TokenType.ANIM, TokenType.BG, TokenType.CG, + TokenType.AT, + TokenType.WINDOW, TokenType.HIDE, TokenType.SHOW, + TokenType.WITH, + TokenType.RETURN, + + TokenType.RENPY_PAUSE, TokenType.PERSISTENT_SPRITE_TIME, + TokenType.PROLOG_TIME, TokenType.DAY_TIME, TokenType.SUNSET_TIME, TokenType.NIGHT_TIME + }; + + private TokenizeState state; + private int pos; + + private enum TokenizeState { + DEFAULT, NUMBER, OPERATOR, WORD, TEXT, COMMENT + } + + private Lexer() { + tokens = new LinkedList(); + buffer = new StringBuilder(); + state = TokenizeState.DEFAULT; + } + + public List getTokens() { + return tokens; + } + + public Lexer process(String input) { + final int length = input.length(); + for (pos = 0; pos < length; pos++) { + tokenize(input.charAt(pos)); + } + tokenize('\0');// EOF + addToken(TokenType.EOF, false); + return this; + } + + private void tokenize(char ch) { + switch (state) { + case DEFAULT: tokenizeDefault(ch); break; + case WORD: tokenizeWord(ch); break; + case NUMBER: tokenizeNumber(ch); break; + case OPERATOR: tokenizeOperator(ch); break; + case TEXT: tokenizeText(ch); break; + case COMMENT: tokenizeComment(ch); break; + } + } + + private void tokenizeDefault(char ch) { + if (Character.isLetter(ch)) { + // Слово (ключевое слово или команда) + buffer.append(ch); + state = TokenizeState.WORD; + } else if (Character.isDigit(ch)) { + // Число + buffer.append(ch); + state = TokenizeState.NUMBER; + } else if (ch == '"') { + // Текст в "кавычках" + state = TokenizeState.TEXT; + } else if (ch == '#') { + clearBuffer(); + state = TokenizeState.COMMENT; + } else { + // Операторы и спецсимволы + tokenizeOperator(ch); + } + } + + private void tokenizeWord(char ch) { + if (ch == ':') { + addToken(TokenType.LABEL, false); + return; + } + if (Character.isLetterOrDigit(ch) || (ch == '_') || (ch == '.')) { + buffer.append(ch); + } else { + final String word = buffer.toString(); + for (int i = 0; i < KEYWORDS.length; i++) { + if (KEYWORDS[i].equalsIgnoreCase(word)) { + addToken(KEYWORD_TYPES[i]); + return; + } + } + addToken(TokenType.WORD); + } + } + + private void tokenizeNumber(char ch) { + // Целое или вещественное число. + if (ch == '.') { + // Пропускаем десятичные точки, если они уже были в числе. + if (buffer.indexOf(".") == -1) buffer.append(ch); + } else if (Character.isDigit(ch)) { + buffer.append(ch); + } else { + addToken(TokenType.NUMBER); + } + } + + private void tokenizeOperator(char ch) { + final int index = OPERATOR_CHARS.indexOf(ch); + if (index != -1) { + addToken(OPERATOR_TYPES[index], false); + } + } + + private void tokenizeText(char ch) { + if (ch == '"') { + final int len = buffer.length(); + // Добавляем токен, если не было экранирования символа кавычки. + if (len == 0 || + ( (len > 0) && (buffer.charAt(len - 1) != '\\') )) { + addToken(TokenType.TEXT, false); + return; + } + // Экранируем символ кавычки. + if (len > 0) { + buffer.setCharAt(len - 1, '\"'); + return; + } + } + buffer.append(ch); + } + + private void tokenizeComment(char ch) { + if (ch == '\n' || ch == '\r') { + state = TokenizeState.DEFAULT; + } + } + + private void addToken(TokenType type) { + addToken(type, true); + } + + private void addToken(TokenType type, boolean reprocessLastChar) { + tokens.add(new Token(buffer.toString(), type)); + clearBuffer(); + if (reprocessLastChar) pos--; + state = TokenizeState.DEFAULT; + } + + private void clearBuffer() { + buffer.setLength(0); + } +} diff --git a/src/com/annimon/everlastingsummer/MainActivity.java b/src/com/annimon/everlastingsummer/MainActivity.java new file mode 100644 index 0000000..424c7b4 --- /dev/null +++ b/src/com/annimon/everlastingsummer/MainActivity.java @@ -0,0 +1,43 @@ +package com.annimon.everlastingsummer; + +import java.io.IOException; +import android.app.ListActivity; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Toast; + +/** + * Экран выбора сценариев из папки assets. + * @author aNNiMON + */ +public final class MainActivity extends ListActivity { + + private String[] scripts; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + try { + scripts = getAssets().list(PathResolver.SCRIPT_ASSETS); + } catch (IOException ioe) { + scripts = null; + } + if (scripts == null || scripts.length == 0) { + Toast.makeText(this, "Нет скриптов в папке " + PathResolver.SCRIPT_ASSETS, + Toast.LENGTH_LONG).show(); + finish(); + } + setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, scripts)); + } + + @Override + protected void onListItemClick(ListView l, View v, int index, long id) { + final Intent intent = new Intent(this, ViewActivity.class); + intent.putExtra(ViewActivity.EXTRA_NAME, scripts[index]); + startActivity(intent); + } +} diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java new file mode 100644 index 0000000..6c2b5c8 --- /dev/null +++ b/src/com/annimon/everlastingsummer/Parser.java @@ -0,0 +1,262 @@ +package com.annimon.everlastingsummer; + +import java.util.List; +import android.text.TextUtils; +import android.util.Log; + +/** + * @author aNNiMON + */ +public final class Parser { + + private static final Token EOF = new Token("", TokenType.EOF); + + private static Parser instance; + + public static Parser parse(List tokens) { + instance = new Parser(tokens); + return instance; + } + + public static Parser getInstance() { + return instance; + } + + + private final List tokens; + private int position; + + public Parser(List tokens) { + this.tokens = tokens; + position = 0; + } + + public void next() { + // Команды разделяются на терминальные и нетерминальные. + // Нетерминальные подготавливают сцену к выводу. + // Терминальные выводят всё на экран и ожидают следующего вызова. + boolean terminal = false; + int counter = 0; + do { + try { + terminal = statement(); + } catch (RuntimeException re) { + Log.e("Parser", re.getMessage(), re); + } + // антизацикливание + counter++; + if (counter >= 1000) { + position++; + counter = 0; + } + } while (!terminal); + } + + private boolean statement() { + // http://www.renpy.org/wiki/renpy/doc/reference/The_Ren%27Py_Language#Grammar_Rules + final Token token = get(0); + if (match(token, TokenType.COMMAND)) return command(); + if (match(token, TokenType.SCENE)) return scene(); + if (match(token, TokenType.PLAY)) return play(); + if (match(token, TokenType.STOP)) return stop(); + if (match(token, TokenType.SHOW)) return show(); + + // Текст с именем автора реплики. + if (lookMatch(1, TokenType.TEXT) && match(token, TokenType.WORD)) { + final String whoid = token.getText(); + ViewActivity.getInstance().text(whoid, consume(TokenType.TEXT).getText()); + return true; + } + + // Обычный текст. + if (match(token, TokenType.TEXT)) { + ViewActivity.getInstance().text(token.getText()); + return true; + } + + if (match(token, TokenType.RETURN) || match(token, TokenType.EOF)) { + ViewActivity.getInstance().finish(); + return true; + } + + if (match(token, TokenType.WINDOW)) { + if (match(TokenType.SHOW)) + ViewActivity.getInstance().windowShow(); + else if (match(TokenType.HIDE)) + ViewActivity.getInstance().windowHide(); + return false; + } + + if (TextUtils.isEmpty(matchWithEffect())) return false; + + position++; + return false; + } + + /** + * Парсинг команд на языке Python. Начинаются на $. + * Поддерживается только самое нужное, весь питон я вам не интерпретирую. + */ + private boolean command() { + final Token token = get(0); + + if (match(token, TokenType.RENPY_PAUSE)) { + consume(TokenType.LPAREN); + final double pause = consumeDouble(); + ViewActivity.getInstance().pause((int)(1000 * pause)); + consume(TokenType.RPAREN); + return true; + } + + if (match(token, TokenType.PERSISTENT_SPRITE_TIME)) { + consume(TokenType.EQ); + consume(TokenType.TEXT); + return false; + } + + if (match(token, TokenType.PROLOG_TIME) || + match(token, TokenType.DAY_TIME) || + match(token, TokenType.SUNSET_TIME) || + match(token, TokenType.NIGHT_TIME)) { + consume(TokenType.LPAREN); + consume(TokenType.RPAREN); + return false; + } + + return false; + } + + private boolean scene() { + String type; + if (match(TokenType.BG)) type = "bg"; + else if (match(TokenType.CG)) type = "cg"; + else if (match(TokenType.ANIM)) type = "anim"; + else type = ""; + + final String name = consume(TokenType.WORD).getText(); + final String effect = matchWithEffect(); + ViewActivity.getInstance().background(type, name, effect); + return false; + } + + private boolean show() { + final String whoid = consume(TokenType.WORD).getText(); + final String emotion = lookMatch(0, TokenType.WORD) ? consume(TokenType.WORD).getText() : ""; + final String cloth = lookMatch(0, TokenType.WORD) ? consume(TokenType.WORD).getText() : ""; + final String distance = lookMatch(0, TokenType.WORD) ? consume(TokenType.WORD).getText() : ""; + // Положение (left, cleft, ...) + String position = ""; + if (match(TokenType.AT)) { + position = consume(TokenType.WORD).getText(); + } + matchWithEffect(); + ViewActivity.getInstance().sprite(whoid, emotion, cloth, distance, position); + return false; + } + + private boolean play() { + if (match(TokenType.MUSIC)) return playMusic(); + if (match(TokenType.AMBIENCE)) return playAmbience(); + if (lookMatch(0, TokenType.SOUND) || lookMatch(0, TokenType.SOUNDLOOP)) { + return playSound(); + } + return false; + } + + private boolean playMusic() { + consume(TokenType.WORD); + consume(TokenType.LBRACKET); + final String name = consume(TokenType.TEXT).getText(); + consume(TokenType.RBRACKET); + + final FadeInfo fade = matchFade(); + ViewActivity.getInstance().music(name, fade); + return false; + } + + private boolean playSound() { + boolean loop = false; + if (match(TokenType.SOUND)) loop = false; + else if (match(TokenType.SOUNDLOOP)) loop = true; + + final String name = consume(TokenType.WORD).getText(); + final FadeInfo fade = matchFade(); + ViewActivity.getInstance().sound(name, loop, fade); + return false; + } + + private boolean playAmbience() { + // Ambient не реализован, но парсится. + final String name = consume(TokenType.WORD).getText(); + final FadeInfo fade = matchFade(); + // ViewActivity.getInstance().sound(name, loop, fade); + return false; + } + + private boolean stop() { + if (match(TokenType.MUSIC)) { + final FadeInfo fade = matchFade(); + ViewActivity.getInstance().stopMusic(fade); + } + if (match(TokenType.SOUND) || match(TokenType.SOUNDLOOP)) { + final FadeInfo fade = matchFade(); + ViewActivity.getInstance().stopSound(fade); + } + if (match(TokenType.AMBIENCE)) { + final FadeInfo fade = matchFade(); + // ViewActivity.getInstance().stopMusic(fade); + } + return false; + } + + + private double consumeDouble() { + return Double.parseDouble(consume(TokenType.NUMBER).getText()); + } + + private FadeInfo matchFade() { + final FadeInfo result = new FadeInfo(); + if (match(TokenType.FADEIN)) { + result.setIn(true); + result.setDuration(consumeDouble()); + } else if (match(TokenType.FADEOUT)) { + result.setOut(true); + result.setDuration(consumeDouble()); + } + return result; + } + + private String matchWithEffect() { + if (match(TokenType.WITH)) { + return consume(TokenType.WORD).getText(); + } + return ""; + } + + + private boolean match(TokenType type) { + if (get(0).getType() != type) return false; + position++; + return true; + } + + private boolean match(Token token, TokenType type) { + if (type != token.getType()) return false; + position++; + return true; + } + + private Token consume(TokenType type) { + if (get(0).getType() != type) throw new RuntimeException("Ожидался токен " + type + "."); + return tokens.get(position++); + } + + private boolean lookMatch(int pos, TokenType type) { + return (type == get(pos).getType()); + } + + private Token get(int offset) { + if (position + offset >= tokens.size()) return EOF; + return tokens.get(position + offset); + } +} diff --git a/src/com/annimon/everlastingsummer/PathResolver.java b/src/com/annimon/everlastingsummer/PathResolver.java new file mode 100644 index 0000000..5db80ef --- /dev/null +++ b/src/com/annimon/everlastingsummer/PathResolver.java @@ -0,0 +1,61 @@ +package com.annimon.everlastingsummer; + +import java.util.Locale; +import android.text.TextUtils; + +/** + * Корректировщик путей к ресурсам. + * @author aNNiMON + */ +public final class PathResolver { + + public static final String SCRIPT_ASSETS = "scripts"; + private static final String SPRITE = "sprites/"; + private static final String MUSIC = "music/"; + private static final String SOUND = "sfx/"; + + private static final String PNG = ".png"; + private static final String JPG = ".jpg"; + private static final String OGG = ".ogg"; + + public static String script(String name) { + return SCRIPT_ASSETS + "/" + name; + } + + public static String sprite(String whoid, String emotion, String cloth, String distance) { + final StringBuilder sb = new StringBuilder(); + sb.append(SPRITE); + sb.append(TextUtils.isEmpty(distance) ? "normal" : distance).append('/'); + sb.append(whoid.toLowerCase(Locale.ENGLISH)).append('/'); + sb.append(emotion); + sb.append(cloth); + sb.append(PNG); + return sb.toString(); + } + + public static String background(String type, String name) { + final StringBuilder sb = new StringBuilder(); + sb.append(type.toLowerCase(Locale.ENGLISH)).append('/'); + sb.append(name); + sb.append(JPG); + return sb.toString(); + } + + public static String music(String name) { + final StringBuilder sb = new StringBuilder(); + sb.append(MUSIC); + sb.append(name); + sb.append(OGG); + return sb.toString(); + } + + public static String sound(String name) { + final StringBuilder sb = new StringBuilder(); + sb.append(SOUND); + if (name.startsWith("sfx_")) sb.append(name.substring(4)); + else sb.append(name); + sb.append(OGG); + return sb.toString(); + } + +} diff --git a/src/com/annimon/everlastingsummer/Token.java b/src/com/annimon/everlastingsummer/Token.java new file mode 100644 index 0000000..3eb217e --- /dev/null +++ b/src/com/annimon/everlastingsummer/Token.java @@ -0,0 +1,28 @@ +package com.annimon.everlastingsummer; + +/** + * @author aNNiMON + */ +public final class Token { + + private final String text; + private final TokenType type; + + public Token(String text, TokenType type) { + this.text = text; + this.type = type; + } + + public String getText() { + return text; + } + + public TokenType getType() { + return type; + } + + @Override + public String toString() { + return type.name() + " " + text; + } +} diff --git a/src/com/annimon/everlastingsummer/TokenType.java b/src/com/annimon/everlastingsummer/TokenType.java new file mode 100644 index 0000000..5e685f2 --- /dev/null +++ b/src/com/annimon/everlastingsummer/TokenType.java @@ -0,0 +1,56 @@ +package com.annimon.everlastingsummer; + +/** + * @author aNNiMON + */ +public enum TokenType { + + COMMAND, // начинается с $ + LABEL, // заканчивается на : + WORD, + TEXT, + NUMBER, + + // операторы и спецсимволы + EQ, + PLUS, + MINUS, + LPAREN, + RPAREN, + LBRACKET, + RBRACKET, + + // ключевые слова + PLAY, + STOP, + MUSIC, + AMBIENCE, + SOUND, + SOUNDLOOP, + FADEIN, + FADEOUT, + + SCENE, + ANIM, + BG, + CG, + + WINDOW, + HIDE, + SHOW, + + AT, + WITH, + + RETURN, + + // команды + RENPY_PAUSE, + PERSISTENT_SPRITE_TIME, + PROLOG_TIME, + DAY_TIME, + SUNSET_TIME, + NIGHT_TIME, + + EOF +} diff --git a/src/com/annimon/everlastingsummer/ViewActivity.java b/src/com/annimon/everlastingsummer/ViewActivity.java new file mode 100644 index 0000000..046cd89 --- /dev/null +++ b/src/com/annimon/everlastingsummer/ViewActivity.java @@ -0,0 +1,265 @@ +package com.annimon.everlastingsummer; + +import java.util.HashMap; +import java.util.Map; +import android.app.Activity; +import android.media.MediaPlayer; +import android.os.Bundle; +import android.text.*; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +/** + * Экран воспроизведения rpy-сценария. + * @author aNNiMON + */ +public final class ViewActivity extends Activity { + + public static final String EXTRA_NAME = "name"; + private static final FadeInfo NO_FADE = new FadeInfo(false, false, 0); + private static ViewActivity instance; + + public static ViewActivity getInstance() { + return instance; + } + + private ImageView background; + private FrameLayout container; + private TextView textview; + private MediaPlayer musicPlayer, soundPlayer; + + private Map names; + private Map spriteInContainer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // Постоянная подсветка. + getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + setContentView(R.layout.main); + instance = this; + + background = (ImageView) findViewById(R.id.background); + container = (FrameLayout) findViewById(R.id.container); + textview = (TextView) findViewById(R.id.text); + + background.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Parser.getInstance().next(); + } + }); + + spriteInContainer = new HashMap(); + + // Маппинг <короткое_имя, имя/цвет> + names = new HashMap(); + // https://github.com/yakui-lover/eroge-dopil/blob/master/media.rpy#L365 + names.put("me", new Person("Семён", 0xFFE1DD7D)); + names.put("un", new Person("Лена", 0xFFB956FF)); // night 0xFFAA64D9, sunset: 0xFFB956FF, day: 0xFFB956FF, prolog: 0xFFB956FF + names.put("dv", new Person("Алиса", 0xFFFFAA00)); // night 0xFFD28B10, sunset: 0xFFFFAA00, day: 0xFFFFAA00, prolog: 0xFFFFAA00 + names.put("sl", new Person("Славя", 0xFFFFD200)); // night 0xFFD6B000, sunset: 0xFFFFD200, day: 0xFFFFD200, prolog: 0xFFFFD200 + names.put("us", new Person("Ульяна", 0xFFFF3200)); // night 0xFFEA3700, sunset: 0xFFFF3200, day: 0xFFFF3200, prolog: 0xFFFF3200 + names.put("mt", new Person("Ольга Дмитриевна", 0xFF00EA32)); // night 0xFF00B627, sunset: 0xFF00EA32, day: 0xFF00EA32, prolog: 0xFF00EA32 + names.put("cs", new Person("Виола", 0xFFA5A5FF)); // night 0xFF8686E6, sunset: 0xFFA5A5FF, day: 0xFFA5A5FF, prolog: 0xFFA5A5FF + names.put("mz", new Person("Женя", 0xFF4A86FF)); // night 0xFF5481DB, sunset: 0xFF72A0FF, day: 0xFF4A86FF, prolog: 0xFF4A86FF + names.put("mi", new Person("Мику", 0xFF00DEFF)); // night 0xFF00B4CF, sunset: 0xFF00FBFF, day: 0xFF00DEFF, prolog: 0xFF00DEFF + names.put("uv", new Person("Юля", 0xFF4EFF00)); // night 0xFF40D000, sunset: 0xFF4EFF00, day: 0xFF4EFF00, prolog: 0xFF4EFF00 + names.put("lk", new Person("Луркмор-кун", 0xFFFF8080)); + names.put("sh", new Person("Шурик", 0xFFFFF226)); // night 0xFFCDC212, sunset: 0xFFFFF226, day: 0xFFFFF226, prolog: 0xFFFFF226 + names.put("el", new Person("Электроник", 0xFFFFFF00)); // night 0xFFCDCD00, sunset: 0xFFFFFF00, day: 0xFFFFFF00, prolog: 0xFFFFFF00 + names.put("pi", new Person("Пионер", 0xFFE60101)); // night 0xFFE60000, sunset: 0xFFE60000, day: 0xFFE60101, prolog: 0xFFE60000 + + names.put("dy", new Person("Голос из динамика", 0xFFC0C0C0)); + names.put("voice", new Person("Голос", 0xFFE1DD7D)); + names.put("voices", new Person("Голоса", 0xFFC0C0C0)); + names.put("message", new Person("Сообщение", 0xFFC0C0C0)); + names.put("all", new Person("Пионеры", 0xFFED4444)); // night 0xFFE33A3A, sunset: 0xFFE33A3A, day: 0xFFED4444, prolog: 0xFFE33A3A + names.put("kids", new Person("Малышня", 0xFFEB7883)); + names.put("dreamgirl", new Person("...", 0xFFC0C0C0)); + names.put("bush", new Person("Голос", 0xFFC0C0C0)); + names.put("FIXME_voice", new Person("Голос", 0xFFC0C0C0)); + names.put("odn", new Person("Одногруппник", 0xFFC0C0C0)); + names.put("mt_voice", new Person("Голос", 0xFF00EA32)); // night 0xFF00B627, sunset: 0xFF00EA32, day: 0xFF00EA32, prolog: 0xFF00EA32 + + final String name = getIntent().getStringExtra(EXTRA_NAME); + final String scriptpath = PathResolver.script(name); + try { + Parser.parse(Lexer.tokenize( IOUtil.readContents(getAssets().open(scriptpath)) )); + Parser.getInstance().next(); + } catch (Exception ex) { + Toast.makeText(this, "Ошибка при открытии файла " + scriptpath, Toast.LENGTH_LONG).show(); + finish(); + } + } + + @Override + protected void onPause() { + stopMusic(NO_FADE); + stopSound(NO_FADE); + super.onPause(); + } + + + public void windowShow() { + if (textview.getVisibility() != View.VISIBLE) + textview.setVisibility(View.VISIBLE); + } + + public void windowHide() { + if (textview.getVisibility() != View.INVISIBLE) + textview.setVisibility(View.INVISIBLE); + } + + public void background(String type, String name, String effect) { + spritesClear(); + if (name.equalsIgnoreCase("black")) background.setImageResource(android.R.color.black); + else if (name.equalsIgnoreCase("white")) background.setImageResource(android.R.color.white); + else { + try { + background.setImageBitmap(IOUtil.readBitmap(PathResolver.background(type, name))); + } catch (Exception ioe) { + background.setImageResource(android.R.color.black); + } + } + } + + public void spritesClear() { + container.removeAllViews(); + spriteInContainer.clear(); + } + + public void sprite(String whoid, String emotion, String cloth, String distance, String position) { + ImageView img; + if (spriteInContainer.containsKey(whoid)) { + img = spriteInContainer.get(whoid); + } else { + img = new ImageView(this); + spriteInContainer.put(whoid, img); + } + final String path = PathResolver.sprite(whoid, emotion, cloth, distance);; + try { + img.setImageBitmap(IOUtil.readBitmap(path)); + container.addView(img); + } catch (Exception ioe) {} + } + + public void pause(final long duration) { + text(""); + new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(duration); + } catch (InterruptedException e) { } + runOnUiThread(nextCommandRunnable); + } + }).start(); + } + + public void text(String text) { + if (TextUtils.isEmpty(text)) windowHide(); + else { + windowShow(); + textview.setText(formatString(text)); + } + } + + public void text(String whoid, String text) { + if (whoid.equalsIgnoreCase("th")) text("~ " + text + " ~"); + else if (!names.containsKey(whoid)) text(text); + else { + windowShow(); + final Person person = names.get(whoid); + final String who = person.name; + Spannable spannable = formatString(who + "\n" + text); + spannable.setSpan(new ForegroundColorSpan(person.color), 0, who.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + textview.setText(spannable); + } + } + + private Spannable formatString(String text) { + String edited = text.replace("{w}", ""); + final char[] codes = {'b','i','s','u'}; + boolean html = false; + for (int i = 0; i < codes.length; i++) { + final char ch = codes[i]; + if (edited.contains("{"+ch+"}")) { + edited = edited.replace("{"+ch+"}", "<"+ch+">"); + edited = edited.replace("{/"+ch+"}", ""); + html = true; + } + } + return new SpannableString(html ? Html.fromHtml(edited) : edited); + } + + public void music(String name, FadeInfo fade) { + try { + stopMusic(fade); + musicPlayer = new MediaPlayer(); + musicPlayer.setDataSource( IOUtil.getFD(PathResolver.music(name)) ); + musicPlayer.prepare(); + musicPlayer.setVolume(1f, 1f); + musicPlayer.setLooping(true); + musicPlayer.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void stopMusic(FadeInfo fade) { + if (musicPlayer == null) return; + if (musicPlayer.isPlaying()) { + musicPlayer.stop(); + musicPlayer.release(); + } + musicPlayer = null; + } + + public void sound(String name, boolean loop, FadeInfo fade) { + try { + stopSound(fade); + soundPlayer = new MediaPlayer(); + soundPlayer.setDataSource( IOUtil.getFD(PathResolver.sound(name)) ); + soundPlayer.prepare(); + soundPlayer.setVolume(1f, 1f); + soundPlayer.setLooping(loop); + soundPlayer.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void stopSound(FadeInfo fade) { + if (soundPlayer == null) return; + if (soundPlayer.isPlaying()) { + soundPlayer.stop(); + soundPlayer.release(); + } + soundPlayer = null; + } + + private final Runnable nextCommandRunnable = new Runnable() { + @Override + public void run() { + Parser.getInstance().next(); + } + }; + + private class Person { + String name; + int color; + Person(String fullName, int color) { + this.name = fullName; + this.color = color; + } + } +}