package dan.dit.whatsthat.riddle.control;
/**
* Created by daniel on 26.11.15.
*/
public class RiddleScore {
private final int mBase;
private int mBonus;
private int mMultiplicator;
private RiddleScore(int base, int multiplicator) {
mBase = Math.max(0, base);
mMultiplicator = Math.max(1, multiplicator);
}
private RiddleScore addBonus(int bonus) {
bonus = Math.max(0, bonus);
mBonus += bonus;
return this;
}
public final int getTotalScore() {
return mMultiplicator * (mBase + mBonus);
}
public boolean hasBonus() {
return mBonus > 0;
}
public int getMultiplicator() {
return mMultiplicator;
}
public int getBonus() {
return mBonus;
}
public interface Rewardable {
Rewardable addBonus(int bonusDelta);
}
public static class Builder implements Rewardable {
private int mBase;
private int mBonus;
private int mMultiplicator;
Builder setBase(int base) {
mBase = base;
return this;
}
@Override
public Builder addBonus(int bonusDelta) {
mBonus += bonusDelta;
return this;
}
Builder setMultiplicator(int multiplicator) {
mMultiplicator = multiplicator;
return this;
}
public RiddleScore build() {
return new RiddleScore(mBase, mMultiplicator).addBonus(mBonus);
}
}
public static class NoBonusBuilder extends Builder {
@Override
public Builder addBonus(int bonusDelta) {
// do nothing
return this;
}
}
}