package it.albertus.cycles.model;
import it.albertus.cycles.engine.InvalidPropertyException;
import it.albertus.cycles.resources.Messages;
import it.albertus.util.ByteUtils;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
public class Settings extends BikesInfElement {
public static final int LENGTH = 22;
public static final int MIN_VALUE = 0;
public static final int MAX_VALUE = 65535;
private final Map<Setting, Integer> values = new EnumMap<Setting, Integer>(Setting.class);
public Settings(int gearsCount, int rpmRedline, int rpmLimit, int overspeedGracePeriod, int grip, int unknown1, int brakingSpeed, int unknown2, int spinThreshold, int unknown3, int rpmDownshift) {
values.put(Setting.gearsCount, gearsCount);
values.put(Setting.rpmRedline, rpmRedline);
values.put(Setting.rpmLimit, rpmLimit);
values.put(Setting.overspeedGracePeriod, overspeedGracePeriod);
values.put(Setting.grip, grip);
values.put(Setting.unknown1, unknown1);
values.put(Setting.brakingSpeed, brakingSpeed);
values.put(Setting.unknown2, unknown2);
values.put(Setting.spinThreshold, spinThreshold);
values.put(Setting.unknown3, unknown3);
values.put(Setting.rpmDownshift, rpmDownshift);
}
@Override
public List<Byte> toByteList() {
final List<Byte> byteList = new ArrayList<Byte>(LENGTH);
for (final int value : values.values()) {
byteList.addAll(ByteUtils.toByteList(value));
}
return byteList;
}
public static int parse(final String key, final String value, final int radix) {
final long newValue = Long.parseLong(value.trim(), radix);
if (newValue < MIN_VALUE || newValue > MAX_VALUE) {
throw new InvalidPropertyException(Messages.get("err.illegal.value", Integer.toString(MIN_VALUE, radix).toUpperCase(), Integer.toString(MAX_VALUE, radix).toUpperCase(), key, Long.toString(newValue, radix).toUpperCase()));
}
return (int) newValue;
}
public Map<Setting, Integer> getValues() {
return values;
}
}