Refactor laser blocks

master
Wuzzy 2021-12-26 05:07:26 +01:00
parent c97838477f
commit b6d29a4444
1 changed files with 48 additions and 81 deletions

View File

@ -100,10 +100,31 @@ local after_rotate = function()
full_update()
end
minetest.register_node("lzr_laser:mirror", {
local register_element = function(subname, def)
local def_core = table.copy(def)
def_core.after_place_node = full_update
def_core.after_dig_node = full_update
def_core.after_rotate = after_rotate
def_core.sounds = lzr_sounds.node_sound_wood_defaults()
def_core._lzr_active = "lzr_laser:"..subname.."_on"
def_core.tiles = def.tiles_off
def_core.groups[subname] = 1
local def_on = table.copy(def_core)
def_on._lzr_active = nil
def_on._lzr_inactive = "lzr_laser:"..subname
def_on.tiles = def.tiles_on
def_on.drop = "lzr_laser:"..subname
def_on.groups[subname] = 2
minetest.register_node("lzr_laser:"..subname, def_core)
minetest.register_node("lzr_laser:"..subname.."_on", def_on)
end
register_element("mirror", {
description = S("Mirror"),
paramtype2 = "facedir",
tiles = {
tiles_off = {
"lzr_laser_mirror_top.png",
"lzr_laser_mirror_top.png^[transformFY",
"lzr_laser_mirror_hole.png",
@ -111,20 +132,7 @@ minetest.register_node("lzr_laser:mirror", {
"lzr_laser_mirror_block.png",
"lzr_laser_mirror_hole.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { rotatable = 1, mirror = 1, laser_block = 1, dig_immediate = 3 },
_lzr_active = "lzr_laser:mirror_on",
})
minetest.register_node("lzr_laser:mirror_on", {
description = S("Mirror (active)"),
paramtype2 = "facedir",
tiles = {
tiles_on = {
"lzr_laser_mirror_on_top.png",
"lzr_laser_mirror_on_top.png^[transformFY",
"lzr_laser_mirror_on_hole.png",
@ -132,20 +140,13 @@ minetest.register_node("lzr_laser:mirror_on", {
"lzr_laser_mirror_on_block.png",
"lzr_laser_mirror_on_hole.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { rotatable = 1, mirror = 2, laser_block = 1, dig_immediate = 3, not_in_creative_inventory = 1 },
_lzr_inactive = "lzr_laser:mirror",
drop = "lzr_laser:mirror",
groups = { rotatable = 1, laser_block = 1, dig_immediate = 3 },
})
minetest.register_node("lzr_laser:emitter", {
register_element("emitter", {
description = S("Emitter"),
paramtype2 = "facedir",
tiles = {
tiles_off = {
"lzr_laser_emitter.png",
"lzr_laser_emitter.png",
"lzr_laser_emitter.png",
@ -153,57 +154,42 @@ minetest.register_node("lzr_laser:emitter", {
"lzr_laser_emitter.png",
"lzr_laser_emitter_front.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
on_rightclick = function(pos, node)
minetest.swap_node(pos, {name="lzr_laser:emitter_on", param2=node.param2})
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
end,
on_punch = function(pos, node)
minetest.swap_node(pos, {name="lzr_laser:emitter_on", param2=node.param2})
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
end,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { emitter = 1, laser_block = 1, choppy = 3 },
_lzr_active = "lzr_laser:emitter_on",
})
minetest.register_node("lzr_laser:emitter_on", {
description = S("Emitter (active)"),
paramtype2 = "facedir",
tiles = {
tiles_on = {
"lzr_laser_emitter_on.png",
"lzr_laser_emitter_on.png",
"lzr_laser_emitter_on.png",
"lzr_laser_emitter_on.png",
"lzr_laser_emitter_on.png",
"lzr_laser_emitter_on_front.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
},
on_rightclick = function(pos, node)
minetest.swap_node(pos, {name="lzr_laser:emitter", param2=node.param2})
local nname
if node.name == "lzr_laser:emitter" then
nname = "lzr_laser:emitter_on"
else
nname = "lzr_laser:emitter"
end
minetest.swap_node(pos, {name=nname, param2=node.param2})
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
end,
on_punch = function(pos, node)
minetest.swap_node(pos, {name="lzr_laser:emitter", param2=node.param2})
local nname
if node.name == "lzr_laser:emitter" then
nname = "lzr_laser:emitter_on"
else
nname = "lzr_laser:emitter"
end
minetest.swap_node(pos, {name=nname, param2=node.param2})
lzr_laser.full_laser_update(lzr_globals.PLAYFIELD_START, lzr_globals.PLAYFIELD_END)
end,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { emitter = 2, laser_block = 1, choppy = 3 },
_lzr_inactive = "lzr_laser:emitter",
groups = { laser_block = 1 },
})
minetest.register_node("lzr_laser:detector", {
register_element("detector", {
description = S("Detector"),
paramtype2 = "facedir",
tiles = {
tiles_off = {
"lzr_laser_detector.png",
"lzr_laser_detector.png",
"lzr_laser_detector.png",
@ -211,19 +197,7 @@ minetest.register_node("lzr_laser:detector", {
"lzr_laser_detector.png",
"lzr_laser_detector_front.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { detector = 1, laser_block = 1, choppy = 3 },
_lzr_active = "lzr_laser:detector_on",
})
minetest.register_node("lzr_laser:detector_on", {
description = S("Detector (active)"),
paramtype2 = "facedir",
tiles = {
tiles_on = {
"lzr_laser_detector_on.png",
"lzr_laser_detector_on.png",
"lzr_laser_detector_on.png",
@ -231,13 +205,6 @@ minetest.register_node("lzr_laser:detector_on", {
"lzr_laser_detector_on.png",
"lzr_laser_detector_on_front.png",
},
after_place_node = full_update,
after_dig_node = full_update,
after_rotate = after_rotate,
sounds = lzr_sounds.node_sound_wood_defaults(),
groups = { detector = 2, laser_block = 1, choppy = 3, not_in_creative_inventory = 1 },
_lzr_inactive = "lzr_laser:detector",
drop = "lzr_laser:detector",
groups = { laser_block = 1 },
})