summaryrefslogtreecommitdiff
path: root/firealarm_panel
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2018-08-24 16:19:53 -0500
committercheapie <no-email-for-you@example.com>2018-08-24 16:19:53 -0500
commitdf75dc7b7ec03a3b30052efbea988c3ab2b8f430 (patch)
tree60b9f3982ed111b7effcff5ff54eb7862997c732 /firealarm_panel
downloadfirealarm-df75dc7b7ec03a3b30052efbea988c3ab2b8f430.tar
firealarm-df75dc7b7ec03a3b30052efbea988c3ab2b8f430.tar.gz
firealarm-df75dc7b7ec03a3b30052efbea988c3ab2b8f430.tar.bz2
firealarm-df75dc7b7ec03a3b30052efbea988c3ab2b8f430.tar.xz
firealarm-df75dc7b7ec03a3b30052efbea988c3ab2b8f430.zip
Initial commit
Diffstat (limited to 'firealarm_panel')
-rw-r--r--firealarm_panel/depends.txt1
-rw-r--r--firealarm_panel/init.lua584
-rw-r--r--firealarm_panel/sounds/firealarm_panel_piezo.oggbin0 -> 5318 bytes
-rw-r--r--firealarm_panel/textures/firealarm_panel_front_normal.pngbin0 -> 460 bytes
-rw-r--r--firealarm_panel/textures/firealarm_panel_led_alarm.pngbin0 -> 181 bytes
-rw-r--r--firealarm_panel/textures/firealarm_panel_led_supervisory.pngbin0 -> 181 bytes
-rw-r--r--firealarm_panel/textures/firealarm_panel_led_trouble.pngbin0 -> 181 bytes
-rw-r--r--firealarm_panel/textures/firealarm_panel_sides.pngbin0 -> 146 bytes
8 files changed, 585 insertions, 0 deletions
diff --git a/firealarm_panel/depends.txt b/firealarm_panel/depends.txt
new file mode 100644
index 0000000..d4798ab
--- /dev/null
+++ b/firealarm_panel/depends.txt
@@ -0,0 +1 @@
+firealarm_common
diff --git a/firealarm_panel/init.lua b/firealarm_panel/init.lua
new file mode 100644
index 0000000..28955ab
--- /dev/null
+++ b/firealarm_panel/init.lua
@@ -0,0 +1,584 @@
+local function setFormspec(pos)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ local meta = minetest.get_meta(pos)
+ local fs = "size[10,10]label[0.5,0.5;MineAlert 850+ Addressable Fire Alarm Control Panel]"
+ local screen = devInfo.screen
+ if screen == "main" then
+ if #devInfo.alarm > 0 then
+ if devInfo.silenced then
+ fs = fs.."label[0.5,2;Alarm Silenced]"
+ else
+ if devInfo.acked then
+ fs = fs.."label[0.5,2;Alarm Acknowledged]"
+ else
+ fs = fs.."label[0.5,2;ALARM! - "..minetest.formspec_escape(devInfo.alarm[#devInfo.alarm].name).."]"
+ end
+ end
+ elseif #devInfo.supervisory > 0 then
+ if devInfo.acked then
+ fs = fs.."label[0.5,2;Supervisory Acknowledged]"
+ else
+ fs = fs.."label[0.5,2;Supervisory - "..minetest.formspec_escape(devInfo.supervisory[#devInfo.supervisory].name).."]"
+ end
+ elseif #devInfo.trouble > 0 then
+ if devInfo.acked then
+ fs = fs.."label[0.5,2;Trouble Acknowledged]"
+ else
+ fs = fs.."label[0.5,2;Trouble - "..minetest.formspec_escape(devInfo.trouble[#devInfo.trouble].name).."]"
+ end
+ else
+ fs = fs.."label[0.5,2;System Normal]"
+ end
+ fs = fs.."button[0.5,3;3,1;ack;Acknowledge]"
+ fs = fs.."button[0.5,4;3,1;silence;Silence]"
+ fs = fs.."button[0.5,5;3,1;reset;Reset]"
+ fs = fs.."button[0.5,6;3,1;drill;Drill]"
+ fs = fs.."button[0.5,7;3,1;add;Add Device]"
+ fs = fs.."button[0.5,8;3,1;remove;Remove Device]"
+ elseif screen == "add" then
+ fs = fs.."label[0.5,2;Add Device]"
+ fs = fs.."field[1,4;1,1;x;X;]"
+ fs = fs.."field[2,4;1,1;y;Y;]"
+ fs = fs.."field[3,4;1,1;z;Z;]"
+ fs = fs.."dropdown[0.5,5;3;action;Alarm,Supervisory,Trouble;1]"
+ fs = fs.."field[1,6.5;3,1;name;Name;]"
+ fs = fs.."button[1,7.5;3,1;add;Add]"
+ fs = fs.."button[1,8.5;3,1;cancel;Cancel"
+ elseif screen == "remove" then
+ fs = fs.."label[0.5,2;Remove Device]"
+ local devPresent = false
+ for _ in pairs(devInfo.associatedSignalingDevices) do
+ devPresent = true
+ end
+ for _ in pairs(devInfo.associatedNotificationDevices) do
+ devPresent = true
+ end
+ if devPresent then
+ devInfo.removeMenuDevList = {}
+ fs = fs.."textlist[1,4;3,3;dev;"
+ for k,v in pairs(devInfo.associatedSignalingDevices) do
+ local dev = {type = "signaling",hash = k}
+ table.insert(devInfo.removeMenuDevList,dev)
+ fs = fs..minetest.formspec_escape(v.name)..","
+ end
+ for k,v in pairs(devInfo.associatedNotificationDevices) do
+ local dev = {type = "notification",hash = k}
+ table.insert(devInfo.removeMenuDevList,dev)
+ fs = fs..minetest.formspec_escape(v.name)..","
+ end
+ fs = string.sub(fs,1,-1).."]"
+ else
+ fs = fs.."label[0.5,5;No Devices Associated]"
+ end
+ fs = fs.."button[1,8.5;3,1;cancel;Back"
+ end
+ meta:set_string("formspec",fs)
+end
+
+local function alarm(pos,initiator)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ local posHash = minetest.hash_node_position(pos)
+ local initiatorHash = minetest.hash_node_position(initiator)
+ for _,i in ipairs(devInfo.alarm) do
+ if i.initiator == initiatorHash then return end
+ end
+ local name = "Unknown Device"
+ if devInfo.associatedSignalingDevices[initiatorHash] then
+ name = devInfo.associatedSignalingDevices[initiatorHash].name
+ elseif posHash == initiatorHash then
+ name = "Panel Drill Switch"
+ end
+ table.insert(devInfo.alarm,{initiator = initiatorHash,name = name})
+ devInfo.acked = false
+ firealarm.setDevInfo("panel",pos,devInfo)
+ setFormspec(pos)
+end
+
+local function supervisory(pos,initiator)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ local posHash = minetest.hash_node_position(pos)
+ local initiatorHash = minetest.hash_node_position(initiator)
+ for _,i in ipairs(devInfo.supervisory) do
+ if i.initiator == initiatorHash then return end
+ end
+ local name = "Unknown Device"
+ if devInfo.associatedSignalingDevices[initiatorHash] then
+ name = devInfo.associatedSignalingDevices[initiatorHash].name
+ end
+ table.insert(devInfo.supervisory,{initiator = initiatorHash,name = name})
+ devInfo.acked = false
+ firealarm.setDevInfo("panel",pos,devInfo)
+ setFormspec(pos)
+end
+
+local function trouble(pos,initiator)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ local posHash = minetest.hash_node_position(pos)
+ local initiatorHash = minetest.hash_node_position(initiator)
+ for _,i in ipairs(devInfo.trouble) do
+ if i.initiator == initiatorHash then return end
+ end
+ local name = "Unknown Device"
+ if devInfo.associatedSignalingDevices[initiatorHash] then
+ name = devInfo.associatedSignalingDevices[initiatorHash].name
+ end
+ if devInfo.associatedNotificationDevices[initiatorHash] then
+ name = devInfo.associatedNotificationDevices[initiatorHash].name
+ end
+ table.insert(devInfo.trouble,{initiator = initiatorHash,name = name})
+ devInfo.acked = false
+ firealarm.setDevInfo("panel",pos,devInfo)
+ setFormspec(pos)
+end
+
+local function handleFields(pos,_,fields,sender)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ local screen = devInfo.screen
+ if fields.quit then return end
+ local name = sender:get_player_name()
+ if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,"protection_bypass") then
+ minetest.chat_send_player(name,"You are not authorized to use this panel.")
+ minetest.record_protection_violation(pos,name)
+ return
+ end
+ if screen == "main" then
+ if fields.ack then
+ devInfo.acked = true
+ elseif fields.silence and #devInfo.alarm > 0 and devInfo.acked then
+ devInfo.silenced = true
+ elseif fields.reset and devInfo.acked then
+ devInfo.alarm = {}
+ devInfo.supervisory = {}
+ devInfo.trouble = {}
+ devInfo.acked = false
+ devInfo.silenced = false
+ for i in pairs(devInfo.associatedSignalingDevices) do
+ local dev = firealarm.getDevInfo("signaling",minetest.get_position_from_hash(i))
+ if not dev then
+ trouble(pos,minetest.get_position_from_hash(i))
+ elseif not dev.manualReset then
+ dev.active = false
+ end
+ end
+ elseif fields.drill then
+ alarm(pos,pos)
+ elseif fields.add then
+ devInfo.screen = "add"
+ elseif fields.remove then
+ devInfo.screen = "remove"
+ end
+ elseif screen == "add" then
+ if fields.add or fields.cancel then
+ devInfo.screen = "main"
+ end
+ if fields.add then
+ if (tonumber(fields.x) and tonumber(fields.y) and tonumber(fields.z)) then
+ local targetPos = {x = fields.x,y = fields.y,z = fields.z}
+ local targetInfo = firealarm.getDevInfo("signaling",targetPos)
+ if targetInfo then
+ if (minetest.is_protected(pos,name) and not minetest.check_player_privs(name,"protection_bypass")) or targetInfo.associated then
+ minetest.chat_send_player(name,"Device is protected or already associated")
+ else
+ targetInfo.associated = minetest.hash_node_position(pos)
+ local devParams = {}
+ devParams.name = fields.name
+ devParams.action = fields.action
+ devInfo.associatedSignalingDevices[minetest.hash_node_position(targetPos)] = devParams
+ end
+ else
+ targetInfo = firealarm.getDevInfo("notification",targetPos)
+ if targetInfo then
+ if (minetest.is_protected(pos,name) and not minetest.check_player_privs(name,"protection_bypass")) or targetInfo.associated then
+ minetest.chat_send_player(name,"Device is protected or already associated")
+ else
+ targetInfo.associated = minetest.hash_node_position(pos)
+ local devParams = {}
+ devParams.name = fields.name
+ devInfo.associatedNotificationDevices[minetest.hash_node_position(targetPos)] = devParams
+ end
+ else
+ minetest.chat_send_player(name,"Not a valid fire alarm device")
+ end
+ end
+ else
+ minetest.chat_send_player(name,"Invalid position")
+ end
+ end
+ elseif screen == "remove" then
+ if fields.cancel then
+ devInfo.screen = "main"
+ end
+ if fields.dev and string.sub(fields.dev,1,3) == "DCL" then
+ local dev = devInfo.removeMenuDevList[tonumber(string.sub(fields.dev,5,-1))]
+ if dev then
+ if dev.type == "signaling" then
+ devInfo.associatedSignalingDevices[dev.hash] = nil
+ local targetPos = minetest.get_position_from_hash(dev.hash)
+ local targetInfo = firealarm.getDevInfo("signaling",targetPos)
+ if targetInfo then
+ targetInfo.associated = nil
+ firealarm.setDevInfo("signaling",targetPos,targetInfo)
+ end
+ elseif dev.type == "notification" then
+ devInfo.associatedNotificationDevices[dev.hash] = nil
+ local targetPos = minetest.get_position_from_hash(dev.hash)
+ local targetInfo = firealarm.getDevInfo("notification",targetPos)
+ if targetInfo then
+ targetInfo.associated = nil
+ targetInfo.hornActive = false
+ targetInfo.strobeActive = false
+ firealarm.setDevInfo("notification",targetPos,targetInfo)
+ end
+ end
+ end
+ end
+ end
+ firealarm.setDevInfo("panel",pos,devInfo)
+ setFormspec(pos)
+end
+
+minetest.register_node(":firealarm:panel",{
+ description = "Fire Alarm Panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_front_normal.png",
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_place_node = function(pos)
+ firealarm.setDevInfo("panel",pos,{
+ associatedSignalingDevices = {},
+ associatedNotificationDevices = {},
+ removeMenuDevList = {},
+ alarm = {},
+ supervisory = {},
+ trouble = {},
+ acked = false,
+ silenced = false,
+ screen = "main",
+ })
+ setFormspec(pos)
+ end,
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_alarm",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_alarm.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_supervisory",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_supervisory.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_trouble",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_trouble.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_alarm_trouble",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_alarm.png:0,64=firealarm_panel_led_trouble.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_alarm_supervisory",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_alarm.png:0,64=firealarm_panel_led_supervisory.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_supervisory_trouble",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_supervisory.png:0,64=firealarm_panel_led_trouble.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+minetest.register_node(":firealarm:panel_alarm_supervisory_trouble",{
+ description = "Fire Alarm Panel (LEDs on - you hacker you!)",
+ drop = "firealarm:panel",
+ groups = { oddly_breakable_by_hand = 1,firealarm_panel = 1,not_in_creative_inventory = 1},
+ tiles = {
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ "firealarm_panel_sides.png",
+ {
+ name = "[combine:64x128:0,0=firealarm_panel_front_normal.png:0,64=firealarm_panel_front_normal.png:0,64=firealarm_panel_led_alarm.png:0,64=firealarm_panel_led_supervisory.png:0,64=firealarm_panel_led_trouble.png",
+ animation =
+ {
+ type = "vertical_frames",
+ aspect_w = 64,
+ aspect_h = 64,
+ length = 0.5,
+ },
+ }
+ },
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5,-0.5,0.4,0.5,0.5,0.5},
+ },
+ },
+ after_dig_node = function(pos)
+ firealarm.setDevInfo("panel",pos,nil)
+ end,
+ on_receive_fields = handleFields,
+})
+
+function firealarm.panelABM(pos)
+ local node = minetest.get_node(pos)
+ local devInfo = firealarm.getDevInfo("panel",pos)
+ if not devInfo then return end
+ local hornsActive = #devInfo.alarm > 0 and not devInfo.silenced
+ local strobesActive = #devInfo.alarm > 0
+ for i in pairs(devInfo.associatedNotificationDevices) do
+ local dev = firealarm.getDevInfo("notification",minetest.get_position_from_hash(i))
+ if not dev then
+ trouble(pos,minetest.get_position_from_hash(i))
+ else
+ dev.hornActive = hornsActive
+ dev.strobeActive = strobesActive
+ end
+ end
+ for i,v in pairs(devInfo.associatedSignalingDevices) do
+ local dev = firealarm.getDevInfo("signaling",minetest.get_position_from_hash(i))
+ if not dev then
+ trouble(pos,minetest.get_position_from_hash(i))
+ else
+ if dev.active then
+ if v.action == "Alarm" then
+ alarm(pos,minetest.get_position_from_hash(i))
+ elseif v.action == "Supervisory" then
+ supervisory(pos,minetest.get_position_from_hash(i))
+ elseif v.action == "Trouble" then
+ trouble(pos,minetest.get_position_from_hash(i))
+ end
+ end
+ end
+ end
+ local currentName = node.name
+ local newName = "firealarm:panel"
+ if #devInfo.alarm > 0 then newName = newName.."_alarm" end
+ if #devInfo.supervisory > 0 then newName = newName.."_supervisory" end
+ if #devInfo.trouble > 0 then newName = newName.."_trouble" end
+ if newName ~= "firealarm:panel" and not devInfo.acked then
+ minetest.sound_play("firealarm_panel_piezo",{pos = pos,gain = 0.5})
+ end
+ if currentName ~= newName then
+ node.name = newName
+ minetest.set_node(pos,node)
+ setFormspec(pos)
+ end
+end
+
+minetest.register_abm({
+ label = "Poll devices and update panel status",
+ nodenames = {"group:firealarm_panel"},
+ interval = 1,
+ chance = 1,
+ action = firealarm.panelABM,
+})
diff --git a/firealarm_panel/sounds/firealarm_panel_piezo.ogg b/firealarm_panel/sounds/firealarm_panel_piezo.ogg
new file mode 100644
index 0000000..6f87642
--- /dev/null
+++ b/firealarm_panel/sounds/firealarm_panel_piezo.ogg
Binary files differ
diff --git a/firealarm_panel/textures/firealarm_panel_front_normal.png b/firealarm_panel/textures/firealarm_panel_front_normal.png
new file mode 100644
index 0000000..b3ba575
--- /dev/null
+++ b/firealarm_panel/textures/firealarm_panel_front_normal.png
Binary files differ
diff --git a/firealarm_panel/textures/firealarm_panel_led_alarm.png b/firealarm_panel/textures/firealarm_panel_led_alarm.png
new file mode 100644
index 0000000..48a4233
--- /dev/null
+++ b/firealarm_panel/textures/firealarm_panel_led_alarm.png
Binary files differ
diff --git a/firealarm_panel/textures/firealarm_panel_led_supervisory.png b/firealarm_panel/textures/firealarm_panel_led_supervisory.png
new file mode 100644
index 0000000..285ebab
--- /dev/null
+++ b/firealarm_panel/textures/firealarm_panel_led_supervisory.png
Binary files differ
diff --git a/firealarm_panel/textures/firealarm_panel_led_trouble.png b/firealarm_panel/textures/firealarm_panel_led_trouble.png
new file mode 100644
index 0000000..5196dde
--- /dev/null
+++ b/firealarm_panel/textures/firealarm_panel_led_trouble.png
Binary files differ
diff --git a/firealarm_panel/textures/firealarm_panel_sides.png b/firealarm_panel/textures/firealarm_panel_sides.png
new file mode 100644
index 0000000..4beaa00
--- /dev/null
+++ b/firealarm_panel/textures/firealarm_panel_sides.png
Binary files differ