Relay fix attempt number n
This commit is contained in:
@@ -132,6 +132,8 @@ namespace Barotrauma.Items.Components
|
|||||||
PowerTransfer pt = p as PowerTransfer;
|
PowerTransfer pt = p as PowerTransfer;
|
||||||
if (pt == null) continue;
|
if (pt == null) continue;
|
||||||
|
|
||||||
|
if (pt is RelayComponent != this is RelayComponent) continue;
|
||||||
|
|
||||||
pt.powerLoad += (fullLoad - pt.powerLoad) / inertia;
|
pt.powerLoad += (fullLoad - pt.powerLoad) / inertia;
|
||||||
pt.currPowerConsumption += (-fullPower - pt.currPowerConsumption) / inertia;
|
pt.currPowerConsumption += (-fullPower - pt.currPowerConsumption) / inertia;
|
||||||
pt.Item.SendSignal(0, "", "power", null, fullPower / Math.Max(fullLoad, 1.0f));
|
pt.Item.SendSignal(0, "", "power", null, fullPower / Math.Max(fullLoad, 1.0f));
|
||||||
@@ -140,6 +142,10 @@ namespace Barotrauma.Items.Components
|
|||||||
//damage the item if voltage is too high
|
//damage the item if voltage is too high
|
||||||
//(except if running as a client)
|
//(except if running as a client)
|
||||||
if (GameMain.Client != null) continue;
|
if (GameMain.Client != null) continue;
|
||||||
|
|
||||||
|
//relays don't blow up if the power is higher than load, only if the output is high enough
|
||||||
|
//(i.e. enough power passing through the relay)
|
||||||
|
if (this is RelayComponent) continue;
|
||||||
if (-pt.currPowerConsumption < Math.Max(pt.powerLoad * Rand.Range(1.9f, 2.1f), 200.0f)) continue;
|
if (-pt.currPowerConsumption < Math.Max(pt.powerLoad * Rand.Range(1.9f, 2.1f), 200.0f)) continue;
|
||||||
|
|
||||||
float prevCondition = pt.item.Condition;
|
float prevCondition = pt.item.Condition;
|
||||||
@@ -165,7 +171,6 @@ namespace Barotrauma.Items.Components
|
|||||||
new FireSource(pt.item.WorldPosition);
|
new FireSource(pt.item.WorldPosition);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,9 +255,12 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
//a recursive function that goes through all the junctions and adds up
|
//a recursive function that goes through all the junctions and adds up
|
||||||
//all the generated/consumed power of the constructions connected to the grid
|
//all the generated/consumed power of the constructions connected to the grid
|
||||||
private void CheckJunctions(float deltaTime)
|
private void CheckJunctions(float deltaTime, bool increaseUpdateCount = true, bool inputOnly = false)
|
||||||
{
|
{
|
||||||
updateCount = 1;
|
if (increaseUpdateCount)
|
||||||
|
{
|
||||||
|
updateCount = 1;
|
||||||
|
}
|
||||||
connectedList.Add(this);
|
connectedList.Add(this);
|
||||||
|
|
||||||
ApplyStatusEffects(ActionType.OnActive, deltaTime, null);
|
ApplyStatusEffects(ActionType.OnActive, deltaTime, null);
|
||||||
@@ -278,8 +286,17 @@ namespace Barotrauma.Items.Components
|
|||||||
PowerTransfer powerTransfer = powered as PowerTransfer;
|
PowerTransfer powerTransfer = powered as PowerTransfer;
|
||||||
if (powerTransfer != null)
|
if (powerTransfer != null)
|
||||||
{
|
{
|
||||||
if (!powerTransfer.CanTransfer) continue;
|
if (this is RelayComponent == powerTransfer is RelayComponent)
|
||||||
powerTransfer.CheckJunctions(deltaTime);
|
{
|
||||||
|
if (!powerTransfer.CanTransfer) continue;
|
||||||
|
powerTransfer.CheckJunctions(deltaTime, true, inputOnly);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!powerTransfer.CanTransfer) continue;
|
||||||
|
powerTransfer.CheckJunctions(deltaTime, false, !c.IsOutput);
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,7 +305,7 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (recipient.Name == "power_in")
|
if (recipient.Name == "power_in")
|
||||||
{
|
{
|
||||||
fullLoad += powerContainer.CurrPowerConsumption;
|
if (!inputOnly) fullLoad += powerContainer.CurrPowerConsumption;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -301,7 +318,7 @@ namespace Barotrauma.Items.Components
|
|||||||
//positive power consumption = the construction requires power -> increase load
|
//positive power consumption = the construction requires power -> increase load
|
||||||
if (powered.CurrPowerConsumption > 0.0f)
|
if (powered.CurrPowerConsumption > 0.0f)
|
||||||
{
|
{
|
||||||
fullLoad += powered.CurrPowerConsumption;
|
if (!inputOnly) fullLoad += powered.CurrPowerConsumption;
|
||||||
}
|
}
|
||||||
else if (powered.CurrPowerConsumption < 0.0f)
|
else if (powered.CurrPowerConsumption < 0.0f)
|
||||||
//negative power consumption = the construction is a
|
//negative power consumption = the construction is a
|
||||||
|
|||||||
Reference in New Issue
Block a user