package com.github.jamesnorris.ablockalypse.utility;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class MathUtility {
public static Integer[] parseIntervalNotation(String line) {
List<Integer> listLevels = new ArrayList<Integer>();
int includingStart = line.indexOf("[");
int notIncludingStart = line.indexOf("(");
int includingEnd = line.indexOf("]");
int notIncludingEnd = line.indexOf(")");
boolean startIncludes = includingStart != -1;
boolean endIncludes = includingEnd != -1;
String[] integers = line.substring((startIncludes ? includingStart : notIncludingStart) + 1, endIncludes ? includingEnd : notIncludingEnd).split(Pattern.quote(","));
int start = Integer.parseInt(integers[0].trim());
int end = Integer.parseInt(integers[1].trim());
for (int i = start; i <= end; i++) {
listLevels.add(i);
}
return listLevels.toArray(new Integer[listLevels.size()]);
}
public static int parsePercentage(String line) throws NumberFormatException {
if (line.isEmpty()) {
throw new IllegalArgumentException("Line cannot be null!");
}
int signIndex = line.indexOf("%");
String totalDigits = "";
for (int i = 3; i >= 0; i--) {
char beforeSign = line.charAt(signIndex - i);
if (beforeSign == ' ' || !Character.isDefined(beforeSign) || !Character.isDigit(beforeSign)) {
break;
}
totalDigits = totalDigits.concat(Character.toString(beforeSign));
}
return Integer.parseInt(totalDigits);
}
public static double absDegrees(double degrees) {
if (degrees < 0) {
for (int i = (int) Math.round(degrees / -360); i >= 0; i--) {
degrees += 360;;
}
}
return degrees % 360;
}
public static double refAngle(double degrees) {
if (degrees < 0 || degrees > 360) {
degrees = absDegrees(degrees);
}
if (degrees < 90) {
return degrees;
} else if (degrees < 180) {
return 180 - degrees;
} else if (degrees < 270) {
return degrees - 180;
} else {
return 360 - degrees;
}
}
}