diff options
| author | cheapie <no-email-for-you@example.com> | 2018-08-26 14:31:22 -0500 | 
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2018-08-26 14:31:22 -0500 | 
| commit | 869c82fb25ce9885b61e2128846902a932982b92 (patch) | |
| tree | 28930bce9332624a74542649a96dd17699d4a13b /firealarm_smokedetector | |
| parent | d69e2c7295543435983c89a1277cec1d17fc9182 (diff) | |
| download | firealarm-869c82fb25ce9885b61e2128846902a932982b92.tar firealarm-869c82fb25ce9885b61e2128846902a932982b92.tar.gz firealarm-869c82fb25ce9885b61e2128846902a932982b92.tar.bz2 firealarm-869c82fb25ce9885b61e2128846902a932982b92.tar.xz firealarm-869c82fb25ce9885b61e2128846902a932982b92.zip | |
Add more devices
Mesecons I/O modules and smoke detectors
Diffstat (limited to 'firealarm_smokedetector')
| -rw-r--r-- | firealarm_smokedetector/depends.txt | 1 | ||||
| -rw-r--r-- | firealarm_smokedetector/init.lua | 132 | ||||
| -rw-r--r-- | firealarm_smokedetector/textures/firealarm_smokedetector_bottom_off.png | bin | 0 -> 216 bytes | |||
| -rw-r--r-- | firealarm_smokedetector/textures/firealarm_smokedetector_bottom_on.png | bin | 0 -> 216 bytes | |||
| -rw-r--r-- | firealarm_smokedetector/textures/firealarm_smokedetector_sides.png | bin | 0 -> 146 bytes | 
5 files changed, 133 insertions, 0 deletions
| diff --git a/firealarm_smokedetector/depends.txt b/firealarm_smokedetector/depends.txt new file mode 100644 index 0000000..d4798ab --- /dev/null +++ b/firealarm_smokedetector/depends.txt @@ -0,0 +1 @@ +firealarm_common diff --git a/firealarm_smokedetector/init.lua b/firealarm_smokedetector/init.lua new file mode 100644 index 0000000..3cd2d60 --- /dev/null +++ b/firealarm_smokedetector/init.lua @@ -0,0 +1,132 @@ +local smokeDetectorOffBottomTexture = "[combine:32x320".. +                                      ":0,0=firealarm_smokedetector_bottom_on.png".. +                                      ":0,32=firealarm_smokedetector_bottom_off.png".. +                                      ":0,64=firealarm_smokedetector_bottom_off.png".. +                                      ":0,96=firealarm_smokedetector_bottom_off.png".. +                                      ":0,128=firealarm_smokedetector_bottom_off.png".. +                                      ":0,160=firealarm_smokedetector_bottom_off.png".. +                                      ":0,192=firealarm_smokedetector_bottom_off.png".. +                                      ":0,224=firealarm_smokedetector_bottom_off.png".. +                                      ":0,256=firealarm_smokedetector_bottom_off.png".. +                                      ":0,288=firealarm_smokedetector_bottom_off.png" + +minetest.register_node(":firealarm:smokedetector_off",{ +	description = "Fire Alarm Smoke Detector", +	groups = { oddly_breakable_by_hand = 1 }, +	tiles = { +		"firealarm_smokedetector_sides.png", +		{ +			name = smokeDetectorOffBottomTexture, +			animation =  +			{ +				type = "vertical_frames", +				aspect_w = 32, +				aspect_h = 32, +				length = 5, +			}, +		}, +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +	}, +	paramtype = "light", +	paramtype2 = "facedir", +	drawtype = "nodebox", +	node_box = { +		type = "fixed", +		fixed = { +			{-0.2,0.4,-0.2,0.2,0.5,0.2}, +			{-0.075,0.35,-0.075,0.075,0.4,0.075}, +		}, +	}, +	on_punch = function(pos,node,player) +		local name = player:get_player_name() +		minetest.chat_send_player(name,string.format("Position: %d,%d,%d",pos.x,pos.y,pos.z)) +	end, +	after_place_node = function(pos) +		firealarm.setDevInfo("signaling",pos,{active = false,manualReset = false}) +		minetest.get_meta(pos):set_int("agressive",1) +	end, +	after_dig_node = function(pos) +		firealarm.setDevInfo("signaling",pos,nil) +	end, +}) + +minetest.register_node(":firealarm:smokedetector_on",{ +	drop = "firealarm:smokedetector_off", +	description = "Fire Alarm Smoke Detector (on state - you hacker you!)", +	groups = { oddly_breakable_by_hand = 1,not_in_creative_inventory = 1 }, +	tiles = { +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_bottom_on.png", +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +		"firealarm_smokedetector_sides.png", +	}, +	paramtype = "light", +	paramtype2 = "facedir", +	drawtype = "nodebox", +	node_box = { +		type = "fixed", +		fixed = { +			{-0.2,0.4,-0.2,0.2,0.5,0.2}, +			{-0.075,0.35,-0.075,0.075,0.4,0.075}, +		}, +	}, +	on_punch = function(pos,_,player) +		local name = player:get_player_name() +		minetest.chat_send_player(name,string.format("Position: %d,%d,%d",pos.x,pos.y,pos.z)) +	end, +	after_dig_node = function(pos) +		firealarm.setDevInfo("signaling",pos,nil) +	end, +}) + +minetest.register_abm({ +	label = "Check for fire", +	nodenames = {"firealarm:smokedetector_off"}, +	interval = 5, +	chance = 1, +	action = function(pos,node) +		local devInfo = firealarm.getDevInfo("signaling",pos) +		if not devInfo then return end +		local minp = vector.add(pos,vector.new(-10,-10,-10)) +		local maxp = vector.add(pos,vector.new(10,0,10)) +		local fire = false +		local fire_nodes = {["fire:permanent_flame"] = true,["fire:basic_flame"] = true} +		for x=minp.x,maxp.x,1 do +			for y=minp.y,maxp.y,1 do +				for z=minp.z,maxp.z,1 do +					if fire_nodes[minetest.get_node({x=x,y=y,z=z}).name] then fire = true end +				end +			end +		end +		if fire or minetest.get_meta(pos):get_int("agressive") == 0 then +			devInfo.active = true +			firealarm.setDevInfo("signaling",pos,devInfo) +			node.name = "firealarm:smokedetector_on" +			minetest.set_node(pos,node) +			if devInfo.associated then +				local panelPos = minetest.get_position_from_hash(devInfo.associated) +				if panelPos then firealarm.loadNode(panelPos) end +				if type(firealarm.panelABM) == "function" then firealarm.panelABM(pos) end +			end +		end +	end, +}) + +minetest.register_abm({ +	label = "Reset LED", +	nodenames = {"firealarm:smokedetector_on"}, +	interval = 1, +	chance = 1, +	action = function(pos,node) +		local devInfo = firealarm.getDevInfo("signaling",pos) +		if (not devInfo) or devInfo.active then return end +		node.name = "firealarm:smokedetector_off" +		minetest.set_node(pos,node) +		minetest.get_meta(pos):set_int("agressive",1) +	end, +}) diff --git a/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_off.png b/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_off.pngBinary files differ new file mode 100644 index 0000000..3885b58 --- /dev/null +++ b/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_off.png diff --git a/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_on.png b/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_on.pngBinary files differ new file mode 100644 index 0000000..2449290 --- /dev/null +++ b/firealarm_smokedetector/textures/firealarm_smokedetector_bottom_on.png diff --git a/firealarm_smokedetector/textures/firealarm_smokedetector_sides.png b/firealarm_smokedetector/textures/firealarm_smokedetector_sides.pngBinary files differ new file mode 100644 index 0000000..6873873 --- /dev/null +++ b/firealarm_smokedetector/textures/firealarm_smokedetector_sides.png | 
