89 lines
3.1 KiB
C#
89 lines
3.1 KiB
C#
namespace Content.Server.Power.Pow3r
|
|
{
|
|
public static class PowerSolverShared
|
|
{
|
|
public static void UpdateRampPositions(float frameTime, PowerState state)
|
|
{
|
|
// Update supplies to move their ramp position towards target, if necessary.
|
|
foreach (var supply in state.Supplies.Values)
|
|
{
|
|
if (supply.Paused)
|
|
continue;
|
|
|
|
if (!supply.Enabled)
|
|
{
|
|
// If disabled, set ramp to 0.
|
|
supply.SupplyRampPosition = 0;
|
|
continue;
|
|
}
|
|
|
|
var rampDev = supply.SupplyRampTarget - supply.SupplyRampPosition;
|
|
if (Math.Abs(rampDev) > 0.001f)
|
|
{
|
|
float newPos;
|
|
if (rampDev > 0)
|
|
{
|
|
// Position below target, go up.
|
|
newPos = Math.Min(
|
|
supply.SupplyRampTarget,
|
|
supply.SupplyRampPosition + supply.SupplyRampRate * frameTime);
|
|
}
|
|
else
|
|
{
|
|
// Other way around, go down
|
|
newPos = Math.Max(
|
|
supply.SupplyRampTarget,
|
|
supply.SupplyRampPosition - supply.SupplyRampRate * frameTime);
|
|
}
|
|
|
|
supply.SupplyRampPosition = Math.Clamp(newPos, 0, supply.MaxSupply);
|
|
}
|
|
else
|
|
{
|
|
supply.SupplyRampPosition = supply.SupplyRampTarget;
|
|
}
|
|
}
|
|
|
|
// Batteries too.
|
|
foreach (var battery in state.Batteries.Values)
|
|
{
|
|
if (battery.Paused)
|
|
continue;
|
|
|
|
if (!battery.Enabled)
|
|
{
|
|
// If disabled, set ramp to 0.
|
|
battery.SupplyRampPosition = 0;
|
|
continue;
|
|
}
|
|
|
|
var rampDev = battery.SupplyRampTarget - battery.SupplyRampPosition;
|
|
if (Math.Abs(rampDev) > 0.001f)
|
|
{
|
|
float newPos;
|
|
if (rampDev > 0)
|
|
{
|
|
// Position below target, go up.
|
|
newPos = Math.Min(
|
|
battery.SupplyRampTarget,
|
|
battery.SupplyRampPosition + battery.SupplyRampRate * frameTime);
|
|
}
|
|
else
|
|
{
|
|
// Other way around, go down
|
|
newPos = Math.Max(
|
|
battery.SupplyRampTarget,
|
|
battery.SupplyRampPosition - battery.SupplyRampRate * frameTime);
|
|
}
|
|
|
|
battery.SupplyRampPosition = Math.Clamp(newPos, 0, battery.MaxSupply);
|
|
}
|
|
else
|
|
{
|
|
battery.SupplyRampPosition = battery.SupplyRampTarget;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|