ham_radio/init.lua

97 lines
2.7 KiB
Lua
Raw Normal View History

2019-12-06 14:58:49 +01:00
local modpath = minetest.get_modpath("ham_radio")
local mod_storage = minetest.get_mod_storage()
ham_radio = rawget(_G, "ham_radio") or {}
ham_radio = {
2019-12-06 15:25:03 +01:00
playerhuds = {},
2019-12-07 21:54:19 +01:00
player_broadcasts = {},
2019-12-07 10:42:08 +01:00
is_receiver_wielded = {},
transmitters = {},
2019-12-06 15:25:03 +01:00
settings = {
2019-12-07 21:54:19 +01:00
broadcast_color = '#607d8b',
broadcast_interval = 10, -- seconds
2019-12-07 10:42:08 +01:00
hud_pos = { x = 0.5, y = 0.8 },
-- radio frequency range
2019-12-07 20:24:49 +01:00
frequency = {
min = 0,
max = 9999999
2019-12-08 00:29:27 +01:00
},
-- range where only one transmitter is permitted
locked_frequency = {
min = 100000,
max = 9999999
},
-- sub-range of frequency range
beacon_frequency = {
min = 1000000,
max = 9999999
},
2019-12-08 00:29:27 +01:00
digiline_channel = "ham_radio",
2019-12-06 15:25:03 +01:00
}
2019-12-06 14:58:49 +01:00
}
-- preload transmitter data
local all_transmitters = mod_storage:to_table().fields
for key, transmitter_data in pairs(all_transmitters) do
ham_radio.transmitters[key] = minetest.parse_json(transmitter_data)
2019-12-06 14:58:49 +01:00
end
2019-12-08 00:05:39 +01:00
function ham_radio.save_transmitter(pos, meta)
local transmitter_properties = {
frequency = meta:get_string("frequency"),
broadcast_message = meta:get_string("broadcast_message"),
operated_by = meta:get_string("operated_by")
}
local key = minetest.pos_to_string(pos, 0)
ham_radio.transmitters[key] = transmitter_properties -- cache
mod_storage:set_string(key, minetest.write_json(transmitter_properties)) -- storage
2019-12-06 14:58:49 +01:00
end
2019-12-07 19:40:42 +01:00
function ham_radio.delete_transmitter(pos)
local key = minetest.pos_to_string(pos, 0)
ham_radio.transmitters[key] = nil -- cache
mod_storage:set_string(key, '') -- storage
2019-12-06 14:58:49 +01:00
end
2019-12-07 20:24:49 +01:00
dofile(modpath.."/helpers.lua")
2019-12-06 16:30:45 +01:00
dofile(modpath.."/craft.lua")
2019-12-08 00:29:27 +01:00
dofile(modpath.."/digiline.lua")
2019-12-06 14:58:49 +01:00
dofile(modpath.."/transmitter.lua")
2019-12-07 21:54:19 +01:00
dofile(modpath.."/receiver.lua")
dofile(modpath.."/beacon.lua")
2019-12-07 21:54:19 +01:00
dofile(modpath.."/broadcast.lua")
2019-12-06 14:58:49 +01:00
dofile(modpath.."/hud.lua")
2019-12-07 21:54:19 +01:00
-- globals
minetest.register_on_newplayer(ham_radio.toggle_hud)
minetest.register_on_joinplayer(ham_radio.toggle_hud)
minetest.register_on_leaveplayer(function(player)
2019-12-08 01:15:39 +01:00
local name = player:get_player_name()
2019-12-07 21:54:19 +01:00
ham_radio.is_receiver_wielded[name] = false
2019-12-08 01:15:39 +01:00
ham_radio.playerhuds[name] = nil
2019-12-07 21:54:19 +01:00
end)
local updatetimer = 0
local broadcasttimer = 0
minetest.register_globalstep(function(dtime)
updatetimer = updatetimer + dtime
broadcasttimer = broadcasttimer + 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
end
if broadcasttimer > ham_radio.settings.broadcast_interval then
local players = minetest.get_connected_players()
for i=1, #players do
ham_radio:update_broadcast(players[i])
end
broadcasttimer = 0
end
end)