63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util;
 | |
| 
 | |
| import net.minecraft.core.Direction;
 | |
| 
 | |
| public class SegmentedAnglePrecision {
 | |
| 	private final int mask;
 | |
| 	private final int precision;
 | |
| 	private final float degreeToAngle;
 | |
| 	private final float angleToDegree;
 | |
| 
 | |
| 	public SegmentedAnglePrecision(int precision) {
 | |
| 		if (precision < 2) {
 | |
| 			throw new IllegalArgumentException("Precision cannot be less than 2 bits");
 | |
| 		} else if (precision > 30) {
 | |
| 			throw new IllegalArgumentException("Precision cannot be greater than 30 bits");
 | |
| 		} else {
 | |
| 			int i = 1 << precision;
 | |
| 			this.mask = i - 1;
 | |
| 			this.precision = precision;
 | |
| 			this.degreeToAngle = i / 360.0F;
 | |
| 			this.angleToDegree = 360.0F / i;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public boolean isSameAxis(int first, int second) {
 | |
| 		int i = this.getMask() >> 1;
 | |
| 		return (first & i) == (second & i);
 | |
| 	}
 | |
| 
 | |
| 	public int fromDirection(Direction direction) {
 | |
| 		if (direction.getAxis().isVertical()) {
 | |
| 			return 0;
 | |
| 		} else {
 | |
| 			int i = direction.get2DDataValue();
 | |
| 			return i << this.precision - 2;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public int fromDegreesWithTurns(float degreesWithTurns) {
 | |
| 		return Math.round(degreesWithTurns * this.degreeToAngle);
 | |
| 	}
 | |
| 
 | |
| 	public int fromDegrees(float degrees) {
 | |
| 		return this.normalize(this.fromDegreesWithTurns(degrees));
 | |
| 	}
 | |
| 
 | |
| 	public float toDegreesWithTurns(int degrees) {
 | |
| 		return degrees * this.angleToDegree;
 | |
| 	}
 | |
| 
 | |
| 	public float toDegrees(int degreesWithTurns) {
 | |
| 		float f = this.toDegreesWithTurns(this.normalize(degreesWithTurns));
 | |
| 		return f >= 180.0F ? f - 360.0F : f;
 | |
| 	}
 | |
| 
 | |
| 	public int normalize(int degrees) {
 | |
| 		return degrees & this.mask;
 | |
| 	}
 | |
| 
 | |
| 	public int getMask() {
 | |
| 		return this.mask;
 | |
| 	}
 | |
| }
 |