Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

57 lines
2.0 KiB
Lua

local misc = require("__flib__.misc")
local constants = require("constants")
-- Code based on "improved research queue" by sonaxaton
-- https://github.com/dbeckwith/factorio-research-queue/blob/af6404ab696502a86eec40a4baf7fe00d0c714c7/control.lua#L316
return function()
local strings = {}
for _, force in pairs(game.forces) do
local tech = force.current_research
if tech then
-- Retrieve or create progress samples table
local progress_samples = global.research_progress_samples[force.index]
if not progress_samples then
progress_samples = {}
global.research_progress_samples[force.index] = progress_samples
end
progress_samples[#progress_samples + 1] = { tech = tech.name, progress = force.research_progress }
if #progress_samples > constants.research_progress_samples_count then
table.remove(progress_samples, 1)
end
local estimated_ticks = 0
local num_samples = 0
if #progress_samples > 1 then
for i = 2, #progress_samples do
local previous_sample = progress_samples[i - 1]
local current_sample = progress_samples[i]
if previous_sample.tech == current_sample.tech then
-- How much the progress increased per tick
local speed = (current_sample.progress - previous_sample.progress) / 60
-- Don't add if the speed is negative for whatever reason
if speed > 0 then
-- How many ticks left until the research is finished
estimated_ticks = estimated_ticks + ((1 - current_sample.progress) / speed)
num_samples = num_samples + 1
end
end
end
-- Rolling average
if num_samples > 0 then
estimated_ticks = estimated_ticks / num_samples
end
end
if num_samples > 0 then
strings[force.index] = misc.ticks_to_timestring(estimated_ticks)
else
strings[force.index] = ""
end
end
end
global.research_progress_strings = strings
end