diff options
| author | Jeija <norrepli@gmail.com> | 2012-09-08 15:28:57 +0200 | 
|---|---|---|
| committer | Jeija <norrepli@gmail.com> | 2012-09-08 15:28:57 +0200 | 
| commit | f0e3b13f3f89c3704452bd1304f6451953b0a341 (patch) | |
| tree | e744803abe65e70054beca6f291bb646706828e9 /mesecons_extrawires | |
| parent | f959c16763592c2638261ea1ba64c435cbe6c207 (diff) | |
| parent | f8d6d72441aedafdaecf2a594b2552077791fa3a (diff) | |
Merge branch 'master' of
https://github.com/Jeija/minetest-mod-mesecons
Diffstat (limited to 'mesecons_extrawires')
| -rw-r--r-- | mesecons_extrawires/depends.txt | 1 | ||||
| -rw-r--r-- | mesecons_extrawires/init.lua | 138 | 
2 files changed, 139 insertions, 0 deletions
| diff --git a/mesecons_extrawires/depends.txt b/mesecons_extrawires/depends.txt new file mode 100644 index 0000000..acaa924 --- /dev/null +++ b/mesecons_extrawires/depends.txt @@ -0,0 +1 @@ +mesecons diff --git a/mesecons_extrawires/init.lua b/mesecons_extrawires/init.lua new file mode 100644 index 0000000..9ceb9ac --- /dev/null +++ b/mesecons_extrawires/init.lua @@ -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", +	}, +}) | 
