65 lines
1.9 KiB
Java
65 lines
1.9 KiB
Java
|
package tc.oc.pgm.physics;
|
||
|
|
||
|
import org.bukkit.Location;
|
||
|
import tc.oc.commons.bukkit.geometry.AffineTransform;
|
||
|
import tc.oc.commons.core.util.Utils;
|
||
|
|
||
|
public class RelativeFlags {
|
||
|
|
||
|
private static final RelativeFlags
|
||
|
FF = new RelativeFlags(false, false),
|
||
|
FT = new RelativeFlags(false, true),
|
||
|
TF = new RelativeFlags(true, false),
|
||
|
TT = new RelativeFlags(true, true);
|
||
|
|
||
|
public static RelativeFlags of(boolean relativeYaw, boolean relativePitch) {
|
||
|
return relativeYaw ? relativePitch ? TT
|
||
|
: TF
|
||
|
: relativePitch ? FT
|
||
|
: FF;
|
||
|
}
|
||
|
|
||
|
private final boolean relativeYaw, relativePitch;
|
||
|
|
||
|
private RelativeFlags(boolean relativeYaw, boolean relativePitch) {
|
||
|
this.relativeYaw = relativeYaw;
|
||
|
this.relativePitch = relativePitch;
|
||
|
}
|
||
|
|
||
|
public boolean relativeYaw() {
|
||
|
return relativeYaw;
|
||
|
}
|
||
|
|
||
|
public boolean relativePitch() {
|
||
|
return relativePitch;
|
||
|
}
|
||
|
|
||
|
public AffineTransform getTransform(Location location) {
|
||
|
return getTransform(location.getYaw(), location.getPitch());
|
||
|
}
|
||
|
|
||
|
public AffineTransform getTransform(double yaw, double pitch) {
|
||
|
AffineTransform transform = AffineTransform.identity();
|
||
|
if(relativeYaw) {
|
||
|
transform = transform.append(AffineTransform.forYaw(yaw));
|
||
|
}
|
||
|
if(relativePitch) {
|
||
|
transform = transform.append(AffineTransform.forPitch(pitch));
|
||
|
}
|
||
|
return transform;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean equals(Object obj) {
|
||
|
return Utils.equals(RelativeFlags.class, this, obj, that ->
|
||
|
this.relativeYaw == that.relativeYaw &&
|
||
|
this.relativePitch == that.relativePitch
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int hashCode() {
|
||
|
return (relativeYaw ? 2 : 0) + (relativePitch ? 1 : 0);
|
||
|
}
|
||
|
}
|