1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00

Merge pull request #533 from metrostroi-repo/#525

#525
This commit is contained in:
CrIcKeT98
2022-07-25 19:08:50 +03:00
committed by GitHub

View File

@@ -488,6 +488,14 @@ Metrostroi.Current = 0
Metrostroi.PeopleOnRails = 0 Metrostroi.PeopleOnRails = 0
Metrostroi.VoltageRestoreTimer = 0 Metrostroi.VoltageRestoreTimer = 0
local function consumeFromFeeder(inCurrent, inFeeder)
if inFeeder then
Metrostroi.Currents[inFeeder] = Metrostroi.Currents[inFeeder] + inCurrent*0.4
else
Metrostroi.Current = Metrostroi.Current + inCurrent*0.4
end
end
local prevTime local prevTime
hook.Add("Think", "Metrostroi_ElectricConsumptionThink", function() hook.Add("Think", "Metrostroi_ElectricConsumptionThink", function()
-- Change in time -- Change in time
@@ -511,28 +519,33 @@ hook.Add("Think", "Metrostroi_ElectricConsumptionThink", function()
local trains = ents.FindByClass(class) local trains = ents.FindByClass(class)
for _,train in pairs(trains) do for _,train in pairs(trains) do
if train.Electric then if train.Electric then
Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts + math.max(0,(train.Electric.EnergyChange or 0)) if train.Electric.EnergyChange then Metrostroi.TotalRateWatts = Metrostroi.TotalRateWatts + math.max(0, train.Electric.EnergyChange) end
local current = math.max(0,(train.Electric.Itotal or 0)) - math.max(0,(train.Electric.Iexit or 0)) local current = math.max(0, train.Electric.Itotal or 0) - math.max(0, train.Electric.Iexit or 0)
local feeder = false
local fB = train.FrontBogey local fB = IsValid(train.FrontBogey) and train.FrontBogey
local rB = train.RearBogey local rB = IsValid(train.RearBogey) and train.RearBogey
if IsValid(fB) then if fB and (not fB.ContactStates or (not fB.ContactStates[1] and not fB.ContactStates[2])) then fB = nil end -- Don't have contact with TR
if fB.Feeder then if rB and (not rB.ContactStates or (not rB.ContactStates[1] and not rB.ContactStates[2])) then rB = nil end -- Don't have contact with TR
Metrostroi.Currents[fB.Feeder] = Metrostroi.Currents[fB.Feeder] + fB.DropByPeople+current*0.4
feeder = true local fBfeeder = fB and fB.Feeder
local rBfeeder = rB and rB.Feeder
if fBfeeder then
if not rBfeeder or fBfeeder == rBfeeder then
consumeFromFeeder(current, fBfeeder) -- Feeders are same
else else
Metrostroi.Current = Metrostroi.Current + fB.DropByPeople consumeFromFeeder(current * 0.5, fBfeeder) -- Feeders are different
end end
end end
if IsValid(rB) then
if rB.Feeder then if rBfeeder then
Metrostroi.Currents[rB.Feeder] = Metrostroi.Currents[rB.Feeder] + rB.DropByPeople+current*0.4 if not fBfeeder then
feeder = true consumeFromFeeder(current, rBfeeder) -- Feeders are same
else elseif fBfeeder ~= rBfeeder then
Metrostroi.Current = Metrostroi.Current + rB.DropByPeople consumeFromFeeder(current * 0.5, rBfeeder) -- Feeders are different
end end
end end
if not feeder then Metrostroi.Current = Metrostroi.Current + current*0.4 end if not rBfeeder and not fBfeeder then consumeFromFeeder(current) end
end end
end end
end end