package com.rebelkeithy.ftl.crew;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.rebelkeithy.ftl.properties.Properties;
public class Skill
{
private static List<String> skillList = new ArrayList<String>();
private static Map<String, Skill> skills = new HashMap<String, Skill>();
private static Skill nullSkill = new Skill("NULL");
private static void registerSkill(String name, Skill skill)
{
if(!skills.containsKey(name))
{
skills.put(name, skill);
skillList.add(name);
System.out.println("registering " + name);
}
}
public static Skill getSkill(String name)
{
if(skills.containsKey(name))
return skills.get(name);
return nullSkill;
}
public static List<String>getSkills()
{
return skillList;
}
private String name;
private String icon;
private List<Integer> levels;
private String description;
private Skill(String name)
{
this.name = name;
description = name;
levels = new ArrayList<Integer>();
}
public Skill(String name, String icon, String desctiption, int xpForLevel1)
{
this.name = name;
this.icon = icon;
this.description = desctiption;
levels = new ArrayList<Integer>();
levels.add(xpForLevel1);
registerSkill(name, this);
}
public String getName()
{
return name;
}
public String getDescription()
{
return description;
}
public String getTooltip(Crew crew)
{
return getName() + " Skill:\n" + description + "\nNext Level: " + getXPForCurrentLevel(crew) + "/" + getXPRequiredForLevel((getCurrentLevel(crew) + 1));
}
public String getIcon()
{
return icon;
}
public void addLevel(int xpForNextLevel)
{
levels.add(xpForNextLevel);
}
public void addXP(Crew crew, int amount)
{
Properties properties = crew.getProperties();
int oldLevel = getCurrentLevel(crew);
int xp = properties.getInteger(name + "_xp");
properties.setInteger(name + "_xp", xp + amount);
int currLevel = getCurrentLevel(crew);
if(oldLevel != currLevel)
{
// TODO: Level up event (used for rendering)
}
}
public int getCurrentLevel(Crew crew)
{
Properties properties = crew.getProperties();
int xp = properties.getInteger(name + "_xp");
int level = 0;
while(level < levels.size() && xp > levels.get(level))
{
xp -= levels.get(level);
level++;
}
return level;
}
public int getXPForCurrentLevel(Crew crew)
{
Properties properties = crew.getProperties();
int xp = properties.getInteger(name + "_xp");
int level = 0;
while(xp > levels.get(level) && level < levels.size())
{
if(xp - levels.get(level) > 0)
xp -= levels.get(level);
level++;
}
return xp;// + levels.get(level - 1);
}
public int getXPRequiredForLevel(int level)
{
if(level - 1 < levels.size())
return levels.get(level - 1);
return -1;
}
}