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  |