Выделение класса для имён персонажей

This commit is contained in:
Victor 2015-04-18 15:46:41 +03:00
parent 5c1d1eb841
commit 17b0568710
3 changed files with 143 additions and 41 deletions

View File

@ -0,0 +1,68 @@
package com.annimon.everlastingsummer;
import java.util.HashMap;
import java.util.Map;
/**
* Работа с персонажами.
* @author aNNiMON
*/
public class Characters {
private static final int DEFAULT_COLOR = 0xFFC0C0C0;
/** Маппинг <короткое имя, полное имя/цвет> */
protected final Map<String, NameInfo> names;
public Characters() {
this.names = new HashMap<String, NameInfo>();
makeNamesUnknown();
}
public boolean contains(String shortName) {
return names.containsKey(shortName);
}
public NameInfo get(String shortName) {
return names.get(shortName);
}
public void setName(String shortName, String fullName) {
if (names.containsKey(shortName)) {
NameInfo info = names.get(shortName);
info.name = fullName;
} else {
names.put(shortName, new NameInfo(fullName));
}
}
public void setName(String shortName, String fullName, int color) {
if (names.containsKey(shortName)) {
NameInfo info = names.get(shortName);
info.name = fullName;
info.color = color;
} else {
names.put(shortName, new NameInfo(fullName, color));
}
}
public void makeNamesUnknown() {
names.clear();
}
public void makeNamesKnown() {
}
public static class NameInfo {
String name;
int color;
protected NameInfo(String fullName) {
this.name = fullName;
this.color = DEFAULT_COLOR;
}
protected NameInfo(String fullName, int color) {
this.name = fullName;
this.color = color;
}
}
}

View File

@ -0,0 +1,70 @@
package com.annimon.everlastingsummer;
/**
* Персонажи бесконечного лета.
* @author aNNiMON
*/
public final class CharactersES extends Characters {
@Override
public void makeNamesUnknown() {
super.makeNamesUnknown();
// https://github.com/yakui-lover/eroge-dopil/blob/master/media.rpy#L365
names.put("me", new NameInfo("Семён", 0xFFE1DD7D));
names.put("un", new NameInfo("Пионерка", 0xFFB956FF));
names.put("dv", new NameInfo("Пионерка", 0xFFFFAA00));
names.put("sl", new NameInfo("Пионерка", 0xFFFFD200));
names.put("us", new NameInfo("Пионерка", 0xFFFF3200));
names.put("mt", new NameInfo("Вожатая", 0xFF00EA32));
names.put("cs", new NameInfo("Медсестра", 0xFFA5A5FF));
names.put("mz", new NameInfo("Пионерка", 0xFF4A86FF));
names.put("mi", new NameInfo("Пионерка", 0xFF00DEFF));
names.put("uv", new NameInfo("Странная девочка", 0xFF4EFF00));
names.put("lk", new NameInfo("Луркмор-кун", 0xFFFF8080));
names.put("sh", new NameInfo("Пионер", 0xFFFFF226));
names.put("el", new NameInfo("Пионер", 0xFFFFFF00));
names.put("pi", new NameInfo("Пионер", 0xFFE60101));
names.put("dy", new NameInfo("Голос из динамика", 0xFFC0C0C0));
names.put("voice", new NameInfo("Голос", 0xFFE1DD7D));
names.put("voices", new NameInfo("Голоса", 0xFFC0C0C0));
names.put("message", new NameInfo("Сообщение", 0xFFC0C0C0));
names.put("all", new NameInfo("Пионеры", 0xFFED4444));
names.put("kids", new NameInfo("Малышня", 0xFFEB7883));
names.put("dreamgirl", new NameInfo("...", 0xFFC0C0C0));
names.put("bush", new NameInfo("Голос", 0xFFC0C0C0));
names.put("FIXME_voice", new NameInfo("Голос", 0xFFC0C0C0));
names.put("odn", new NameInfo("Одногруппник", 0xFFC0C0C0));
names.put("mt_voice", new NameInfo("Голос", 0xFF00EA32));
}
@Override
public void makeNamesKnown() {
super.makeNamesKnown();
setName("me", "Семён");
setName("un", "Лена");
setName("dv", "Алиса");
setName("sl", "Славя");
setName("us", "Ульяна");
setName("mt", "Ольга Дмитриевна");
setName("cs", "Виола");
setName("mz", "Женя");
setName("mi", "Мику");
setName("uv", "Юля");
setName("lk", "Луркмор-кун");
setName("sh", "Шурик");
setName("el", "Электроник");
setName("pi", "Пионер");
setName("dy", "Голос из динамика");
setName("voice", "Голос");
setName("voices", "Голоса");
setName("message", "Сообщение");
setName("all", "Пионеры");
setName("kids", "Малышня");
setName("dreamgirl", "...");
setName("bush", "Голос");
setName("FIXME_voice", "Голос");
setName("odn", "Одногруппник");
setName("mt_voice", "Голос");
}
}

View File

@ -42,7 +42,7 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
private TextView textview; private TextView textview;
private MediaPlayer musicPlayer, soundPlayer; private MediaPlayer musicPlayer, soundPlayer;
private Map<String, Person> names; private Characters characters;
private Map<String, ImageView> spriteInContainer; private Map<String, ImageView> spriteInContainer;
private DisplayMetrics displayMetrics; private DisplayMetrics displayMetrics;
@ -69,35 +69,8 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
spriteInContainer = new HashMap<String, ImageView>(); spriteInContainer = new HashMap<String, ImageView>();
// Маппинг <короткое_имя, имя/цвет> characters = new CharactersES();
names = new HashMap<String, Person>(); characters.makeNamesKnown();
// 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
String scriptpath = ""; String scriptpath = "";
final Intent intent = getIntent(); final Intent intent = getIntent();
@ -290,10 +263,10 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
public void text(String whoid, String text) { public void text(String whoid, String text) {
if (whoid.equalsIgnoreCase("th")) text("~ " + text + " ~"); if (whoid.equalsIgnoreCase("th")) text("~ " + text + " ~");
else if (!names.containsKey(whoid)) text(text); else if (!characters.contains(whoid)) text(text);
else { else {
windowShow(); windowShow();
final Person person = names.get(whoid); final Characters.NameInfo person = characters.get(whoid);
final String who = person.name; final String who = person.name;
Spannable spannable = formatString(who + "\n" + text); Spannable spannable = formatString(who + "\n" + text);
spannable.setSpan(new ForegroundColorSpan(person.color), 0, who.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannable.setSpan(new ForegroundColorSpan(person.color), 0, who.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
@ -392,13 +365,4 @@ public final class ViewActivity extends Activity implements TouchGesture.OnTouch
onMenuItemSelected(item); onMenuItemSelected(item);
} }
}; };
private class Person {
String name;
int color;
Person(String fullName, int color) {
this.name = fullName;
this.color = color;
}
}
} }