Fixed grinder rotation and packets
This commit is contained in:
parent
2cb30f501b
commit
bffc3e4fd5
3 changed files with 50 additions and 5 deletions
|
@ -6,6 +6,7 @@ import java.util.Iterator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
|
|
||||||
|
import resonantinduction.mechanical.process.TileGrinderWheel;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import universalelectricity.api.net.IUpdate;
|
import universalelectricity.api.net.IUpdate;
|
||||||
import universalelectricity.core.net.Network;
|
import universalelectricity.core.net.Network;
|
||||||
|
@ -80,7 +81,7 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
|
||||||
float ratio = adjacentMech.getRatio(dir) / mechanical.getRatio(dir.getOpposite());
|
float ratio = adjacentMech.getRatio(dir) / mechanical.getRatio(dir.getOpposite());
|
||||||
long torque = mechanical.getTorque();
|
long torque = mechanical.getTorque();
|
||||||
|
|
||||||
boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech) || adjacentMech.inverseRotation(dir.getOpposite(), mechanical);
|
boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech) && adjacentMech.inverseRotation(dir.getOpposite(), mechanical);
|
||||||
|
|
||||||
int inversion = inverseRotation ? -1 : 1;
|
int inversion = inverseRotation ? -1 : 1;
|
||||||
|
|
||||||
|
@ -93,7 +94,7 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
|
||||||
|
|
||||||
if (Math.abs(velocity + inversion * (adjacentMech.getAngularVelocity() * ratio * ACCELERATION)) < Math.abs(adjacentMech.getAngularVelocity() * ratio))
|
if (Math.abs(velocity + inversion * (adjacentMech.getAngularVelocity() * ratio * ACCELERATION)) < Math.abs(adjacentMech.getAngularVelocity() * ratio))
|
||||||
{
|
{
|
||||||
mechanical.setAngularVelocity(velocity + inversion * ((adjacentMech.getAngularVelocity() * ratio * ACCELERATION)));
|
mechanical.setAngularVelocity(velocity + (inversion * adjacentMech.getAngularVelocity() * ratio * ACCELERATION));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,19 @@
|
||||||
package resonantinduction.mechanical.network;
|
package resonantinduction.mechanical.network;
|
||||||
|
|
||||||
import resonantinduction.mechanical.gear.PartGearShaft;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
import resonantinduction.core.ResonantInduction;
|
||||||
|
import resonantinduction.mechanical.gear.PartGearShaft;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
|
import calclavia.lib.network.IPacketReceiver;
|
||||||
|
import calclavia.lib.network.PacketHandler;
|
||||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
import calclavia.lib.prefab.tile.TileAdvanced;
|
||||||
|
|
||||||
public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
public abstract class TileMechanical extends TileAdvanced implements IMechanical, IPacketReceiver
|
||||||
{
|
{
|
||||||
/** The mechanical connections this connector has made */
|
/** The mechanical connections this connector has made */
|
||||||
protected Object[] connections = new Object[6];
|
protected Object[] connections = new Object[6];
|
||||||
|
@ -16,6 +22,12 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
||||||
protected long torque;
|
protected long torque;
|
||||||
public float angle = 0;
|
public float angle = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For sending client update packets
|
||||||
|
*/
|
||||||
|
private float prevAngularVelocity;
|
||||||
|
private boolean markPacketUpdate;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initiate()
|
public void initiate()
|
||||||
{
|
{
|
||||||
|
@ -29,6 +41,29 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
||||||
angle += angularVelocity / 20;
|
angle += angularVelocity / 20;
|
||||||
torque *= getLoad();
|
torque *= getLoad();
|
||||||
angularVelocity *= getLoad();
|
angularVelocity *= getLoad();
|
||||||
|
|
||||||
|
if (Math.abs(prevAngularVelocity - angularVelocity) > 0.05f)
|
||||||
|
{
|
||||||
|
prevAngularVelocity = angularVelocity;
|
||||||
|
markPacketUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (markPacketUpdate && ticks % 10 == 0)
|
||||||
|
{
|
||||||
|
sendRotationPacket();
|
||||||
|
markPacketUpdate = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendRotationPacket()
|
||||||
|
{
|
||||||
|
PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, angularVelocity), worldObj, new Vector3(this), 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
|
||||||
|
{
|
||||||
|
angularVelocity = data.readFloat();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,7 +2,10 @@ package resonantinduction.mechanical.process;
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
|
|
||||||
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
|
||||||
import net.minecraft.entity.item.EntityItem;
|
import net.minecraft.entity.item.EntityItem;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
|
@ -167,6 +170,12 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
||||||
@Override
|
@Override
|
||||||
public boolean canConnect(ForgeDirection from, Object source)
|
public boolean canConnect(ForgeDirection from, Object source)
|
||||||
{
|
{
|
||||||
return from != this.getDirection() && from != this.getDirection().getOpposite();
|
if (getDirection().ordinal() < 2)
|
||||||
|
{
|
||||||
|
return from.offsetY != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return getDirection().getRotation(ForgeDirection.UP) == from || getDirection().getRotation(ForgeDirection.DOWN) == from;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue