Add Pos3D because vectors
This commit is contained in:
parent
6cf6ba2b09
commit
6c87a8e288
3 changed files with 155 additions and 40 deletions
115
common/mekanism/api/Pos3D.java
Normal file
115
common/mekanism/api/Pos3D.java
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
package mekanism.api;
|
||||||
|
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.util.MathHelper;
|
||||||
|
|
||||||
|
public class Pos3D
|
||||||
|
{
|
||||||
|
public double xPos;
|
||||||
|
public double yPos;
|
||||||
|
public double zPos;
|
||||||
|
|
||||||
|
public Pos3D()
|
||||||
|
{
|
||||||
|
this(0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D(double x, double y, double z)
|
||||||
|
{
|
||||||
|
xPos = x;
|
||||||
|
yPos = y;
|
||||||
|
zPos = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D(Entity entity)
|
||||||
|
{
|
||||||
|
this(entity.posX, entity.posY, entity.posZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D diff(Pos3D pos)
|
||||||
|
{
|
||||||
|
return new Pos3D(xPos-pos.xPos, yPos-pos.yPos, zPos-pos.zPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Pos3D fromMotion(Entity entity)
|
||||||
|
{
|
||||||
|
return new Pos3D(entity.motionX, entity.motionY, entity.motionZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D translate(double x, double y, double z)
|
||||||
|
{
|
||||||
|
xPos += x;
|
||||||
|
yPos += y;
|
||||||
|
zPos += z;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D translate(Pos3D pos)
|
||||||
|
{
|
||||||
|
return translate(pos.xPos, pos.yPos, pos.zPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double distance(Pos3D pos)
|
||||||
|
{
|
||||||
|
double subX = xPos - pos.xPos;
|
||||||
|
double subY = yPos - pos.yPos;
|
||||||
|
double subZ = zPos - pos.zPos;
|
||||||
|
return MathHelper.sqrt_double(subX * subX + subY * subY + subZ * subZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D rotateYaw(double yaw)
|
||||||
|
{
|
||||||
|
double yawRadians = Math.toRadians(yaw);
|
||||||
|
|
||||||
|
double x = xPos;
|
||||||
|
double z = zPos;
|
||||||
|
|
||||||
|
if(yaw != 0)
|
||||||
|
{
|
||||||
|
xPos = x * Math.cos(yawRadians) - z * Math.sin(yawRadians);
|
||||||
|
zPos = x * Math.sin(yawRadians) + z * Math.cos(yawRadians);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D scale(double x, double y, double z)
|
||||||
|
{
|
||||||
|
xPos *= x;
|
||||||
|
yPos *= y;
|
||||||
|
zPos *= z;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pos3D scale(double scale)
|
||||||
|
{
|
||||||
|
return scale(scale, scale, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pos3D clone()
|
||||||
|
{
|
||||||
|
return new Pos3D(xPos, yPos, zPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj)
|
||||||
|
{
|
||||||
|
return obj instanceof Pos3D &&
|
||||||
|
((Pos3D)obj).xPos == xPos &&
|
||||||
|
((Pos3D)obj).yPos == yPos &&
|
||||||
|
((Pos3D)obj).zPos == zPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
int code = 1;
|
||||||
|
code = 31 * code + new Double(xPos).hashCode();
|
||||||
|
code = 31 * code + new Double(yPos).hashCode();
|
||||||
|
code = 31 * code + new Double(zPos).hashCode();
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,8 +5,9 @@ import java.util.HashSet;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import mekanism.api.EnumColor;
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
|
import mekanism.api.EnumColor;
|
||||||
|
import mekanism.api.Pos3D;
|
||||||
import mekanism.common.Mekanism;
|
import mekanism.common.Mekanism;
|
||||||
import mekanism.common.item.ItemJetpack;
|
import mekanism.common.item.ItemJetpack;
|
||||||
import mekanism.common.item.ItemScubaTank;
|
import mekanism.common.item.ItemScubaTank;
|
||||||
|
@ -22,7 +23,6 @@ import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.MathHelper;
|
import net.minecraft.util.MathHelper;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import universalelectricity.core.vector.Vector3;
|
|
||||||
import cpw.mods.fml.common.ITickHandler;
|
import cpw.mods.fml.common.ITickHandler;
|
||||||
import cpw.mods.fml.common.TickType;
|
import cpw.mods.fml.common.TickType;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -114,54 +114,54 @@ public class RenderTickHandler implements ITickHandler
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3 playerPos = new Vector3(p);
|
Pos3D playerPos = new Pos3D(p);
|
||||||
|
|
||||||
if(p != mc.thePlayer)
|
if(p != mc.thePlayer)
|
||||||
{
|
{
|
||||||
playerPos.translate(new Vector3(0, 1.7, 0));
|
playerPos.translate(0, 1.7, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
float random = (rand.nextFloat()-0.5F)*0.1F;
|
float random = (rand.nextFloat()-0.5F)*0.1F;
|
||||||
|
|
||||||
Vector3 vLeft = new Vector3();
|
Pos3D vLeft = new Pos3D();
|
||||||
vLeft.z -= 0.54;
|
vLeft.zPos -= 0.54;
|
||||||
vLeft.x -= 0.43;
|
vLeft.xPos -= 0.43;
|
||||||
vLeft.rotate(p.renderYawOffset);
|
vLeft.rotateYaw(p.renderYawOffset);
|
||||||
vLeft.y -= 0.55;
|
vLeft.yPos -= 0.55;
|
||||||
|
|
||||||
Vector3 vRight = new Vector3();
|
Pos3D vRight = new Pos3D();
|
||||||
vRight.z -= 0.54;
|
vRight.xPos += 0.43;
|
||||||
vRight.x += 0.43;
|
vRight.yPos -= 0.55;
|
||||||
vRight.rotate(p.renderYawOffset);
|
vRight.zPos -= 0.54;
|
||||||
vRight.y -= 0.55;
|
vRight.rotateYaw(p.renderYawOffset);
|
||||||
|
|
||||||
Vector3 vCenter = new Vector3();
|
Pos3D vCenter = new Pos3D();
|
||||||
vCenter.z -= 0.30;
|
vCenter.xPos = (rand.nextFloat()-0.5F)*0.4F;
|
||||||
vCenter.x = (rand.nextFloat()-0.5F)*0.4F;
|
vCenter.yPos -= 0.86;
|
||||||
vCenter.rotate(p.renderYawOffset);
|
vCenter.zPos -= 0.30;
|
||||||
vCenter.y -= 0.86;
|
vCenter.rotateYaw(p.renderYawOffset);
|
||||||
|
|
||||||
Vector3 rLeft = vLeft.clone().scale(random);
|
Pos3D rLeft = vLeft.clone().scale(random);
|
||||||
Vector3 rRight = vRight.clone().scale(random);
|
Pos3D rRight = vRight.clone().scale(random);
|
||||||
|
|
||||||
Vector3 mLeft = Vector3.translate(vLeft.clone().scale(0.2), new Vector3(p.motionX, p.motionY, p.motionZ));
|
Pos3D mLeft = vLeft.clone().scale(0.2).translate(new Pos3D(p.motionX, p.motionY, p.motionZ));
|
||||||
Vector3 mRight = Vector3.translate(vRight.clone().scale(0.2), new Vector3(p.motionX, p.motionY, p.motionZ));
|
Pos3D mRight = vRight.clone().scale(0.2).translate(new Pos3D(p.motionX, p.motionY, p.motionZ));
|
||||||
Vector3 mCenter = Vector3.translate(vCenter.clone().scale(0.2), new Vector3(p.motionX, p.motionY, p.motionZ));
|
Pos3D mCenter = vCenter.clone().scale(0.2).translate(new Pos3D(p.motionX, p.motionY, p.motionZ));
|
||||||
|
|
||||||
mLeft.translate(rLeft);
|
mLeft.translate(rLeft);
|
||||||
mRight.translate(rRight);
|
mRight.translate(rRight);
|
||||||
|
|
||||||
Vector3 v = new Vector3(playerPos).translate(vLeft);
|
Pos3D v = playerPos.clone().translate(vLeft);
|
||||||
spawnAndSetParticle("flame", world, v.x, v.y, v.z, mLeft.x, mLeft.y, mLeft.z);
|
spawnAndSetParticle("flame", world, v.xPos, v.yPos, v.zPos, mLeft.xPos, mLeft.yPos, mLeft.zPos);
|
||||||
spawnAndSetParticle("smoke", world, v.x, v.y, v.z, mLeft.x, mLeft.y, mLeft.z);
|
spawnAndSetParticle("smoke", world, v.xPos, v.yPos, v.zPos, mLeft.xPos, mLeft.yPos, mLeft.zPos);
|
||||||
|
|
||||||
v = new Vector3(playerPos).translate(vRight);
|
v = playerPos.clone().translate(vRight);
|
||||||
spawnAndSetParticle("flame", world, v.x, v.y, v.z, mRight.x, mRight.y, mRight.z);
|
spawnAndSetParticle("flame", world, v.xPos, v.yPos, v.zPos, mRight.xPos, mRight.yPos, mRight.zPos);
|
||||||
spawnAndSetParticle("smoke", world, v.x, v.y, v.z, mRight.x, mRight.y, mRight.z);
|
spawnAndSetParticle("smoke", world, v.xPos, v.yPos, v.zPos, mRight.xPos, mRight.yPos, mRight.zPos);
|
||||||
|
|
||||||
v = new Vector3(playerPos).translate(vCenter);
|
v = playerPos.clone().translate(vCenter);
|
||||||
spawnAndSetParticle("flame", world, v.x, v.y, v.z, mCenter.x, mCenter.y, mCenter.z);
|
spawnAndSetParticle("flame", world, v.xPos, v.yPos, v.zPos, mCenter.xPos, mCenter.yPos, mCenter.zPos);
|
||||||
spawnAndSetParticle("smoke", world, v.x, v.y, v.z, mCenter.x, mCenter.y, mCenter.z);
|
spawnAndSetParticle("smoke", world, v.xPos, v.yPos, v.zPos, mCenter.xPos, mCenter.yPos, mCenter.zPos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,12 @@ import java.util.List;
|
||||||
|
|
||||||
import mekanism.api.Coord4D;
|
import mekanism.api.Coord4D;
|
||||||
import mekanism.api.EnumColor;
|
import mekanism.api.EnumColor;
|
||||||
|
import mekanism.api.Pos3D;
|
||||||
import mekanism.common.EntityBalloon;
|
import mekanism.common.EntityBalloon;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.client.renderer.texture.IconRegister;
|
import net.minecraft.client.renderer.texture.IconRegister;
|
||||||
import net.minecraft.creativetab.CreativeTabs;
|
import net.minecraft.creativetab.CreativeTabs;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -46,13 +46,13 @@ public class ItemBalloon extends ItemMekanism
|
||||||
{
|
{
|
||||||
if(!world.isRemote)
|
if(!world.isRemote)
|
||||||
{
|
{
|
||||||
Vector3 vec = new Vector3();
|
Pos3D pos = new Pos3D();
|
||||||
vec.z += 0.3;
|
pos.zPos += 0.3;
|
||||||
vec.x -= 0.4;
|
pos.xPos -= 0.4;
|
||||||
vec.rotate(entityplayer.renderYawOffset);
|
pos.rotateYaw(entityplayer.renderYawOffset);
|
||||||
vec.translate(new Vector3(entityplayer));
|
pos.translate(new Pos3D(entityplayer));
|
||||||
|
|
||||||
world.spawnEntityInWorld(new EntityBalloon(world, vec.x-0.5, vec.y-0.25, vec.z-0.5, getColor(itemstack)));
|
world.spawnEntityInWorld(new EntityBalloon(world, pos.xPos-0.5, pos.yPos-0.25, pos.zPos-0.5, getColor(itemstack)));
|
||||||
}
|
}
|
||||||
|
|
||||||
itemstack.stackSize--;
|
itemstack.stackSize--;
|
||||||
|
|
Loading…
Reference in a new issue