package erebus.world.loot;
import java.util.ArrayList;
import java.util.Random;
public class WeightedList<T extends IWeightProvider> extends ArrayList<T> {
private static final long serialVersionUID = 9036828805904893875L;
private int totalWeight = 0;
@Override
public boolean add(T obj) {
boolean b = super.add(obj);
recalculateWeight();
return b;
}
@Override
public T remove(int index) {
T is = super.remove(index);
recalculateWeight();
return is;
}
@Override
public boolean remove(Object o) {
boolean b = super.remove(o);
recalculateWeight();
return b;
}
private void recalculateWeight() {
totalWeight = 0;
for (T obj : this)
totalWeight += obj.getWeight();
}
public int getTotalWeight() {
return totalWeight;
}
public T getRandomItem(Random rand) {
if (totalWeight == 0)
return null;
int i = rand.nextInt(totalWeight);
for (T obj : this) {
i -= obj.getWeight();
if (i < 0)
return obj;
}
return null;
}
public T getRandomItem(int weight) {
if (totalWeight == 0)
return null;
for (T obj : this) {
weight -= obj.getWeight();
if (weight < 0)
return obj;
}
return null;
}
}