package logbook.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import javax.annotation.CheckForNull;
import logbook.internal.ExpTable;
/**
* 経験値を計算するutilです
*
*/
public class CalcExpUtils {
/**
* 次のレベルまでに必要な経験値。次のレベルがない場合はnullを返します
*
* @param nowlv 現在のレベル
* @return 次のレベルまでに必要な経験値
*/
@CheckForNull
public static Integer getNextLvExp(int nowlv) {
return ExpTable.get().get(nowlv + 1);
}
/**
* 戦闘で得られる経験値を計算します
*
* @param baseexp 海域Exp
* @param eval 評価倍率
* @param isFlagship 旗艦
* @param isMvp MVP
* @return 得られる経験値
*/
public static int getExp(int baseexp, double eval, boolean isFlagship, boolean isMvp) {
// 得られる経験値
double getexpd = baseexp * eval;
if (isFlagship) {
getexpd *= 1.5;
}
if (isMvp) {
getexpd *= 2;
}
// 最大累積 3.6倍
getexpd = Math.min(getexpd, baseexp * 3.6);
return (int) Math.round(getexpd);
}
/**
* 必要経験値を1回あたりの経験値で割った数値を計算します。端数は切り上げされます
*
* @param needexp 必要経験値
* @param exp 1回あたりの経験値
* @return
*/
public static int getCount(int needexp, int exp) {
return BigDecimal.valueOf(needexp).divide(BigDecimal.valueOf(exp), RoundingMode.CEILING)
.intValue();
}
}