package colloid.model.control;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import javafx.scene.Node;
import javafx.scene.control.TreeItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import colloid.model.event.Ability;
import colloid.model.event.Actor;
import colloid.model.event.Fight;
import colloid.model.event.Util;
abstract class FightTree {
protected Fight fight;
protected TreeItem<String> item;
public FightTree(Fight fight) {
this.fight = fight;
item = new TreeItem<String>(fight.info());
}
protected void init(Comparator<Actor> comparator) {
ArrayList<Actor> fightActors = new ArrayList<Actor>(fight.getActors());
Collections.sort(fightActors, comparator);
Iterator<Actor> iterActor = fightActors.iterator();
while(iterActor.hasNext()) {
Actor actor = iterActor.next();
String vps = "";
Date endTime = fight.getFinish();
if (endTime == null) {
endTime = new Date();
}
long duration = endTime.getTime() - fight.getStart().getTime();
if (duration > 100) {
vps = Util.valuePerSecond(valueDone(actor, fight), duration);
double valueDone = valueDone(actor, fight);
String info = String.format("%s: %s(%s)", actor.getName(), valueDone, vps);
TreeItem<String> itemActor = new TreeItem<String>(info);
ArrayList<Ability> actorAbilities = getAbilities(actor);
Collections.sort(actorAbilities, getAbilityComparator(actor));
Iterator<Ability> iterAbility = actorAbilities.iterator();
while (iterAbility.hasNext()) {
Ability ability = iterAbility.next();
if (ability.name() != null) {
//final Node abilityIcon = new ImageView(new Image(getClass().getResourceAsStream("/img/small/dark_field.jpg")));
itemActor.getChildren().add(new TreeItem<String>(abilityInfo(ability, valueDone), ability.getIcon()));
}
}
item.getChildren().add(itemActor);
}
}
}
abstract protected double valueDone(Actor actor, Fight fight);
abstract protected ArrayList<Ability> getAbilities(Actor actor);
abstract protected String abilityInfo(Ability ability, double totalVal);
abstract protected Comparator<Ability> getAbilityComparator(Actor actor);
public TreeItem<String> getItem() {
return item;
}
public void setItem(TreeItem<String> item) {
this.item = item;
}
}