/**
* Copyright (C) 2013 Gundog Studios LLC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.godsandtowers.util;
import java.text.NumberFormat;
import android.content.res.Resources;
import com.godsandtowers.R;
import com.godsandtowers.achievements.Achievement;
import com.godsandtowers.achievements.UnlockAchievement;
import com.godsandtowers.sprites.BaseCreature;
import com.godsandtowers.sprites.BaseSpecial;
import com.godsandtowers.sprites.BaseTower;
import com.gundogstudios.modules.Modules;
import com.gundogstudios.util.FastMath;
public class ResourceUtilities {
private static final String NEW_LINE = "\n";
private static final String SPACER = ": ";
private static Resources resources;
private static NumberFormat formatter;
public static void init(Resources resources) {
ResourceUtilities.resources = resources;
formatter = NumberFormat.getInstance();
formatter.setMaximumFractionDigits(0);
}
public static String getAchievementInfo(Achievement achievement) {
if (achievement instanceof UnlockAchievement)
return getString("achievement_" + achievement.getName()) + " " + getString(achievement.getName());
else
return getString("achievement_" + achievement.getName());
}
public static int getAchievementIcon(Achievement achievement) {
return getIconID(achievement.getName());
}
public static String getName(BaseCreature creature) {
return getString(creature.getName());
}
public static String[] getNames(BaseCreature[] creatures) {
String[] names = new String[creatures.length];
for (int i = 0; i < names.length; i++) {
names[i] = getName(creatures[i]);
}
return names;
}
public static int getIconID(BaseCreature creature) {
return getIconID(creature.getName());
}
public static int[] getIconIDs(BaseCreature[] creatures) {
int[] ids = new int[creatures.length];
for (int i = 0; i < ids.length; i++) {
ids[i] = getIconID(creatures[i]);
}
return ids;
}
public static String getName(BaseTower tower) {
return getString(tower.getName());
}
public static String[] getNames(BaseTower[] towers) {
String[] names = new String[towers.length];
for (int i = 0; i < names.length; i++) {
names[i] = getName(towers[i]);
}
return names;
}
public static int getIconID(BaseTower tower) {
return getIconID(tower.getName());
}
public static int[] getIconIDs(BaseTower[] towers) {
int[] ids = new int[towers.length];
for (int i = 0; i < ids.length; i++) {
ids[i] = getIconID(towers[i]);
}
return ids;
}
public static int[] getIconIDs(String[] names) {
int[] ids = new int[names.length];
for (int i = 0; i < ids.length; i++) {
ids[i] = getIconID(names[i]);
}
return ids;
}
public static int getStringID(String name) {
return resources.getIdentifier(resources.getText(R.string.app_package) + ":string/" + name, null, null);
}
public static String getString(String name) {
int id = resources.getIdentifier(resources.getText(R.string.app_package) + ":string/" + name, null, null);
if (id == 0)
Modules.LOG.error("ResourceUtilities", name + " does not exists in getName");
return resources.getString(id);
}
public static int getIconID(String name) {
int id = resources.getIdentifier(resources.getText(R.string.app_package) + ":drawable/" + "icon_" + name, null,
null);
if (id == 0)
Modules.LOG.error("ResourceUtilities", name + " does not exists in getIconID");
return id;
}
public static String getInfo(BaseSpecial special) {
return getString(special.getName());
}
public static String getInfo(BaseCreature creature) {
StringBuilder builder = new StringBuilder();
append(R.string.stat_cost, creature.getCost(), builder);
append(R.string.stat_income, creature.getIncome(), builder);
append(R.string.stat_health, creature.getHealth(), builder);
append(R.string.stat_speed, creature.getSpeed() / 1000f, builder);
append(R.string.stat_defense, creature.getDefense(), builder);
append(R.string.stat_damage, creature.getDamage(), builder);
append(R.string.stat_attack_rate, creature.getAttackRate() / 1000f, builder);
append(R.string.stat_air, creature.isAir(), builder);
return builder.toString();
}
public static String getInfo(BaseTower tower) {
StringBuilder builder = new StringBuilder();
append(R.string.stat_cost, tower.getCost(), builder);
append(R.string.stat_damage, tower.getDamage(), builder);
append(R.string.stat_attack_range, tower.getAttackRange(), builder);
append(R.string.stat_attack_rate, tower.getAttackRate() / 1000f, builder);
append(R.string.stat_health, tower.getHealth(), builder);
append(R.string.stat_defense, tower.getDefense(), builder);
append(R.string.stat_ground, tower.attacksGround(), builder);
append(R.string.stat_air, tower.attacksAir(), builder);
return builder.toString();
}
private static void append(int id, boolean text, StringBuilder builder) {
builder.append(resources.getString(id));
builder.append(SPACER);
builder.append(text);
builder.append(NEW_LINE);
}
private static void append(int id, float text, StringBuilder builder) {
builder.append(resources.getString(id));
builder.append(SPACER);
builder.append(formatter.format(FastMath.ceil(text)));
builder.append(NEW_LINE);
}
}