Some more work on entity shock raytrace
This commit is contained in:
parent
d18265e44b
commit
3aab19b32e
2 changed files with 13 additions and 12 deletions
|
@ -8,6 +8,7 @@ import java.util.List;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.AxisAlignedBB;
|
import net.minecraft.util.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -201,7 +202,7 @@ public class Vector3
|
||||||
return axis.getRotationMatrix(angle);
|
return axis.getRotationMatrix(angle);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vector3 getDeltaPositionFromRotation(float rotationYaw, float rotationPitch)
|
public static Vector3 getDeltaPositionFromRotation(double rotationYaw, double rotationPitch)
|
||||||
{
|
{
|
||||||
rotationYaw = rotationYaw + 90;
|
rotationYaw = rotationYaw + 90;
|
||||||
rotationPitch = -rotationPitch;
|
rotationPitch = -rotationPitch;
|
||||||
|
@ -210,11 +211,11 @@ public class Vector3
|
||||||
|
|
||||||
public double[] getDeltaRotationFromPosition()
|
public double[] getDeltaRotationFromPosition()
|
||||||
{
|
{
|
||||||
double rotationYaw = Math.toDegrees(Math.atan2(this.z, this.x));
|
|
||||||
double rotationPitch = Math.toDegrees(Math.asin(this.y));
|
double rotationPitch = Math.toDegrees(Math.asin(this.y));
|
||||||
|
double rotationYaw = Math.toDegrees(Math.atan2(this.z, this.x));
|
||||||
rotationYaw = rotationYaw - 90;
|
rotationYaw = rotationYaw - 90;
|
||||||
rotationPitch = -rotationPitch;
|
rotationPitch = -rotationPitch;
|
||||||
return new double[] { rotationPitch, rotationYaw };
|
return new double[] { MathHelper.wrapAngleTo180_double(rotationYaw), MathHelper.wrapAngleTo180_double(rotationPitch) };
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getAngle(Vector3 vector)
|
public double getAngle(Vector3 vector)
|
||||||
|
@ -232,20 +233,19 @@ public class Vector3
|
||||||
return world.getBlockTileEntity((int) this.x, (int) this.y, (int) this.z);
|
return world.getBlockTileEntity((int) this.x, (int) this.y, (int) this.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MovingObjectPosition rayTraceEntities(World world, float rotationYaw, float rotationPitch, boolean collisionFlag, double reachDistance)
|
public MovingObjectPosition rayTraceEntities(World world, double rotationYaw, double rotationPitch, double reachDistance)
|
||||||
{
|
{
|
||||||
MovingObjectPosition pickedEntity = null;
|
MovingObjectPosition pickedEntity = null;
|
||||||
Vec3 startingPosition = this.toVec3();
|
Vec3 startingPosition = this.toVec3();
|
||||||
Vec3 look = getDeltaPositionFromRotation(rotationYaw, rotationPitch).toVec3();
|
Vec3 look = getDeltaPositionFromRotation(rotationYaw, rotationPitch).toVec3();
|
||||||
Vec3 reachPoint = Vec3.createVectorHelper(startingPosition.xCoord + look.xCoord * reachDistance, startingPosition.yCoord + look.yCoord * reachDistance, startingPosition.zCoord + look.zCoord * reachDistance);
|
Vec3 reachPoint = Vec3.createVectorHelper(startingPosition.xCoord + look.xCoord * reachDistance, startingPosition.yCoord + look.yCoord * reachDistance, startingPosition.zCoord + look.zCoord * reachDistance);
|
||||||
|
|
||||||
double playerBorder = 1.1 * reachDistance;
|
double checkBorder = 1.1 * reachDistance;
|
||||||
AxisAlignedBB boxToScan = AxisAlignedBB.getAABBPool().getAABB(-playerBorder, -playerBorder, -playerBorder, playerBorder, playerBorder, playerBorder);
|
AxisAlignedBB boxToScan = AxisAlignedBB.getAABBPool().getAABB(-checkBorder, -checkBorder, -checkBorder, checkBorder, checkBorder, checkBorder).offset(this.x, this.y, this.z);;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
List<Entity> entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan);
|
List<Entity> entitiesHit = world.getEntitiesWithinAABBExcludingEntity(null, boxToScan);
|
||||||
double closestEntity = reachDistance;
|
double closestEntity = reachDistance;
|
||||||
|
|
||||||
if (entitiesHit == null || entitiesHit.isEmpty())
|
if (entitiesHit == null || entitiesHit.isEmpty())
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -167,11 +167,12 @@ public class TileEntityTesla extends TileEntityBase implements ITesla, IPacketRe
|
||||||
tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f)));
|
tesla.transfer(transferEnergy * (1 - (this.worldObj.rand.nextFloat() * 0.1f)));
|
||||||
this.transfer(-transferEnergy);
|
this.transfer(-transferEnergy);
|
||||||
|
|
||||||
if (this.attackEntities && this.zapCounter % 10 == 0)
|
if (this.attackEntities && this.zapCounter % 5 == 0)
|
||||||
{
|
{
|
||||||
double[] rotations = topTeslaVector.getDeltaRotationFromPosition();
|
double[] rotations = topTeslaVector.difference(targetVector).normalize().getDeltaRotationFromPosition();
|
||||||
MovingObjectPosition mop = topTeslaVector.rayTraceEntities(this.worldObj, (float) rotations[1], (float) rotations[0], true, distance);
|
MovingObjectPosition mop = topTeslaVector.rayTraceEntities(this.worldObj, rotations[0], rotations[1], distance);
|
||||||
System.out.println("HIT " + mop);
|
// System.out.println(Vector3.getDeltaPositionFromRotation(rotations[0],
|
||||||
|
// rotations[1]) + " :" + mop);
|
||||||
|
|
||||||
if (mop != null && mop.entityHit != null)
|
if (mop != null && mop.entityHit != null)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue