ham_radio/init.lua
2019-12-24 01:11:10 +02:00

95 lines
2.6 KiB
Lua

local modpath = minetest.get_modpath("ham_radio")
local mod_storage = minetest.get_mod_storage()
ham_radio = rawget(_G, "ham_radio") or {}
ham_radio = {
playerhuds = {},
player_rds = {},
receiver_rds = {},
is_receiver_wielded = {},
transmitters = {},
}
function ham_radio.find_transmitters(frequency)
local transmitter_list = {}
local all_transmitters = mod_storage:to_table().fields
for key, transmitter_data in pairs(all_transmitters) do
local transmitter = minetest.parse_json(transmitter_data)
if transmitter.frequency == frequency then
transmitter_list[key] = transmitter
end
end
return transmitter_list
end
function ham_radio.save_transmitter(pos, meta)
local transmitter_properties = {
frequency = meta:get_string("frequency"),
rds_message = meta:get_string("rds_message"),
operated_by = meta:get_string("operated_by")
}
local key = minetest.pos_to_string(pos, 0)
mod_storage:set_string(key, minetest.write_json(transmitter_properties)) -- storage
end
function ham_radio.delete_transmitter(pos)
local key = minetest.pos_to_string(pos, 0)
mod_storage:set_string(key, '') -- storage
end
function ham_radio.play_tuning_sound(player)
minetest.sound_play(
{name = "ham_radio_tuning"..math.random(1,5)},
{to_player = player:get_player_name()}
)
end
function ham_radio.errormsg(player, message)
minetest.chat_send_player(player:get_player_name(), minetest.colorize("#FCAD00", message))
end
dofile(modpath.."/config.lua")
dofile(modpath.."/helpers.lua")
dofile(modpath.."/craft.lua")
dofile(modpath.."/digiline.lua")
dofile(modpath.."/transmitter.lua")
dofile(modpath.."/receiver.lua")
dofile(modpath.."/beacon.lua")
dofile(modpath.."/rds.lua")
dofile(modpath.."/receiver_station.lua")
dofile(modpath.."/hud.lua")
-- globals
minetest.register_on_newplayer(ham_radio.toggle_hud)
minetest.register_on_joinplayer(ham_radio.toggle_hud)
minetest.register_on_leaveplayer(function(player)
local name = player:get_player_name()
ham_radio.is_receiver_wielded[name] = false
ham_radio.playerhuds[name] = nil
end)
local updatetimer = 0
local rds_timer = 0
minetest.register_globalstep(function(dtime)
updatetimer = updatetimer + dtime
rds_timer = rds_timer + dtime
if updatetimer > 0.1 then
local players = minetest.get_connected_players()
for i=1, #players do
ham_radio:update_hud_display(players[i])
end
updatetimer = 0
-- rds update timer
if rds_timer > ham_radio.settings.rds_interval then
for i=1, #players do
ham_radio:update_rds(players[i])
end
rds_timer = 0
end
end
end)