generated from your-land/yl_template
76 lines
2.1 KiB
Lua
76 lines
2.1 KiB
Lua
--[[ Performance test
|
|
local bucket = 0
|
|
local numz = 0
|
|
|
|
local function gs(dtime)
|
|
if bucket > 0 then
|
|
core.log("action",
|
|
"dtime =" .. dump(dtime) .. ", bucket= " .. dump(bucket) ..
|
|
", numz=" .. dump(numz) .. ", avg=" .. dump(bucket / numz))
|
|
end
|
|
bucket = 0
|
|
numz = 0
|
|
end
|
|
|
|
core.register_globalstep(gs)
|
|
|
|
-- on_timer
|
|
|
|
local function on_timer(pos, elapsed)
|
|
|
|
local t1 = core.get_us_time()
|
|
numz = numz + 1
|
|
|
|
local node = minetest.get_node(pos)
|
|
|
|
local stage = minetest.registered_nodes[node.name]._stage
|
|
local target_nodename
|
|
local timer = 0
|
|
local duration
|
|
|
|
if (stage == nil) or (stage.next_stages == nil) then
|
|
yl_api_nodestages.remove_timer(pos)
|
|
bucket = bucket + (core.get_us_time() - t1)
|
|
return
|
|
end
|
|
|
|
repeat
|
|
duration = stage.duration
|
|
timer = timer + duration
|
|
target_nodename = get_target_nodename(node, pos, stage.next_stages)
|
|
|
|
if (target_nodename == yl_api_nodestages.error) then
|
|
-- Thing kaputt, stop it.
|
|
minetest.log("error", yl_api_nodestages.t("undefined_state_abort"))
|
|
yl_api_nodestages.remove_timer(pos)
|
|
bucket = bucket + (core.get_us_time() - t1)
|
|
return
|
|
end
|
|
|
|
if (target_nodename == nil) then
|
|
-- Fallback to last known target_nodename
|
|
target_nodename = stage.stage_name
|
|
break
|
|
else
|
|
-- Last stage most often does not have a _stage
|
|
stage = minetest.registered_nodes[target_nodename] and
|
|
minetest.registered_nodes[target_nodename]._stage or nil
|
|
end
|
|
until ((timer >= elapsed) or (stage == nil) or (stage.duration == 0))
|
|
|
|
if (node.name == target_nodename) then
|
|
bucket = bucket + (core.get_us_time() - t1)
|
|
return true
|
|
end
|
|
|
|
minetest.set_node(pos, {name = target_nodename})
|
|
|
|
local remaining = timer - elapsed
|
|
if (stage and stage.duration and (remaining > 0)) then
|
|
local nodetimer = minetest.get_node_timer(pos)
|
|
nodetimer:set(stage.duration, remaining)
|
|
end
|
|
bucket = bucket + (core.get_us_time() - t1)
|
|
end
|
|
|
|
]]-- |