summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2022-01-02 12:22:00 -0600
committercheapie <no-email-for-you@example.com>2022-01-02 12:22:00 -0600
commita98cf4b03d42d3836148da590bb0cde9f689037f (patch)
tree9a716141f55f35811a536834c1be2a902b2ff8b6
parentf82cae841e8ed96c03c7aaefbc26dbff2d811f2b (diff)
downloadmesecons-a98cf4b03d42d3836148da590bb0cde9f689037f.tar
mesecons-a98cf4b03d42d3836148da590bb0cde9f689037f.tar.gz
mesecons-a98cf4b03d42d3836148da590bb0cde9f689037f.tar.bz2
mesecons-a98cf4b03d42d3836148da590bb0cde9f689037f.tar.xz
mesecons-a98cf4b03d42d3836148da590bb0cde9f689037f.zip
Add pulse gate
Sends a mesecons signal of a fixed length (punch to adjust, like a delayer) when power is applied. Uses texture by numberZero from upstream #536
-rw-r--r--mesecons_gates/init.lua101
-rw-r--r--mesecons_gates/textures/jeija_gate_pulse.pngbin0 -> 122 bytes
-rw-r--r--mesecons_gates/textures/mesecons_gates_pulse_setting_1.pngbin0 -> 4837 bytes
-rw-r--r--mesecons_gates/textures/mesecons_gates_pulse_setting_2.pngbin0 -> 4817 bytes
-rw-r--r--mesecons_gates/textures/mesecons_gates_pulse_setting_3.pngbin0 -> 4845 bytes
-rw-r--r--mesecons_gates/textures/mesecons_gates_pulse_setting_4.pngbin0 -> 4832 bytes
6 files changed, 101 insertions, 0 deletions
diff --git a/mesecons_gates/init.lua b/mesecons_gates/init.lua
index c30f9f8..58872c8 100644
--- a/mesecons_gates/init.lua
+++ b/mesecons_gates/init.lua
@@ -165,3 +165,104 @@ register_gate("or", 2, function (val1, val2) return (val1 or val2) end,
{"", "mesecons:mesecon", "mesecons:mesecon"},
{"mesecons:mesecon", "", ""}},
"OR Gate")
+
+local pulsetime = { 0.1, 0.3, 0.5, 1.0 } --Same as the delayer
+
+local function pulsegate_on(pos,node)
+ local basename = "mesecons_gates:pulse_"
+ if string.sub(node.name,1,#basename) ~= basename or string.sub(node.name,-2,-1) == "on" then
+ --Gate no longer exists or is already on
+ return
+ end
+ local delay = tonumber(string.sub(node.name,#basename+1,#basename+1))
+ node.name = basename..delay.."_on"
+ minetest.swap_node(pos,node)
+ mesecon.receptor_on(pos,gate_get_output_rules(node))
+ if delay and pulsetime[delay] then minetest.get_node_timer(pos):start(pulsetime[delay]) end
+end
+
+local function pulsegate_off(pos)
+ local node = minetest.get_node(pos)
+ local basename = "mesecons_gates:pulse_"
+ if string.sub(node.name,1,#basename) ~= basename or string.sub(node.name,-3,-1) == "off" then
+ --Gate no longer exists or is already off
+ return
+ end
+ local delay = string.sub(node.name,#basename+1,#basename+1)
+ node.name = basename..delay.."_off"
+ minetest.swap_node(pos,node)
+ mesecon.receptor_off(pos,gate_get_output_rules(node))
+end
+
+for i=1,4,1 do
+ mesecon.register_node("mesecons_gates:pulse_"..i, {
+ description = "Logic Gate: Pulse",
+ inventory_image = "jeija_gate_off.png^jeija_gate_pulse.png",
+ paramtype = "light",
+ paramtype2 = "facedir",
+ is_ground_content = false,
+ drawtype = "nodebox",
+ drop = "mesecons_gates:pulse_1_off",
+ selection_box = selection_box,
+ node_box = nodebox,
+ walkable = true,
+ sounds = default.node_sound_stone_defaults(),
+ onstate = "mesecons_gates:pulse_"..i.."_on",
+ offstate = "mesecons_gates:pulse_"..i.."_off",
+ after_dig_node = mesecon.do_cooldown,
+ },{
+ tiles = {
+ "jeija_microcontroller_bottom.png^".."jeija_gate_off.png^"..
+ "jeija_gate_output_off.png^".."jeija_gate_pulse.png^".."mesecons_gates_pulse_setting_"..i..".png",
+ "jeija_microcontroller_bottom.png^".."jeija_gate_output_off.png^"..
+ "[transformFY",
+ "jeija_gate_side.png^".."jeija_gate_side_output_off.png",
+ "jeija_gate_side.png",
+ "jeija_gate_side.png",
+ "jeija_gate_side.png"
+ },
+ on_punch = function(pos, node, puncher)
+ if minetest.is_protected(pos, puncher and puncher:get_player_name() or "") then
+ return
+ end
+ minetest.swap_node(pos, {
+ name = "mesecons_gates:pulse_"..tostring(i % 4 + 1).."_off",
+ param2 = node.param2
+ })
+ end,
+ groups = i == 1 and {dig_immediate = 2} or {dig_immediate = 2,not_in_creative_inventory = 1},
+ mesecons = { receptor = {
+ state = "off",
+ rules = gate_get_output_rules
+ }, effector = {
+ rules = gate_get_input_rules_oneinput,
+ action_on = pulsegate_on,
+ }}
+ },{
+ tiles = {
+ "jeija_microcontroller_bottom.png^".."jeija_gate_on.png^"..
+ "jeija_gate_output_on.png^".."jeija_gate_pulse.png^".."mesecons_gates_pulse_setting_"..i..".png",
+ "jeija_microcontroller_bottom.png^".."jeija_gate_output_on.png^"..
+ "[transformFY",
+ "jeija_gate_side.png^".."jeija_gate_side_output_on.png",
+ "jeija_gate_side.png",
+ "jeija_gate_side.png",
+ "jeija_gate_side.png"
+ },
+ on_timer = pulsegate_off,
+ groups = {dig_immediate = 2, not_in_creative_inventory = 1},
+ mesecons = { receptor = {
+ state = "on",
+ rules = gate_get_output_rules
+ }}
+ })
+end
+
+minetest.register_craft({
+ output = "mesecons_gates:pulse_1_off",
+ recipe = {
+ {"group:mesecon_conductor_craftable","",""},
+ {"mesecons_materials:silicon","mesecons_materials:silicon","group:mesecon_conductor_craftable"},
+ {"group:mesecon_conductor_craftable","",""},
+ },
+})
diff --git a/mesecons_gates/textures/jeija_gate_pulse.png b/mesecons_gates/textures/jeija_gate_pulse.png
new file mode 100644
index 0000000..183ce4f
--- /dev/null
+++ b/mesecons_gates/textures/jeija_gate_pulse.png
Binary files differ
diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png
new file mode 100644
index 0000000..5c04ca1
--- /dev/null
+++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png
Binary files differ
diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png
new file mode 100644
index 0000000..6f670d4
--- /dev/null
+++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png
Binary files differ
diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png
new file mode 100644
index 0000000..67dc004
--- /dev/null
+++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png
Binary files differ
diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png
new file mode 100644
index 0000000..0bee893
--- /dev/null
+++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png
Binary files differ