Fixed several problems with Units
This commit is contained in:
parent
3782cf1f88
commit
73f90c69e5
@ -182,18 +182,15 @@ public class LayerWorld extends Layer {
|
|||||||
entity.getVelocity().mul(frictionCoeff);
|
entity.getVelocity().mul(frictionCoeff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final float MC_g = Units.get("32 m/s^2");
|
||||||
|
private static final float IRL_g = Units.get("9.8 m/s^2");
|
||||||
|
|
||||||
private void tmp_applyGravity(EntityData entity, float tickLength) {
|
private void tmp_applyGravity(EntityData entity, float tickLength) {
|
||||||
if (ClientState.getInstance().getLocalPlayer().getEntity() == entity && tmp_testControls.isFlying()) {
|
if (ClientState.getInstance().getLocalPlayer().getEntity() == entity && tmp_testControls.isFlying()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final float gravitationalAcceleration;
|
final float gravitationalAcceleration = tmp_testControls.useMinecraftGravity() ? MC_g : IRL_g;
|
||||||
|
|
||||||
if (tmp_testControls.useMinecraftGravity()) {
|
|
||||||
gravitationalAcceleration = 32f * Units.METERS_PER_SECOND_SQUARED; // plz dont sue me M$
|
|
||||||
} else {
|
|
||||||
gravitationalAcceleration = 9.81f * Units.METERS_PER_SECOND_SQUARED;
|
|
||||||
}
|
|
||||||
entity.getVelocity().add(0, 0, -gravitationalAcceleration * tickLength);
|
entity.getVelocity().add(0, 0, -gravitationalAcceleration * tickLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,9 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
import java.lang.annotation.Target;
|
import java.lang.annotation.Target;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
|
||||||
import gnu.trove.TCollections;
|
import gnu.trove.TCollections;
|
||||||
import gnu.trove.map.TCharFloatMap;
|
import gnu.trove.map.TCharFloatMap;
|
||||||
@ -17,7 +20,7 @@ import ru.windcorp.progressia.common.util.crash.CrashReports;
|
|||||||
|
|
||||||
public class Units {
|
public class Units {
|
||||||
|
|
||||||
@Retention(RetentionPolicy.CLASS)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target(ElementType.FIELD)
|
@Target(ElementType.FIELD)
|
||||||
public static @interface RegisteredUnit {
|
public static @interface RegisteredUnit {
|
||||||
String[] value();
|
String[] value();
|
||||||
@ -83,14 +86,6 @@ public class Units {
|
|||||||
@RegisteredUnit("N")
|
@RegisteredUnit("N")
|
||||||
public static final float NEWTONS = METERS_PER_SECOND_SQUARED * KILOGRAMS;
|
public static final float NEWTONS = METERS_PER_SECOND_SQUARED * KILOGRAMS;
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
registerUnits(Units.class);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
CrashReports.report(e, "Could not register units declared in {}", Units.class.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Utilities
|
* Utilities
|
||||||
*/
|
*/
|
||||||
@ -111,7 +106,9 @@ public class Units {
|
|||||||
prefixes.put('k', 1e+3f);
|
prefixes.put('k', 1e+3f);
|
||||||
prefixes.put('c', 1e-2f);
|
prefixes.put('c', 1e-2f);
|
||||||
prefixes.put('m', 1e-3f);
|
prefixes.put('m', 1e-3f);
|
||||||
prefixes.put('μ', 1e-6f);
|
prefixes.put('µ', 1e-6f); // \u00B5
|
||||||
|
prefixes.put('u', 1e-6f); // for extra compatibility
|
||||||
|
|
||||||
|
|
||||||
PREFIXES_BY_CHAR = TCollections.unmodifiableMap(prefixes);
|
PREFIXES_BY_CHAR = TCollections.unmodifiableMap(prefixes);
|
||||||
}
|
}
|
||||||
@ -138,6 +135,8 @@ public class Units {
|
|||||||
if (field.getType() != Float.TYPE) continue;
|
if (field.getType() != Float.TYPE) continue;
|
||||||
|
|
||||||
RegisteredUnit request = field.getAnnotation(RegisteredUnit.class);
|
RegisteredUnit request = field.getAnnotation(RegisteredUnit.class);
|
||||||
|
if (request == null) continue;
|
||||||
|
|
||||||
float value = field.getFloat(null); // adding throws since we might not have accounted for something
|
float value = field.getFloat(null); // adding throws since we might not have accounted for something
|
||||||
registerUnit(value, request.value());
|
registerUnit(value, request.value());
|
||||||
}
|
}
|
||||||
@ -145,10 +144,14 @@ public class Units {
|
|||||||
|
|
||||||
public static void registerUnit(float value, String... names) {
|
public static void registerUnit(float value, String... names) {
|
||||||
for (String name : names) {
|
for (String name : names) {
|
||||||
if (!Float.isNaN(UNITS_BY_NAME.put(name, value))) {
|
float previous = UNITS_BY_NAME.put(name, value);
|
||||||
|
|
||||||
|
if (!Float.isNaN(previous)) {
|
||||||
throw new IllegalArgumentException("Duplicate unit name " + name);
|
throw new IllegalArgumentException("Duplicate unit name " + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LogManager.getLogger().debug("Registered unit {} with value {}", Arrays.toString(names), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -161,7 +164,7 @@ public class Units {
|
|||||||
* unit_name_and_exp ::= unit_name[[ws]"^"[ws]exponent]
|
* unit_name_and_exp ::= unit_name[[ws]"^"[ws]exponent]
|
||||||
* unit_name ::= [prefix]named_unit | special_unit
|
* unit_name ::= [prefix]named_unit | special_unit
|
||||||
* named_unit ::= <any registered unit name, case-sensitive>
|
* named_unit ::= <any registered unit name, case-sensitive>
|
||||||
* prefix ::= "G" | "M" | "k" | "c" | "m" | "μ"
|
* prefix ::= "G" | "M" | "k" | "c" | "m" | "µ" (\u00B5) | "u"
|
||||||
* special_unit ::= "1"
|
* special_unit ::= "1"
|
||||||
* exponent ::= <any float>
|
* exponent ::= <any float>
|
||||||
* ws ::= <any character <= 'U+0020'>+</pre>
|
* ws ::= <any character <= 'U+0020'>+</pre>
|
||||||
@ -297,5 +300,13 @@ public class Units {
|
|||||||
assert parts[0] == parts[0].trim();
|
assert parts[0] == parts[0].trim();
|
||||||
return Double.parseDouble(parts[0]) * getUnitValue(parts[1]);
|
return Double.parseDouble(parts[0]) * getUnitValue(parts[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
registerUnits(Units.class);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
CrashReports.report(e, "Could not register units declared in {}", Units.class.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user