mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-25 20:11:06 +01:00
speedup mcl_observer
This commit is contained in:
parent
138a3cd154
commit
00063cde73
2 changed files with 46 additions and 42 deletions
|
@ -2,6 +2,10 @@ local S = minetest.get_translator("mcl_observers")
|
|||
|
||||
mcl_observers = {}
|
||||
|
||||
local string = string
|
||||
|
||||
local get_node = get_node
|
||||
|
||||
-- Warning! TODO: Remove this message.
|
||||
-- 'realtime' is experimental feature! It can slow down the everything!
|
||||
-- Please set it to false and restart the game if something's wrong:
|
||||
|
@ -24,7 +28,7 @@ local rules_up = {{ x = 0, y = -1, z = 0, spread = true }}
|
|||
|
||||
function mcl_observers.observer_activate(pos)
|
||||
minetest.after(mcl_vars.redstone_tick, function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local node = get_node(pos)
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
|
@ -47,7 +51,7 @@ end
|
|||
-- TODO: Also scan metadata changes.
|
||||
-- TODO: Ignore some node changes.
|
||||
local function observer_scan(pos, initialize)
|
||||
local node = minetest.get_node(pos)
|
||||
local node = get_node(pos)
|
||||
local front
|
||||
if node.name == "mcl_observers:observer_up_off" or node.name == "mcl_observers:observer_up_on" then
|
||||
front = vector.add(pos, {x=0, y=1, z=0})
|
||||
|
@ -56,7 +60,7 @@ local function observer_scan(pos, initialize)
|
|||
else
|
||||
front = vector.add(pos, minetest.facedir_to_dir(node.param2))
|
||||
end
|
||||
local frontnode = minetest.get_node(front)
|
||||
local frontnode = get_node(front)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local oldnode = meta:get_string("node_name")
|
||||
local oldparam2 = meta:get_string("node_param2")
|
||||
|
@ -94,7 +98,7 @@ local function observer_orientate(pos, placer)
|
|||
-- Placer pitch in degrees
|
||||
local pitch = placer:get_look_vertical() * (180 / math.pi)
|
||||
|
||||
--local node = minetest.get_node(pos)
|
||||
--local node = get_node(pos)
|
||||
if pitch > 55 then -- player looking upwards
|
||||
-- Observer looking downwards
|
||||
minetest.set_node(pos, {name="mcl_observers:observer_down_off"})
|
||||
|
@ -156,7 +160,7 @@ mesecon.register_node("mcl_observers:observer", {
|
|||
timer:start(mcl_vars.redstone_tick)
|
||||
end,
|
||||
on_timer = function(pos, elapsed)
|
||||
local node = minetest.get_node(pos)
|
||||
local node = get_node(pos)
|
||||
minetest.set_node(pos, {name = "mcl_observers:observer_off", param2 = node.param2})
|
||||
mesecon.receptor_off(pos, get_rules_flat(node))
|
||||
end,
|
||||
|
@ -208,7 +212,7 @@ mesecon.register_node("mcl_observers:observer_down", {
|
|||
timer:start(mcl_vars.redstone_tick)
|
||||
end,
|
||||
on_timer = function(pos, elapsed)
|
||||
local node = minetest.get_node(pos)
|
||||
local node = get_node(pos)
|
||||
minetest.set_node(pos, {name = "mcl_observers:observer_down_off", param2 = node.param2})
|
||||
mesecon.receptor_off(pos, rules_down)
|
||||
end,
|
||||
|
@ -291,138 +295,138 @@ if realtime then
|
|||
mcl_observers.remove_node = minetest.remove_node
|
||||
mcl_observers.bulk_set_node = minetest.bulk_set_node
|
||||
|
||||
minetest.add_node=function(pos,node)
|
||||
function minetest.add_node(pos,node)
|
||||
mcl_observers.add_node(pos,node)
|
||||
local n=minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
local n = get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
n = get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then
|
||||
mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
end
|
||||
end
|
||||
minetest.set_node=function(pos,node)
|
||||
function minetest.set_node(pos,node)
|
||||
mcl_observers.set_node(pos,node)
|
||||
local n=minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
local n = get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
n = get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then
|
||||
mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
end
|
||||
end
|
||||
minetest.swap_node=function(pos,node)
|
||||
function minetest.swap_node(pos,node)
|
||||
mcl_observers.swap_node(pos,node)
|
||||
local n=minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
local n = get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
n = get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then
|
||||
mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
end
|
||||
end
|
||||
minetest.remove_node=function(pos)
|
||||
function minetest.remove_node(pos)
|
||||
mcl_observers.remove_node(pos)
|
||||
local n=minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
local n = get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
n = get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then
|
||||
mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
end
|
||||
end
|
||||
minetest.bulk_set_node=function(lst, node)
|
||||
function minetest.bulk_set_node(lst, node)
|
||||
mcl_observers.bulk_set_node(lst, node)
|
||||
for _, pos in pairs(lst) do
|
||||
local n=minetest.get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
local n = get_node({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x+1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
n = get_node({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).x==1 then
|
||||
mcl_observers.observer_activate({x=pos.x-1,y=pos.y,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==-1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z+1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
n = get_node({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_o" and minetest.facedir_to_dir(n.param2).z==1 then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y,z=pos.z-1})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_u" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
n=minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
n = get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
if n and n.name and string.sub(n.name,1,24)=="mcl_observers:observer_d" then
|
||||
mcl_observers.observer_activate({x=pos.x,y=pos.y+1,z=pos.z})
|
||||
end
|
||||
|
|
|
@ -1869,7 +1869,7 @@ minetest.register_on_generated(function(minp, maxp, blockseed)
|
|||
mcl_vars.add_chunk(minp)
|
||||
end)
|
||||
|
||||
minetest.register_on_generated=function(node_function)
|
||||
function minetest.register_on_generated(node_function)
|
||||
mcl_mapgen_core.register_generator("mod_"..tostring(#registered_generators+1), nil, node_function)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue