initial gates commit, logic behind gates works, more work to do.
							
								
								
									
										2
									
								
								mesecons_gates/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,2 @@ | |||||||
|  | mesecons | ||||||
|  | mesecons_microcontroller | ||||||
							
								
								
									
										124
									
								
								mesecons_gates/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,124 @@ | |||||||
|  | gates = {"diode", "not", "nand", "and", "xor"} | ||||||
|  | for g in ipairs(gates) do gate = gates[g] | ||||||
|  |  | ||||||
|  | 	inrules = {} | ||||||
|  | 	outrules = {} | ||||||
|  | 	rules = {} | ||||||
|  | 	table.insert(outrules, {x=1, y=0, z=0}) | ||||||
|  | 	table.insert(rules, {x=1, y=0, z=0}) | ||||||
|  | 	if g < 3 then | ||||||
|  | 		table.insert(inrules, {x=-1, y=0, z=0}) | ||||||
|  | 		table.insert(rules, {x=-1, y=0, z=0}) | ||||||
|  | 	else | ||||||
|  | 		table.insert(inrules, {x=0, y=0, z=1}) | ||||||
|  | 		table.insert(rules, {x=0, y=0, z=1}) | ||||||
|  | 		table.insert(inrules, {x=0, y=0, z=-1}) | ||||||
|  | 		table.insert(rules, {x=0, y=0, z=-1}) | ||||||
|  | 	end | ||||||
|  | 	--table.insert(rules, inrules) | ||||||
|  | 	--table.insert(rules, outrules) | ||||||
|  |  | ||||||
|  | 	for on=0,1 do | ||||||
|  | 		if on == 1 then | ||||||
|  | 			onoff = "on" | ||||||
|  | 		else | ||||||
|  | 			onoff = "off" | ||||||
|  | 		end | ||||||
|  | 		if on == 1 then | ||||||
|  | 			groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 3} | ||||||
|  | 		else | ||||||
|  | 			groups = {dig_immediate=2, mesecon = 3} | ||||||
|  | 		end | ||||||
|  |  | ||||||
|  | 		nodename = "mesecons_gates:"..gate.."_"..onoff | ||||||
|  |  | ||||||
|  | 		minetest.register_node(nodename, { | ||||||
|  | 			description = gate.." Gate", | ||||||
|  | 			drawtype = "normal", | ||||||
|  | 			tiles = { | ||||||
|  | 				"jeija_gate_"..onoff..".png^".. | ||||||
|  | 				"jeija_gate_"..gate..".png", | ||||||
|  | 			}, | ||||||
|  | 			walkable = true, | ||||||
|  | 			on_construct = function(pos) | ||||||
|  | 				update_gate(pos) | ||||||
|  | 			end, | ||||||
|  | 			groups = groups, | ||||||
|  |  | ||||||
|  | 		}) | ||||||
|  |  | ||||||
|  | 		mesecon:add_rules(gate,outrules) | ||||||
|  | 		mesecon:register_effector(nodename, nodename, rules) | ||||||
|  | 		--if on then | ||||||
|  | 		--	mesecon:add_receptor_node(nodename, outrules) | ||||||
|  | 		--end | ||||||
|  | 		--mesecon:add_receptor_node("mesecons_gates:and_off",  | ||||||
|  | 		--mesecon:add_receptor_node("mesecons_gates:and_on",  | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | function get_gate(pos) | ||||||
|  | 	string = minetest.env:get_node(pos).name | ||||||
|  | 	string = string.gsub(string, "mesecons_gates:", "") | ||||||
|  | 	--gate | ||||||
|  | 	string = string.gsub(string, "_on", "") | ||||||
|  | 	string = string.gsub(string, "_off", "") | ||||||
|  | 	return string | ||||||
|  | end | ||||||
|  |  | ||||||
|  | function gate_state(pos) | ||||||
|  | 	name = minetest.env:get_node(pos).name | ||||||
|  | 	if string.find(name, "off")~=nil then | ||||||
|  | 		return false | ||||||
|  | 	else | ||||||
|  | 		return true | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | --[[ | ||||||
|  | function gate_on(pos) | ||||||
|  | 	if !gate_state(pos) then | ||||||
|  | 		minetest.env:add_node("mesecons_gates:"..get_gate(pos).."_on") | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | function gate_off(pos) | ||||||
|  | 	if gate_state(pos) then | ||||||
|  | 		minetest.env:add_node("mesecons_gates:"..get_gate(pos).."_off") | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  | --]] | ||||||
|  | function set_gate(pos, open) | ||||||
|  | 	if open then | ||||||
|  | 		if not gate_state(pos) then | ||||||
|  | 			minetest.env:add_node(pos, {name="mesecons_gates:"..get_gate(pos).."_on"}) | ||||||
|  | 		end | ||||||
|  | 	else | ||||||
|  | 		if gate_state(pos) then | ||||||
|  | 			minetest.env:add_node(pos, {name="mesecons_gates:"..get_gate(pos).."_off"}) | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | function update_gate(pos) | ||||||
|  | 	gate = get_gate(pos) | ||||||
|  | 	L = yc_get_real_portstates(pos) | ||||||
|  | 	if gate == "diode" then | ||||||
|  | 		set_gate(pos, L.a)	 | ||||||
|  | 	elseif gate == "not" then | ||||||
|  | 		set_gate(pos, not L.a) | ||||||
|  | 	elseif gate == "nand" then | ||||||
|  | 		set_gate(pos, not(L.b and L.d)) | ||||||
|  | 	elseif gate == "and" then | ||||||
|  | 		set_gate(pos, L.b and L.d) | ||||||
|  | 	else--if gate == "xor" then | ||||||
|  | 		set_gate(pos, (L.b and not L.d) or (not L.b and L.d)) | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | mesecon:register_on_signal_change(function(pos,node) | ||||||
|  | 	if string.find(node.name, "mesecons_gates:")~=nil then | ||||||
|  | 		update_gate(pos) | ||||||
|  | 	end | ||||||
|  | end) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_and.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 233 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_diode.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 231 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_nand.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 251 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_not.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 241 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_off.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 195 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_on.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 195 B | 
							
								
								
									
										
											BIN
										
									
								
								mesecons_textures/textures/jeija_gate_xor.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 245 B |