builtin sounds
parent
8a3945b83d
commit
b0556cca52
|
@ -0,0 +1,17 @@
|
|||
unused_args = false
|
||||
allow_defined_top = true
|
||||
|
||||
globals = {
|
||||
"soundblocks",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
-- Stdlib
|
||||
string = {fields = {"split"}},
|
||||
table = {fields = {"copy", "getn"}},
|
||||
|
||||
-- Minetest
|
||||
"minetest",
|
||||
"vector", "ItemStack"
|
||||
|
||||
}
|
1
api.lua
1
api.lua
|
@ -1,7 +1,6 @@
|
|||
|
||||
--[[
|
||||
def = {
|
||||
length = 2, -- seconds
|
||||
filenames = {
|
||||
"default_glass_footstep.ogg"
|
||||
},
|
||||
|
|
20
builtin.lua
20
builtin.lua
|
@ -1,20 +0,0 @@
|
|||
|
||||
|
||||
soundblocks.register({
|
||||
length = 2,
|
||||
filename = "default_glass_footstep.ogg",
|
||||
key = "default_glass_footsteps",
|
||||
name = "Glass footsteps"
|
||||
})
|
||||
|
||||
|
||||
soundblocks.register({
|
||||
length = 2,
|
||||
filenames = {
|
||||
"default_grass_footstep.1.ogg",
|
||||
"default_grass_footstep.2.ogg",
|
||||
"default_grass_footstep.3.ogg"
|
||||
},
|
||||
key = "default_grass_footstep",
|
||||
name = "Grass footsteps"
|
||||
})
|
|
@ -1,2 +1,3 @@
|
|||
default?
|
||||
mesecons?
|
||||
technic?
|
||||
|
|
83
form.lua
83
form.lua
|
@ -3,11 +3,10 @@ local FORMNAME = "soundblock_config"
|
|||
|
||||
--[[
|
||||
config options:
|
||||
* mesecon-behavior: [repeat, single]
|
||||
* state: [off, mesecon, on]
|
||||
* state: [off, on]
|
||||
|
||||
* interval-from <float>
|
||||
* interval-to <float>
|
||||
* interval-min <float>
|
||||
* interval-max <float>
|
||||
|
||||
* gain <float>
|
||||
* hear-distance <int>
|
||||
|
@ -15,7 +14,6 @@ config options:
|
|||
|
||||
--]]
|
||||
|
||||
|
||||
soundblocks.showform = function(pos, node, player)
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
@ -37,23 +35,34 @@ soundblocks.showform = function(pos, node, player)
|
|||
selected_sound = i
|
||||
end
|
||||
|
||||
sound_list = sound_list .. i .. ": " .. minetest.formspec_escape(sound.name)
|
||||
sound_list = sound_list .. minetest.formspec_escape(sound.name)
|
||||
if i < #soundblocks.sounds then
|
||||
sound_list = sound_list .. ","
|
||||
end
|
||||
end
|
||||
sound_list = sound_list .. ";" .. selected_sound .. "]";
|
||||
|
||||
local state = meta:get_string("state")
|
||||
local interval_min = meta:get_int("interval_min")
|
||||
local interval_max = meta:get_int("interval_max")
|
||||
local gain = meta:get_int("gain")
|
||||
local hear_distance = meta:get_int("hear_distance")
|
||||
local randomize_position = meta:get_int("randomize_position")
|
||||
|
||||
local formspec = "size[8,8;]" ..
|
||||
--left
|
||||
"label[0,0;Mission editor]" ..
|
||||
"button[5.5,1;2,1;add;Add]" ..
|
||||
"button[5.5,2;2,1;edit;Edit]" ..
|
||||
"button[5.5,3;2,1;up;Up]" ..
|
||||
"button[5.5,4;2,1;down;Down]" ..
|
||||
"button[5.5,5;2,1;remove;Remove]" ..
|
||||
steps_list ..
|
||||
"button_exit[0,7;8,1;save;Save and validate]"
|
||||
"label[0,0;Soundblock <" .. state .. ">]" ..
|
||||
|
||||
"field[0,2;8,1;interval_min;Interval-min;" .. interval_min .. "]" ..
|
||||
"field[0,2;8,1;interval_max;Interval-max;" .. interval_max .. "]" ..
|
||||
|
||||
"field[0,2;8,1;gain;Gain;" .. gain .. "]" ..
|
||||
"field[0,2;8,1;hear_distance;Hear distance;" .. hear_distance .. "]" ..
|
||||
"field[0,2;8,1;randomize_position;Randomize position;" .. randomize_position .. "]" ..
|
||||
|
||||
sound_list ..
|
||||
"button_exit[0,7;8,1;save;Save]" ..
|
||||
"button_exit[0,7;8,1;toggle_state;Toggle state]"
|
||||
|
||||
minetest.show_formspec(player:get_player_name(),
|
||||
FORMNAME .. ";" .. minetest.pos_to_string(pos),
|
||||
|
@ -73,22 +82,54 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||
|
||||
local pos = minetest.string_to_pos(parts[2])
|
||||
local meta = minetest.get_meta(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local has_override = minetest.check_player_privs(player, "protection_bypass")
|
||||
|
||||
if not has_override and minetest.is_protected(pos, player:get_player_name()) then
|
||||
return
|
||||
end
|
||||
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
if fields.toggle_state then
|
||||
local state = meta:get_string("state")
|
||||
if state == "on" then
|
||||
state = "mesecons"
|
||||
timer:stop()
|
||||
|
||||
elseif state == "mesecons" then
|
||||
state = "off"
|
||||
timer:stop()
|
||||
|
||||
else -- off
|
||||
state = "on"
|
||||
timer:start(0)
|
||||
|
||||
end
|
||||
|
||||
meta:set_string("state", state)
|
||||
end
|
||||
|
||||
if fields.toggle_state or fields.save then
|
||||
meta:set_int("interval_min", tonumber(fields.interval_min) or 1)
|
||||
meta:set_int("interval_max", tonumber(fields.interval_max) or 1)
|
||||
meta:set_int("gain", tonumber(fields.gain) or 1)
|
||||
meta:set_int("hear_distance", tonumber(fields.hear_distance) or 16)
|
||||
meta:set_int("randomize_position", tonumber(fields.randomize_position) or 0)
|
||||
end
|
||||
|
||||
if fields.sounds then
|
||||
parts = fields.steps:split(":")
|
||||
parts = fields.sounds:split(":")
|
||||
if parts[1] == "CHG" then
|
||||
local selected_sound = tonumber(parts[2])
|
||||
--TODO
|
||||
local selected_sound_name = tonumber(parts[2])
|
||||
local selected_sound_key
|
||||
|
||||
for i,sound in ipairs(soundblocks.sounds) do
|
||||
if selected_sound_name == sound.name then
|
||||
selected_sound_key = sound.key
|
||||
end
|
||||
end
|
||||
|
||||
meta:set_string("selected_sound_key", selected_sound_key)
|
||||
end
|
||||
end
|
||||
|
||||
--TODO
|
||||
|
||||
|
||||
end)
|
||||
|
|
6
init.lua
6
init.lua
|
@ -9,7 +9,11 @@ dofile(MP.."/form.lua")
|
|||
dofile(MP.."/soundblock.lua")
|
||||
|
||||
if minetest.get_modpath("default") then
|
||||
dofile(MP.."/builtin.lua")
|
||||
dofile(MP.."/mods/builtin.lua")
|
||||
end
|
||||
|
||||
if minetest.get_modpath("technic") then
|
||||
dofile(MP.."/mods/technic.lua")
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
|
||||
|
||||
soundblocks.register({
|
||||
filename = "default_glass_footstep",
|
||||
key = "default_glass_footsteps",
|
||||
name = "Glass footsteps"
|
||||
})
|
||||
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_grass_footstep.1",
|
||||
"default_grass_footstep.2",
|
||||
"default_grass_footstep.3"
|
||||
},
|
||||
key = "default_grass_footstep",
|
||||
name = "Grass footsteps"
|
||||
})
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_gravel_footstep.1",
|
||||
"default_gravel_footstep.2",
|
||||
"default_gravel_footstep.3"
|
||||
},
|
||||
key = "default_gravel_footstep",
|
||||
name = "Gravel footsteps"
|
||||
})
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_wood_footstep.1",
|
||||
"default_wood_footstep.2"
|
||||
},
|
||||
key = "default_wood_footstep",
|
||||
name = "Wood footsteps"
|
||||
})
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_sand_footstep.1",
|
||||
"default_sand_footstep.2"
|
||||
},
|
||||
key = "default_sand_footstep",
|
||||
name = "Sand footsteps"
|
||||
})
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_metal_footstep.1",
|
||||
"default_metal_footstep.2",
|
||||
"default_metal_footstep.3"
|
||||
},
|
||||
key = "default_metal_footstep",
|
||||
name = "Metal footsteps"
|
||||
})
|
||||
|
||||
|
||||
soundblocks.register({
|
||||
filenames = {
|
||||
"default_snow_footstep.1",
|
||||
"default_snow_footstep.2",
|
||||
"default_snow_footstep.3"
|
||||
"default_snow_footstep.4",
|
||||
"default_snow_footstep.5"
|
||||
},
|
||||
key = "default_snow_footstep",
|
||||
name = "Snow footsteps"
|
||||
})
|
||||
|
||||
|
||||
soundblocks.register({
|
||||
filename = "default_chest_close"
|
||||
key = "default_chest_close",
|
||||
name = "Chest close"
|
||||
})
|
||||
|
||||
soundblocks.register({
|
||||
filename = "default_chest_open"
|
||||
key = "default_chest_open",
|
||||
name = "Chest open"
|
||||
})
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
|
||||
soundblocks.register({
|
||||
filename = "technic_hv_nuclear_reactor_siren_danger_loop",
|
||||
key = "technic_hv_nuclear_reactor_siren_danger_loop",
|
||||
name = "Nuclear reactor meltdown"
|
||||
})
|
|
@ -7,7 +7,6 @@ Register custom sounds:
|
|||
|
||||
```lua
|
||||
soundblocks.register({
|
||||
length = 2,
|
||||
filename = "default_glass_footstep.ogg",
|
||||
key = "default_glass_footsteps",
|
||||
name = "Glass footsteps"
|
||||
|
@ -15,7 +14,6 @@ soundblocks.register({
|
|||
|
||||
|
||||
soundblocks.register({
|
||||
length = 2,
|
||||
filenames = {
|
||||
"default_grass_footstep.1.ogg",
|
||||
"default_grass_footstep.2.ogg",
|
||||
|
|
|
@ -1,8 +1,40 @@
|
|||
|
||||
-- minetest.sound_play("vacuum_hiss", {pos = pos, gain = 0.5, max_hear_distance=16})
|
||||
-- local timer = minetest.get_node_timer(pos)
|
||||
-- timer:start(3)
|
||||
local execute = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
local selected_sound_key = meta:get_string("selected_sound_key")
|
||||
local def = soundblocks.sounds[selected_sound_key]
|
||||
|
||||
if def == nil then
|
||||
return
|
||||
end
|
||||
|
||||
local gain = meta:get_int("gain")
|
||||
local hear_distance = meta:get_int("hear_distance")
|
||||
local randomize_position = meta:get_int("randomize_position")
|
||||
local play_pos = pos
|
||||
|
||||
local filename = def.filename
|
||||
|
||||
if def.filenames then
|
||||
filename = def.filenames[math.random(1, #def.filenames)]
|
||||
end
|
||||
|
||||
if randomize_position > 0 then
|
||||
play_pos = vector.add(pos, {
|
||||
x = math.random(-randomize_position, randomize_position),
|
||||
y = math.random(-randomize_position, randomize_position),
|
||||
z = math.random(-randomize_position, randomize_position)
|
||||
})
|
||||
end
|
||||
|
||||
minetest.sound_play(filename, {
|
||||
pos = play_pos,
|
||||
gain = gain,
|
||||
max_hear_distance = hear_distance
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
minetest.register_node("soundblocks:block", {
|
||||
description = "Sound Block",
|
||||
|
@ -12,7 +44,13 @@ minetest.register_node("soundblocks:block", {
|
|||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("selected_sound_key", "")
|
||||
meta:set_string("selected_sound_key", "default_grass_footstep")
|
||||
meta:set_string("state", "off")
|
||||
meta:set_int("interval_min", 2)
|
||||
meta:set_int("interval_max", 2)
|
||||
meta:set_int("gain", 1)
|
||||
meta:set_int("hear_distance", 32)
|
||||
meta:set_int("randomize_position", 0)
|
||||
end,
|
||||
|
||||
can_dig = function(pos,player)
|
||||
|
@ -25,19 +63,27 @@ minetest.register_node("soundblocks:block", {
|
|||
end,
|
||||
|
||||
on_timer = function(pos, elapsed)
|
||||
--TODO
|
||||
local meta = minetest.get_meta(pos)
|
||||
local state = meta:get_string("state")
|
||||
|
||||
if state ~= "on" then
|
||||
return
|
||||
end
|
||||
|
||||
execute(pos)
|
||||
|
||||
local interval_min = meta:get_int("interval_min")
|
||||
local interval_max = meta:get_int("interval_max")
|
||||
|
||||
local new_timeout = math.random(interval_min, interval_max)
|
||||
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(new_timeout)
|
||||
end,
|
||||
|
||||
mesecons = {effector = {
|
||||
action_on = function (pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
--TODO
|
||||
update_infotext(meta)
|
||||
end,
|
||||
action_off = function (pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
--TODO
|
||||
update_infotext(meta)
|
||||
execute(pos)
|
||||
end
|
||||
}},
|
||||
|
||||
|
|
Loading…
Reference in New Issue