Added load calculation mechanic
This commit is contained in:
parent
a5c124eeac
commit
2cfd22a8d3
5 changed files with 59 additions and 18 deletions
|
@ -19,7 +19,7 @@ public class TileGenerator extends TileElectrical implements IMechanical
|
||||||
/** Generator turns KE -> EE. Inverted one will turn EE -> KE. */
|
/** Generator turns KE -> EE. Inverted one will turn EE -> KE. */
|
||||||
public boolean isInversed = false;
|
public boolean isInversed = false;
|
||||||
|
|
||||||
private float torqueRatio = 500;
|
private float torqueRatio = 8000;
|
||||||
|
|
||||||
public TileGenerator()
|
public TileGenerator()
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ public class TileGenerator extends TileElectrical implements IMechanical
|
||||||
|
|
||||||
public float toggleRatio()
|
public float toggleRatio()
|
||||||
{
|
{
|
||||||
return torqueRatio = (torqueRatio + 100) % energy.getMaxExtract();
|
return torqueRatio = (torqueRatio + 1000) % energy.getMaxExtract();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -54,7 +54,7 @@ public class TileGenerator extends TileElectrical implements IMechanical
|
||||||
{
|
{
|
||||||
float angularVelocity = extract / torqueRatio;
|
float angularVelocity = extract / torqueRatio;
|
||||||
long torque = (long) (extract / angularVelocity);
|
long torque = (long) (extract / angularVelocity);
|
||||||
((IMechanical) mechanical).onReceiveEnergy(getOuputDirection().getOpposite(), torque, angularVelocity);
|
((IMechanical) mechanical).onReceiveEnergy(getOuputDirection().getOpposite(), torque, angularVelocity, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -93,9 +93,9 @@ public class TileGenerator extends TileElectrical implements IMechanical
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity)
|
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive)
|
||||||
{
|
{
|
||||||
energy.receiveEnergy((long) (torque * angularVelocity), true);
|
return energy.receiveEnergy((long) (torque * angularVelocity), doReceive);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -90,7 +90,7 @@ public class PartGear extends JCuboidPart implements JNormalOcclusion, TFacePart
|
||||||
{
|
{
|
||||||
if (manualCrankTime > 0)
|
if (manualCrankTime > 0)
|
||||||
{
|
{
|
||||||
onReceiveEnergy(null, 20, 0.3f);
|
onReceiveEnergy(null, 20, 0.3f, true);
|
||||||
manualCrankTime--;
|
manualCrankTime--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,10 +99,13 @@ public class PartGear extends JCuboidPart implements JNormalOcclusion, TFacePart
|
||||||
/**
|
/**
|
||||||
* Update angle rotation.
|
* Update angle rotation.
|
||||||
*/
|
*/
|
||||||
if (isClockwise)
|
if (getNetwork().getPower() > 0)
|
||||||
angle += this.getNetwork().getAngularVelocity() / 20f;
|
{
|
||||||
else
|
if (isClockwise)
|
||||||
angle -= this.getNetwork().getAngularVelocity() / 20f;
|
angle += getNetwork().getAngularVelocity() / 20f;
|
||||||
|
else
|
||||||
|
angle -= getNetwork().getAngularVelocity() / 20f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -295,13 +298,15 @@ public class PartGear extends JCuboidPart implements JNormalOcclusion, TFacePart
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity)
|
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive)
|
||||||
{
|
{
|
||||||
if (!world().isRemote)
|
if (!world().isRemote && doReceive)
|
||||||
{
|
{
|
||||||
getNetwork().applyEnergy(torque, angularVelocity);
|
getNetwork().applyEnergy(torque, angularVelocity);
|
||||||
markRotationUpdate = true;
|
markRotationUpdate = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (long) (torque * angularVelocity);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -67,7 +67,7 @@ public class TraitMechanical extends TileMultipart implements IMechanical
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity)
|
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive)
|
||||||
{
|
{
|
||||||
TMultiPart part = this.partMap(from.ordinal());
|
TMultiPart part = this.partMap(from.ordinal());
|
||||||
|
|
||||||
|
@ -75,8 +75,10 @@ public class TraitMechanical extends TileMultipart implements IMechanical
|
||||||
{
|
{
|
||||||
if (this.mechanicalInterfaces.contains(part))
|
if (this.mechanicalInterfaces.contains(part))
|
||||||
{
|
{
|
||||||
((IMechanical) part).onReceiveEnergy(from, torque, angularVelocity);
|
return ((IMechanical) part).onReceiveEnergy(from, torque, angularVelocity, doReceive);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,5 +14,5 @@ public interface IMechanical extends IConnectable
|
||||||
* @param doReceive If false, the charge will only be simulated.
|
* @param doReceive If false, the charge will only be simulated.
|
||||||
* @return Amount of energy that was accepted by the block.
|
* @return Amount of energy that was accepted by the block.
|
||||||
*/
|
*/
|
||||||
public void onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity);
|
public long onReceiveEnergy(ForgeDirection from, long torque, float angularVelocity, boolean doReceive);
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,8 +44,36 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanicalCo
|
||||||
@Override
|
@Override
|
||||||
public void update()
|
public void update()
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Calculate load
|
||||||
|
*/
|
||||||
|
if (getPower() > 0)
|
||||||
|
{
|
||||||
|
float division = 0;
|
||||||
|
|
||||||
|
for (IMechanical node : this.getNodes())
|
||||||
|
{
|
||||||
|
for (ForgeDirection dir : handlerDirectionMap.get(node))
|
||||||
|
{
|
||||||
|
division += node.onReceiveEnergy(dir, torque, angularVelocity, false) / torque;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (division > 0)
|
||||||
|
{
|
||||||
|
torque /= division / 2;
|
||||||
|
angularVelocity /= division / 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update all connectors
|
||||||
|
*/
|
||||||
if (getPrevTorque() != getTorque() || getPrevAngularVelocity() != getAngularVelocity())
|
if (getPrevTorque() != getTorque() || getPrevAngularVelocity() != getAngularVelocity())
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Send network update packet for connectors.
|
||||||
|
*/
|
||||||
boolean isFirst = true;
|
boolean isFirst = true;
|
||||||
|
|
||||||
for (IMechanicalConnector connector : this.getConnectors())
|
for (IMechanicalConnector connector : this.getConnectors())
|
||||||
|
@ -60,11 +88,17 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanicalCo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (IMechanical node : this.getNodes())
|
/**
|
||||||
|
* Distribute energy to handlers
|
||||||
|
*/
|
||||||
|
if (getPower() > 0)
|
||||||
{
|
{
|
||||||
for (ForgeDirection dir : handlerDirectionMap.get(node))
|
for (IMechanical node : this.getNodes())
|
||||||
{
|
{
|
||||||
node.onReceiveEnergy(dir, torque, angularVelocity);
|
for (ForgeDirection dir : handlerDirectionMap.get(node))
|
||||||
|
{
|
||||||
|
node.onReceiveEnergy(dir, torque, angularVelocity, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue