From 9844af336bc1402a538a93a4f179ea45b50bfbe2 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Thu, 27 Mar 2014 21:58:14 +0800 Subject: [PATCH] Fixed #431 - Mechanical nodes now decelerate itself --- .../energy/grid/MechanicalNode.java | 61 +++++++++++++------ 1 file changed, 44 insertions(+), 17 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java index 836fbb88..53b37c88 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java @@ -1,37 +1,38 @@ package resonantinduction.mechanical.energy.grid; -import java.util.Iterator; -import java.util.Map.Entry; - +import calclavia.api.resonantinduction.IMechanicalNode; +import calclavia.lib.grid.INodeProvider; +import calclavia.lib.grid.Node; +import calclavia.lib.grid.TickingGrid; +import codechicken.multipart.TMultiPart; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.ResonantInduction; import universalelectricity.api.vector.Vector3; -import calclavia.api.resonantinduction.IMechanicalNode; -import calclavia.lib.grid.INodeProvider; -import calclavia.lib.grid.Node; -import calclavia.lib.grid.TickingGrid; -import codechicken.multipart.TMultiPart; + +import java.util.Iterator; +import java.util.Map.Entry; /** * A mechanical node for mechanical energy. - * + *

* Useful Formula: - * + *

* Power is the work per unit time. * Power (W) = Torque (Strength of the rotation, Newton Meters) x Speed (Angular Velocity, RADIAN * PER SECOND). * *OR* * Power = Torque / Time - * + *

* Torque = r (Radius) * F (Force) * sin0 (Direction/Angle of the force applied. 90 degrees if * optimal.) - * + * * @author Calclavia */ -public class MechanicalNode extends Node implements IMechanicalNode +public class MechanicalNode extends Node + implements IMechanicalNode { public double torque = 0; public double prevAngularVelocity, angularVelocity = 0; @@ -71,7 +72,9 @@ public class MechanicalNode extends Node 0) + { torque -= torqueLoss; + } else + { torque += torqueLoss; + } double velocityLoss = Math.min(Math.abs(getAngularVelocity()), (Math.abs(getAngularVelocity() * getAngularVelocityLoad()) + getAngularVelocityLoad() / 10) * deltaTime); if (angularVelocity > 0) + { angularVelocity -= velocityLoss; + } else + { angularVelocity += velocityLoss; + } power = getEnergy() / deltaTime; @@ -121,11 +132,27 @@ public class MechanicalNode extends Node