forked from minetest-mods/mesecons
		
	crossing wire moved into mesecons
This commit is contained in:
		
							
								
								
									
										1
									
								
								mesecons_extrawires/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								mesecons_extrawires/depends.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| mesecons | ||||
							
								
								
									
										138
									
								
								mesecons_extrawires/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								mesecons_extrawires/init.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,138 @@ | ||||
| for x=-1, 1 do for z=-1, 1 do | ||||
| 	rules = {} | ||||
| 	nodename = "mesecons_extrawires:crossing" | ||||
| 	if x == -1 then | ||||
| 		nodename = nodename .. "A" | ||||
| 		table.insert(rules, {x=-1, y=0, z=0}) | ||||
| 	end | ||||
| 	if z == 1 then | ||||
| 		nodename = nodename .. "B" | ||||
| 		table.insert(rules, {x=0, y=0, z=1}) | ||||
| 	end | ||||
| 	if x == 1 then | ||||
| 		nodename = nodename .. "C" | ||||
| 		table.insert(rules, {x=1, y=0, z=0}) | ||||
| 	end | ||||
| 	if z == -1 then | ||||
| 		nodename = nodename .. "D" | ||||
| 		table.insert(rules, {x=0, y=0, z=-1}) | ||||
| 	end | ||||
| 	mesecon:add_rules(nodename, rules) | ||||
| 	mesecon:register_effector(nodename, nodename, all_rules) | ||||
| 	if nodename == "mesecons_extrawires:crossing" then | ||||
| 		description = "Insulated Crossing" | ||||
| 		groups = {dig_immediate = 3, mesecon = 3, mesecon_conductor_craftable=1} | ||||
| 	else | ||||
| 		description = "You hacker you!" | ||||
| 		drop = "mesecons_extrawires:crossing" | ||||
| 		groups = {dig_immediate = 3, not_in_creative_inventory=1, mesecon = 3} | ||||
| 		mesecon:add_receptor_node(nodename, rules) | ||||
| 	end | ||||
| 	minetest.register_node(nodename, { | ||||
| 		drawtype = "nodebox", | ||||
| 		description = description, | ||||
| 		tiles = { | ||||
| 			"jeija_insulated_wire_sides.png", | ||||
| 		}, | ||||
| 		paramtype = "light", | ||||
| 		walkable = false, | ||||
| 		stack_max = 99, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = { -16/32-0.0001, -18/32, -16/32-0.001, 16/32+0.001, -5/32, 16/32+0.001 }, | ||||
| 		}, | ||||
| 		node_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = { | ||||
| 				{ -16/32-0.001, -17/32, -3/32, 16/32+0.001, -13/32, 3/32 }, | ||||
| 				{ -3/32, -17/32, -16/32-0.001, 3/32, -13/32, -6/32 }, | ||||
| 				{ -3/32, -13/32, -9/32, 3/32, -6/32, -6/32 }, | ||||
| 				{ -3/32, -9/32, -9/32, 3/32, -6/32, 9/32 }, | ||||
| 				{ -3/32, -13/32, 6/32, 3/32, -6/32, 9/32 }, | ||||
| 				{ -3/32, -17/32, 6/32, 3/32, -13/32, 16/32+0.001 }, | ||||
| 			}, | ||||
| 		}, | ||||
| 		groups = groups, | ||||
| 		drop = drop, | ||||
| 	}) | ||||
| end end | ||||
|  | ||||
| function receptor_set(pos, rules, on) | ||||
| 	if on then | ||||
| 		mesecon:receptor_on(pos, rules) | ||||
| 	else | ||||
| 		mesecon:receptor_off(pos, rules) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function update_plus(pos, name) | ||||
| 	vL = { | ||||
| 		a = string.find(name, "A")~=nil, | ||||
| 		b = string.find(name, "B")~=nil, | ||||
| 		c = string.find(name, "C")~=nil, | ||||
| 		d = string.find(name, "D")~=nil, | ||||
| 	} | ||||
| 	rL = yc_get_real_portstates(pos) | ||||
| 	L = { | ||||
| 		a = rL.c and not vL.c, | ||||
| 		b = rL.d and not vL.d, | ||||
| 		c = rL.a and not vL.a, | ||||
| 		d = rL.b and not vL.b, | ||||
| 	} | ||||
| 	newname = "mesecons_extrawires:crossing" | ||||
| 	if L.a then newname = newname .. "A" end | ||||
| 	if L.b then newname = newname .. "B" end | ||||
| 	if L.c then newname = newname .. "C" end | ||||
| 	if L.d then newname = newname .. "D" end | ||||
| 	if newname ~= name then | ||||
| 		minetest.env:add_node(pos, {name = newname}) | ||||
| 	end | ||||
| 	if L.a ~= vL.a then | ||||
| 		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingA"), L.a) | ||||
| 		if not L.a and yc_get_real_portstates(pos).a then | ||||
| 			--catch signal changing direction while on | ||||
| 			update_plus(pos, newname) | ||||
| 		end | ||||
| 	end | ||||
| 	if L.b ~= vL.b then | ||||
| 		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingB"), L.b) | ||||
| 		if not L.b and yc_get_real_portstates(pos).b then | ||||
| 			update_plus(pos, newname) | ||||
| 		end | ||||
| 	end | ||||
| 	if L.c ~= vL.c then | ||||
| 		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingC"), L.c) | ||||
| 		if not L.c and yc_get_real_portstates(pos).c then | ||||
| 			update_plus(pos, newname) | ||||
| 		end | ||||
| 	end | ||||
| 	if L.d ~= vL.d then | ||||
| 		receptor_set(pos, mesecon:get_rules("mesecons_extrawires:crossingD"), L.d) | ||||
| 		if not L.c and yc_get_real_portstates(pos).d then | ||||
| 			update_plus(pos, newname) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| mesecon:register_on_signal_change(function(pos, node) | ||||
| 	if string.find(node.name, "mesecons_extrawires:crossing")~=nil then | ||||
| 		update_plus(pos, node.name) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	type = "shapeless", | ||||
| 	output = "mesecons_extrawires:crossing", | ||||
| 	recipe = { | ||||
| 		"mesecons_insulated:insulated_off", | ||||
| 		"mesecons_insulated:insulated_off", | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	type = "shapeless", | ||||
| 	output = "mesecons_insulated:insulated_off 2", | ||||
| 	recipe = { | ||||
| 		"mesecons_extrawires:crossing", | ||||
| 	}, | ||||
| }) | ||||
		Reference in New Issue
	
	Block a user