From 6273c27d944151404ce046aab5a03043be7a17e8 Mon Sep 17 00:00:00 2001 From: cheapie Date: Sun, 4 Dec 2016 22:04:12 -0600 Subject: [PATCH] Add piezo beeper --- init.lua | 80 ++++++++++++++++++++++++ sounds/digistuff_piezo_fast_repeat.ogg | Bin 0 -> 5515 bytes sounds/digistuff_piezo_long_single.ogg | Bin 0 -> 6637 bytes sounds/digistuff_piezo_short_single.ogg | Bin 0 -> 4672 bytes sounds/digistuff_piezo_slow_repeat.ogg | Bin 0 -> 5219 bytes textures/digistuff_piezo_sides.png | Bin 0 -> 3187 bytes textures/digistuff_piezo_top.png | Bin 0 -> 2663 bytes 7 files changed, 80 insertions(+) create mode 100644 sounds/digistuff_piezo_fast_repeat.ogg create mode 100644 sounds/digistuff_piezo_long_single.ogg create mode 100644 sounds/digistuff_piezo_short_single.ogg create mode 100644 sounds/digistuff_piezo_slow_repeat.ogg create mode 100644 textures/digistuff_piezo_sides.png create mode 100644 textures/digistuff_piezo_top.png diff --git a/init.lua b/init.lua index a50af15..e9b1cf7 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,5 @@ digistuff = {} +digistuff.sounds_playing = {} digistuff.update_panel_formspec = function (pos,dispstr) local meta = minetest.get_meta(pos) @@ -676,3 +677,82 @@ minetest.register_node("digistuff:touchscreen", { }, }, }) + +minetest.register_node("digistuff:piezo", { + description = "Digilines Piezoelectric Beeper", + groups = {cracky=3}, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec","field[channel;Channel;${channel}") + end, + on_destruct = function(pos) + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + end, + tiles = { + "digistuff_piezo_top.png", + "digistuff_piezo_sides.png", + "digistuff_piezo_sides.png", + "digistuff_piezo_sides.png", + "digistuff_piezo_sides.png", + "digistuff_piezo_sides.png" + }, + on_receive_fields = function(pos, formname, fields, sender) + local name = sender:get_player_name() + if minetest.is_protected(pos,name) and not minetest.check_player_privs(name,{protection_bypass=true}) then + minetest.record_protection_violation(pos,name) + return + end + local meta = minetest.get_meta(pos) + if fields.channel then meta:set_string("channel",fields.channel) end + end, + digiline = + { + receptor = {}, + effector = { + action = function(pos,node,channel,msg) + local meta = minetest.get_meta(pos) + local setchan = meta:get_string("channel") + if channel ~= setchan then return end + if msg == "shortbeep" then + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + minetest.sound_play({name = "digistuff_piezo_short_single",gain = 0.2},{pos = pos,max_hear_distance = 16}) + elseif msg == "longbeep" then + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + minetest.sound_play({name = "digistuff_piezo_long_single",gain = 0.2},{pos = pos,max_hear_distance = 16}) + elseif msg == "fastrepeat" then + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + digistuff.sounds_playing[pos_hash] = minetest.sound_play({name = "digistuff_piezo_fast_repeat",gain = 0.2},{pos = pos,max_hear_distance = 16,loop = true}) + elseif msg == "slowrepeat" then + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + digistuff.sounds_playing[pos_hash] = minetest.sound_play({name = "digistuff_piezo_slow_repeat",gain = 0.2},{pos = pos,max_hear_distance = 16,loop = true}) + elseif msg == "stop" then + local pos_hash = minetest.hash_node_position(pos) + if digistuff.sounds_playing[pos_hash] then + minetest.sound_stop(digistuff.sounds_playing[pos_hash]) + digistuff.sounds_playing[pos_hash] = nil + end + end + end + }, + }, +}) diff --git a/sounds/digistuff_piezo_fast_repeat.ogg b/sounds/digistuff_piezo_fast_repeat.ogg new file mode 100644 index 0000000000000000000000000000000000000000..be035da0568c5d850f4197f113087485b5092aa7 GIT binary patch literal 5515 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