176 lines
4 KiB
Java
176 lines
4 KiB
Java
package universalelectricity.core.electricity;
|
|
|
|
/**
|
|
* An easy way to display information on electricity for the client.
|
|
*
|
|
* @author Calclavia
|
|
*/
|
|
|
|
public class ElectricityDisplay
|
|
{
|
|
/**
|
|
* Universal Electricity's units are in KILOJOULES, KILOWATTS and KILOVOLTS. Try to make your
|
|
* energy ratio as close to real life as possible.
|
|
*
|
|
*/
|
|
public static enum ElectricUnit
|
|
{
|
|
AMPERE("Amp", "I"), AMP_HOUR("Amp Hour", "Ah"), VOLTAGE("Volt", "V"), WATT("Watt", "W"),
|
|
WATT_HOUR("Watt Hour", "Wh"), RESISTANCE("Ohm", "R"), CONDUCTANCE("Siemen", "S"),
|
|
JOULES("Joule", "J");
|
|
|
|
public String name;
|
|
public String symbol;
|
|
|
|
private ElectricUnit(String name, String symbol)
|
|
{
|
|
this.name = name;
|
|
this.symbol = symbol;
|
|
}
|
|
|
|
public String getPlural()
|
|
{
|
|
return this.name + "s";
|
|
}
|
|
}
|
|
|
|
public static enum MeasurementUnit
|
|
{
|
|
MICRO("Micro", "mi", 0.000001), MILLI("Milli", "m", 0.001), KILO("Kilo", "k", 1000),
|
|
MEGA("Mega", "M", 1000000), GIGA("Giga", "G", 1000000000);
|
|
|
|
public String name;
|
|
public String symbol;
|
|
public double value;
|
|
|
|
private MeasurementUnit(String name, String symbol, double value)
|
|
{
|
|
this.name = name;
|
|
this.symbol = symbol;
|
|
this.value = value;
|
|
}
|
|
|
|
public String getName(boolean isSymbol)
|
|
{
|
|
if (isSymbol)
|
|
{
|
|
return symbol;
|
|
}
|
|
else
|
|
{
|
|
return name;
|
|
}
|
|
}
|
|
|
|
public double process(double value)
|
|
{
|
|
return value / this.value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* By default, mods should store energy in Kilo-Joules, hence a multiplier of 1/1000.
|
|
*/
|
|
public static String getDisplay(float value, ElectricUnit unit, int decimalPlaces, boolean isShort)
|
|
{
|
|
return getDisplay(value, unit, decimalPlaces, isShort, 1000);
|
|
}
|
|
|
|
/**
|
|
* Displays the unit as text. Works only for positive numbers.
|
|
*/
|
|
public static String getDisplay(float value, ElectricUnit unit, int decimalPlaces, boolean isShort, float multiplier)
|
|
{
|
|
value *= multiplier;
|
|
|
|
String unitName = unit.name;
|
|
|
|
if (isShort)
|
|
{
|
|
unitName = unit.symbol;
|
|
}
|
|
else if (value > 1)
|
|
{
|
|
unitName = unit.getPlural();
|
|
}
|
|
|
|
if (value == 0)
|
|
{
|
|
return value + " " + unitName;
|
|
}
|
|
|
|
if (value <= MeasurementUnit.MILLI.value)
|
|
{
|
|
return roundDecimals(MeasurementUnit.MICRO.process(value), decimalPlaces) + " " + MeasurementUnit.MICRO.getName(isShort) + unitName;
|
|
}
|
|
|
|
if (value < 1)
|
|
{
|
|
return roundDecimals(MeasurementUnit.MILLI.process(value), decimalPlaces) + " " + MeasurementUnit.MILLI.getName(isShort) + unitName;
|
|
}
|
|
|
|
if (value > MeasurementUnit.MEGA.value)
|
|
{
|
|
return roundDecimals(MeasurementUnit.MEGA.process(value), decimalPlaces) + " " + MeasurementUnit.MEGA.getName(isShort) + unitName;
|
|
}
|
|
|
|
if (value > MeasurementUnit.KILO.value)
|
|
{
|
|
return roundDecimals(MeasurementUnit.KILO.process(value), decimalPlaces) + " " + MeasurementUnit.KILO.getName(isShort) + unitName;
|
|
}
|
|
|
|
return roundDecimals(value, decimalPlaces) + " " + unitName;
|
|
}
|
|
|
|
public static String getDisplay(float value, ElectricUnit unit)
|
|
{
|
|
return getDisplay(value, unit, 2, false);
|
|
}
|
|
|
|
public static String getDisplayShort(float value, ElectricUnit unit)
|
|
{
|
|
return getDisplay(value, unit, 2, true);
|
|
}
|
|
|
|
public static String getDisplayShort(float value, ElectricUnit unit, int decimalPlaces)
|
|
{
|
|
return getDisplay(value, unit, decimalPlaces, true);
|
|
}
|
|
|
|
public static String getDisplaySimple(float value, ElectricUnit unit, int decimalPlaces)
|
|
{
|
|
if (value > 1)
|
|
{
|
|
if (decimalPlaces < 1)
|
|
{
|
|
return (int) value + " " + unit.getPlural();
|
|
}
|
|
|
|
return roundDecimals(value, decimalPlaces) + " " + unit.getPlural();
|
|
}
|
|
|
|
if (decimalPlaces < 1)
|
|
{
|
|
return (int) value + " " + unit.name;
|
|
}
|
|
|
|
return roundDecimals(value, decimalPlaces) + " " + unit.name;
|
|
}
|
|
|
|
/**
|
|
* Rounds a number to a specific number place places
|
|
*
|
|
* @param The number
|
|
* @return The rounded number
|
|
*/
|
|
public static double roundDecimals(double d, int decimalPlaces)
|
|
{
|
|
int j = (int) (d * Math.pow(10, decimalPlaces));
|
|
return j / Math.pow(10, decimalPlaces);
|
|
}
|
|
|
|
public static double roundDecimals(double d)
|
|
{
|
|
return roundDecimals(d, 2);
|
|
}
|
|
}
|