diff --git a/mods/lzr_laser/blocks.lua b/mods/lzr_laser/blocks.lua index 0b0f10c..13d9755 100644 --- a/mods/lzr_laser/blocks.lua +++ b/mods/lzr_laser/blocks.lua @@ -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 }, })