diff options
| author | cheapie <no-email-for-you@example.com> | 2022-01-02 12:22:00 -0600 | 
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2022-01-02 12:22:00 -0600 | 
| commit | a98cf4b03d42d3836148da590bb0cde9f689037f (patch) | |
| tree | 9a716141f55f35811a536834c1be2a902b2ff8b6 | |
| parent | f82cae841e8ed96c03c7aaefbc26dbff2d811f2b (diff) | |
| download | mesecons-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.lua | 101 | ||||
| -rw-r--r-- | mesecons_gates/textures/jeija_gate_pulse.png | bin | 0 -> 122 bytes | |||
| -rw-r--r-- | mesecons_gates/textures/mesecons_gates_pulse_setting_1.png | bin | 0 -> 4837 bytes | |||
| -rw-r--r-- | mesecons_gates/textures/mesecons_gates_pulse_setting_2.png | bin | 0 -> 4817 bytes | |||
| -rw-r--r-- | mesecons_gates/textures/mesecons_gates_pulse_setting_3.png | bin | 0 -> 4845 bytes | |||
| -rw-r--r-- | mesecons_gates/textures/mesecons_gates_pulse_setting_4.png | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000..183ce4f --- /dev/null +++ b/mesecons_gates/textures/jeija_gate_pulse.png diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png Binary files differnew file mode 100644 index 0000000..5c04ca1 --- /dev/null +++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_1.png diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png Binary files differnew file mode 100644 index 0000000..6f670d4 --- /dev/null +++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_2.png diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png Binary files differnew file mode 100644 index 0000000..67dc004 --- /dev/null +++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_3.png diff --git a/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png b/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png Binary files differnew file mode 100644 index 0000000..0bee893 --- /dev/null +++ b/mesecons_gates/textures/mesecons_gates_pulse_setting_4.png  | 
