package net.fe.unit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import org.newdawn.slick.util.ResourceLoader;
public class UnitFactory {
private static HashMap<String, Unit> units = new HashMap<String, Unit>();
public static void loadUnits() {
Scanner in = new Scanner(ResourceLoader.getResourceAsStream("res/stats.txt"));
while(in.hasNextLine()){
String line = in.nextLine();
if(line.equals("") || line.startsWith("#")) continue;
String[] args = line.split("\\s+");
String name = args[0];
Class clazz = Class.createClass(args[1]);
int lv = Integer.parseInt(args[2]);
float hpBase = Integer.parseInt(args[3]);
float strBase = Integer.parseInt(args[4]);
float magBase = Integer.parseInt(args[5]);
float sklBase = Integer.parseInt(args[6]);
float spdBase = Integer.parseInt(args[7]);
float lckBase = Integer.parseInt(args[8]);
float defBase = Integer.parseInt(args[9]);
float resBase = Integer.parseInt(args[10]);
int con = Integer.parseInt(args[11]);
int mov = Integer.parseInt(args[12]);
int hpGrowth = Integer.parseInt(args[13]);
int strGrowth = Integer.parseInt(args[14]);
int magGrowth = Integer.parseInt(args[15]);
int sklGrowth = Integer.parseInt(args[16]);
int spdGrowth = Integer.parseInt(args[17]);
int lckGrowth = Integer.parseInt(args[18]);
int defGrowth = Integer.parseInt(args[19]);
int resGrowth = Integer.parseInt(args[20]);
char gender = args[21].charAt(0);
for(int i = lv; i < 20; i++){
hpBase += hpGrowth/100.0f;
strBase += strGrowth/100.0f;
magBase += magGrowth/100.0f;
sklBase += sklGrowth/100.0f;
spdBase += spdGrowth/100.0f;
lckBase += lckGrowth/100.0f;
defBase += defGrowth/100.0f;
resBase += resGrowth/100.0f;
}
HashMap<String, Integer> bases = new HashMap<String, Integer>();
bases.put("Lvl", 1);
bases.put("HP", (int)hpBase);
bases.put("Str", (int)strBase);
bases.put("Mag", (int)magBase);
bases.put("Skl", (int)sklBase);
bases.put("Spd", (int)spdBase);
bases.put("Lck", (int)lckBase);
bases.put("Def", (int)defBase);
bases.put("Res", (int)resBase);
bases.put("Con", con);
bases.put("Mov", mov);
HashMap<String, Integer> growths = new HashMap<String, Integer>();
growths.put("HP", hpGrowth);
growths.put("Str", strGrowth);
growths.put("Mag", magGrowth);
growths.put("Skl", sklGrowth);
growths.put("Spd", spdGrowth);
growths.put("Def", defGrowth);
growths.put("Res", resGrowth);
growths.put("Lck", lckGrowth);
if(clazz == null){
System.err.println(line);
}
Unit u = new Unit(name, clazz, gender, bases, growths);
if(name.equals("Roy")){
u.addToInventory(WeaponFactory.getWeapon("Sealed Sword"));
} else if (name.equals("Lyn")){
u.addToInventory(WeaponFactory.getWeapon("Sol Katti"));
} else if (name.equals("Eliwood")){
u.addToInventory(WeaponFactory.getWeapon("Durandal"));
} else if (name.equals("Hector")){
u.addToInventory(WeaponFactory.getWeapon("Armads"));
} else if(name.equals("Eirika")){
u.addToInventory(WeaponFactory.getWeapon("Sieglinde"));
} else if(name.equals("Ephraim")){
u.addToInventory(WeaponFactory.getWeapon("Siegmund"));
} else if(name.equals("Marth")){
u.addToInventory(WeaponFactory.getWeapon("Falchion"));
} else if(name.equals("Ike")){
u.addToInventory(WeaponFactory.getWeapon("Ragnell"));
}
units.put(name, u);
}
in.close();
}
public static Unit getUnit(String name){
return units.get(name).getCopy();
}
public static ArrayList<Unit> getAllUnits() {
ArrayList<Unit> ans = new ArrayList<Unit>();
for(Unit u : units.values()) {
ans.add(u.getCopy());
}
return ans;
}
public static ArrayList<Unit> getLords(){
ArrayList<Unit> ans = new ArrayList<Unit>();
for(Unit u : units.values()) {
if(u.getTheClass().name.equals("Lord"))
ans.add(u.getCopy());
}
return ans;
}
public static ArrayList<Unit> getVassals(){
ArrayList<Unit> ans = new ArrayList<Unit>();
for(Unit u : units.values()) {
if(!u.getTheClass().name.equals("Lord"))
ans.add(u.getCopy());
}
return ans;
}
}