[1.1.76] mining time off by one tick sometimes
Posted: Fri Jan 27, 2023 9:39 am
Hello :D
I have noticed that when the character is mining an entity, it finishes mining one tick faster than when it should based on the `mining_speed` and `mining_time` but only for some combinations of `mining_speed` and `mine_time`.
I have measured some combinations of `mining_speed` and `mine_time` but failed to notice a pattern.
measurements: https://docs.google.com/spreadsheets/d/ ... sp=sharing
I suspect inaccurate float representation and then a round down at the end but I am not sure.
I know that this is probably only problem for me because I'm trying to predict the mine times so if it is not worth developer time to fix this It would be awesome if someone noticed the pattern when the mine action takes one tick less.
code used for measurements:
Thanks!
I have noticed that when the character is mining an entity, it finishes mining one tick faster than when it should based on the `mining_speed` and `mining_time` but only for some combinations of `mining_speed` and `mine_time`.
I have measured some combinations of `mining_speed` and `mine_time` but failed to notice a pattern.
measurements: https://docs.google.com/spreadsheets/d/ ... sp=sharing
I suspect inaccurate float representation and then a round down at the end but I am not sure.
I know that this is probably only problem for me because I'm trying to predict the mine times so if it is not worth developer time to fix this It would be awesome if someone noticed the pattern when the mine action takes one tick less.
code used for measurements:
Code: Select all
local last = false
local start = 0
script.on_event(defines.events.on_tick, function()
---@type LuaPlayer
local player = game.players[1]
local now = player.mining_state.mining
if now ~= last then
if now then -- started mining
start = game.tick
local prototype = player.selected.prototype
local mining_time = prototype.mineable_properties.mining_time
local player_prototype = game.entity_prototypes['character']
local mining_speed = player_prototype.mining_speed
local prediction = (mining_time / mining_speed) * 60
game.print('prediction: ' .. prediction ..
' mining_time: ' .. mining_time ..
' mining_speed: ' .. mining_speed
)
else -- stopped mining
game.print('actual time: ' .. (game.tick - start) - 1)
-- minus one because on the current tick the entity is already gone
end
end
last = now
end)