75 lines
1.7 KiB
Lua
75 lines
1.7 KiB
Lua
|
-- Logs minecart coordinates and speeds to console.
|
||
|
|
||
|
last_stats = last_stats or {}
|
||
|
|
||
|
function compare_one(vehicle)
|
||
|
local last = last_stats[vehicle.id]
|
||
|
local item = df.item.find(vehicle.item_id)
|
||
|
local ipos = item.pos
|
||
|
local new = {
|
||
|
ipos.x*100000 + vehicle.offset_x, vehicle.speed_x,
|
||
|
ipos.y*100000 + vehicle.offset_y, vehicle.speed_y,
|
||
|
ipos.z*100000 + vehicle.offset_z, vehicle.speed_z
|
||
|
}
|
||
|
|
||
|
if (last == nil) or item.flags.on_ground then
|
||
|
local delta = { vehicle.id }
|
||
|
local show = (last == nil)
|
||
|
|
||
|
for i=1,6 do
|
||
|
local rv = 0
|
||
|
if last then
|
||
|
rv = last[i]
|
||
|
end
|
||
|
delta[i*2] = new[i]/100000
|
||
|
local dv = new[i] - rv
|
||
|
delta[i*2+1] = dv/100000
|
||
|
if dv ~= 0 then
|
||
|
show = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if show then
|
||
|
print(table.unpack(delta))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
last_stats[vehicle.id] = new
|
||
|
end
|
||
|
|
||
|
function compare_all()
|
||
|
local seen = {}
|
||
|
for _,v in ipairs(df.global.world.vehicles.all) do
|
||
|
seen[v.id] = true
|
||
|
compare_one(v)
|
||
|
end
|
||
|
for k,v in pairs(last_stats) do
|
||
|
if not seen[k] then
|
||
|
print(k,'DEAD')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function start_timer()
|
||
|
if not dfhack.timeout_active(timeout_id) then
|
||
|
timeout_id = dfhack.timeout(1, 'ticks', function()
|
||
|
compare_all()
|
||
|
start_timer()
|
||
|
end);
|
||
|
if not timeout_id then
|
||
|
dfhack.printerr('Could not start timer in watch-minecarts')
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
compare_all()
|
||
|
|
||
|
local cmd = ...
|
||
|
|
||
|
if cmd == 'start' then
|
||
|
start_timer()
|
||
|
elseif cmd == 'stop' then
|
||
|
dfhack.timeout_active(timeout_id, nil)
|
||
|
end
|
||
|
|