LookBehaviorUtils cleanups

This commit is contained in:
Brady 2018-08-09 17:07:35 -05:00
parent 80ef73c279
commit ef3c9999c8
No known key found for this signature in database
GPG Key ID: 73A788379A197567
2 changed files with 48 additions and 38 deletions

View File

@ -17,7 +17,6 @@
package baritone.bot.behavior.impl; package baritone.bot.behavior.impl;
import baritone.bot.pathing.movement.MovementHelper;
import baritone.bot.utils.BlockStateInterface; import baritone.bot.utils.BlockStateInterface;
import baritone.bot.utils.Helper; import baritone.bot.utils.Helper;
import baritone.bot.utils.Rotation; import baritone.bot.utils.Rotation;
@ -27,15 +26,20 @@ import net.minecraft.util.math.*;
import java.util.Optional; import java.util.Optional;
import static baritone.bot.utils.Utils.DEG_TO_RAD;
public final class LookBehaviorUtils implements Helper { public final class LookBehaviorUtils implements Helper {
public static final Vec3d[] BLOCK_SIDE_MULTIPLIERS = new Vec3d[]{ /**
new Vec3d(0, 0.5, 0.5), * Offsets from the root block position to the center of each side.
new Vec3d(1, 0.5, 0.5), */
new Vec3d(0.5, 0, 0.5), private static final Vec3d[] BLOCK_SIDE_MULTIPLIERS = new Vec3d[] {
new Vec3d(0.5, 1, 0.5), new Vec3d(0.5, 0, 0.5), // Down
new Vec3d(0.5, 0.5, 0), new Vec3d(0.5, 1, 0.5), // Up
new Vec3d(0.5, 0.5, 1) new Vec3d(0.5, 0.5, 0), // North
new Vec3d(0.5, 0.5, 1), // South
new Vec3d(0, 0.5, 0.5), // West
new Vec3d(1, 0.5, 0.5) // East
}; };
/** /**
@ -45,10 +49,10 @@ public final class LookBehaviorUtils implements Helper {
* @return vector of the rotation * @return vector of the rotation
*/ */
public static Vec3d calcVec3dFromRotation(Rotation rotation) { public static Vec3d calcVec3dFromRotation(Rotation rotation) {
float f = MathHelper.cos(-rotation.getFirst() * 0.017453292F - (float) Math.PI); float f = MathHelper.cos(-rotation.getFirst() * (float) DEG_TO_RAD - (float) Math.PI);
float f1 = MathHelper.sin(-rotation.getFirst() * 0.017453292F - (float) Math.PI); float f1 = MathHelper.sin(-rotation.getFirst() * (float) DEG_TO_RAD - (float) Math.PI);
float f2 = -MathHelper.cos(-rotation.getSecond() * 0.017453292F); float f2 = -MathHelper.cos(-rotation.getSecond() * (float) DEG_TO_RAD);
float f3 = MathHelper.sin(-rotation.getSecond() * 0.017453292F); float f3 = MathHelper.sin(-rotation.getSecond() * (float) DEG_TO_RAD);
return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2)); return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2));
} }
@ -60,16 +64,13 @@ public final class LookBehaviorUtils implements Helper {
if (possibleRotation.isPresent()) if (possibleRotation.isPresent())
return possibleRotation; return possibleRotation;
IBlockState bstate = BlockStateInterface.get(pos); IBlockState state = BlockStateInterface.get(pos);
AxisAlignedBB bbox = bstate.getBoundingBox(mc.world, pos); AxisAlignedBB aabb = state.getBoundingBox(mc.world, pos);
for (Vec3d vecMult : BLOCK_SIDE_MULTIPLIERS) { for (Vec3d sideOffset : BLOCK_SIDE_MULTIPLIERS) {
double xDiff = bbox.minX * vecMult.x + bbox.maxX * (1 - vecMult.x);//lol double xDiff = aabb.minX * sideOffset.x + aabb.maxX * (1 - sideOffset.x);
double yDiff = bbox.minY * vecMult.y + bbox.maxY * (1 - vecMult.y); double yDiff = aabb.minY * sideOffset.y + aabb.maxY * (1 - sideOffset.y);
double zDiff = bbox.minZ * vecMult.z + bbox.maxZ * (1 - vecMult.z); double zDiff = aabb.minZ * sideOffset.z + aabb.maxZ * (1 - sideOffset.z);
double x = pos.getX() + xDiff; possibleRotation = reachableRotation(pos, new Vec3d(pos).add(xDiff, yDiff, zDiff));
double y = pos.getY() + yDiff;
double z = pos.getZ() + zDiff;
possibleRotation = reachableRotation(pos, new Vec3d(x, y, z));
if (possibleRotation.isPresent()) if (possibleRotation.isPresent())
return possibleRotation; return possibleRotation;
} }
@ -77,25 +78,26 @@ public final class LookBehaviorUtils implements Helper {
} }
private static RayTraceResult rayTraceTowards(Rotation rotation) { private static RayTraceResult rayTraceTowards(Rotation rotation) {
double blockReachDistance = (double) mc.playerController.getBlockReachDistance(); double blockReachDistance = mc.playerController.getBlockReachDistance();
Vec3d vec3 = mc.player.getPositionEyes(1.0F); Vec3d start = mc.player.getPositionEyes(1.0F);
Vec3d vec31 = calcVec3dFromRotation(rotation); Vec3d direction = calcVec3dFromRotation(rotation);
Vec3d vec32 = vec3.add(vec31.x * blockReachDistance, Vec3d end = start.add(
vec31.y * blockReachDistance, direction.x * blockReachDistance,
vec31.z * blockReachDistance); direction.y * blockReachDistance,
return mc.world.rayTraceBlocks(vec3, vec32, false, false, true); direction.z * blockReachDistance
);
return mc.world.rayTraceBlocks(start, end, false, false, true);
} }
/** /**
* Checks if coordinate is reachable with the given block-face rotation offset * Checks if coordinate is reachable with the given block-face rotation offset
* *
* @param pos * @param pos
* @param offset * @param offsetPos
* @return * @return
*/ */
protected static Optional<Rotation> reachableRotation(BlockPos pos, Vec3d offset) { protected static Optional<Rotation> reachableRotation(BlockPos pos, Vec3d offsetPos) {
Rotation rotation = Utils.calcRotationFromVec3d(mc.player.getPositionEyes(1.0F), Rotation rotation = Utils.calcRotationFromVec3d(mc.player.getPositionEyes(1.0F), offsetPos);
offset);
RayTraceResult result = rayTraceTowards(rotation); RayTraceResult result = rayTraceTowards(rotation);
if (result != null if (result != null
&& result.typeOfHit == RayTraceResult.Type.BLOCK && result.typeOfHit == RayTraceResult.Type.BLOCK
@ -111,8 +113,7 @@ public final class LookBehaviorUtils implements Helper {
* @return * @return
*/ */
protected static Optional<Rotation> reachableCenter(BlockPos pos) { protected static Optional<Rotation> reachableCenter(BlockPos pos) {
Rotation rotation = Utils.calcRotationFromVec3d(mc.player.getPositionEyes(1.0F), Rotation rotation = Utils.calcRotationFromVec3d(mc.player.getPositionEyes(1.0F), Utils.calcCenterFromCoords(pos, mc.world));
Utils.calcCenterFromCoords(pos, mc.world));
RayTraceResult result = rayTraceTowards(rotation); RayTraceResult result = rayTraceTowards(rotation);
if (result != null if (result != null
&& result.typeOfHit == RayTraceResult.Type.BLOCK && result.typeOfHit == RayTraceResult.Type.BLOCK
@ -133,5 +134,4 @@ public final class LookBehaviorUtils implements Helper {
} }
return Optional.empty(); return Optional.empty();
} }
} }

View File

@ -30,6 +30,16 @@ import net.minecraft.world.World;
*/ */
public final class Utils { public final class Utils {
/**
* Constant that a degree value is multiplied by to get the equivalent radian value
*/
public static final double DEG_TO_RAD = Math.PI / 180.0;
/**
* Constant that a radian value is multiplied by to get the equivalent degree value
*/
public static final double RAD_TO_DEG = 180.0 / Math.PI;
public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) { public static Rotation calcRotationFromCoords(BlockPos orig, BlockPos dest) {
return calcRotationFromVec3d(vec3dFromBlockPos(orig), vec3dFromBlockPos(dest)); return calcRotationFromVec3d(vec3dFromBlockPos(orig), vec3dFromBlockPos(dest));
} }
@ -97,11 +107,11 @@ public final class Utils {
} }
public static double degToRad(double deg) { public static double degToRad(double deg) {
return deg * Math.PI / 180.0; return deg * DEG_TO_RAD;
} }
public static double radToDeg(double rad) { public static double radToDeg(double rad) {
return rad * 180.0 / Math.PI; return rad * RAD_TO_DEG;
} }
public static BlockPos diff(BlockPos a, BlockPos b) { public static BlockPos diff(BlockPos a, BlockPos b) {