mirror of
https://github.com/pandorabox-io/locator.git
synced 2026-05-04 15:56:52 -06:00
working beacon and radar
This commit is contained in:
+114
@@ -0,0 +1,114 @@
|
||||
|
||||
local update_formspec = function(meta)
|
||||
local inv = meta:get_inventory()
|
||||
|
||||
local active = meta:get_int("active") == 1
|
||||
local state = "Inactive"
|
||||
|
||||
if active then
|
||||
state = "Active"
|
||||
end
|
||||
|
||||
local name = meta:get_string("name")
|
||||
meta:set_string("infotext", "Locator: " .. name .. " (" .. state .. ")")
|
||||
|
||||
meta:set_string("formspec", "size[8,3;]" ..
|
||||
-- col 1
|
||||
"field[0,1.5;4,1;name;Name;" .. name .. "]" ..
|
||||
"button_exit[4,1;4,1;save;Save]" ..
|
||||
"button_exit[0,2;8,1;toggle;Toggle]" ..
|
||||
"")
|
||||
end
|
||||
|
||||
-- base beacon
|
||||
minetest.register_node("locator:beacon_base", {
|
||||
description = "Locator beacon base",
|
||||
tiles = {
|
||||
"locator_beacon_base.png",
|
||||
"locator_beacon_base.png",
|
||||
"locator_beacon_base.png",
|
||||
"locator_beacon_base.png",
|
||||
"locator_beacon_base.png",
|
||||
"locator_beacon_base.png",
|
||||
},
|
||||
groups = {cracky=3,oddly_breakable_by_hand=3},
|
||||
sounds = default.node_sound_glass_defaults()
|
||||
})
|
||||
|
||||
-- level/range register beacon
|
||||
local register_beacon = function(level, range)
|
||||
|
||||
minetest.register_node("locator:beacon_" .. level, {
|
||||
description = "Locator beacon, level: " .. level .. ", range: " .. range,
|
||||
tiles = {
|
||||
"locator_beacon_level" .. level .. ".png",
|
||||
"locator_beacon_level" .. level .. ".png",
|
||||
"locator_beacon_level" .. level .. ".png",
|
||||
"locator_beacon_level" .. level .. ".png",
|
||||
"locator_beacon_level" .. level .. ".png",
|
||||
"locator_beacon_level" .. level .. ".png"
|
||||
},
|
||||
groups = {cracky=3,oddly_breakable_by_hand=3},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name() or "")
|
||||
end,
|
||||
|
||||
on_dig = function(pos)
|
||||
locator.remove_beacon(pos)
|
||||
return true
|
||||
end,
|
||||
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
meta:set_string("name", "<unconfigured>")
|
||||
meta:set_int("range", range)
|
||||
meta:set_int("active", 0)
|
||||
|
||||
update_formspec(meta)
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local playername = sender:get_player_name()
|
||||
|
||||
if playername == meta:get_string("owner") then
|
||||
-- owner
|
||||
if fields.save then
|
||||
|
||||
local name = fields.name
|
||||
meta:set_string("name", fields.name)
|
||||
|
||||
|
||||
end
|
||||
|
||||
if fields.toggle then
|
||||
if meta:get_int("active") == 1 then
|
||||
meta:set_int("active", 0)
|
||||
else
|
||||
meta:set_int("active", 1)
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
-- non-owner
|
||||
end
|
||||
|
||||
|
||||
update_formspec(meta)
|
||||
locator.update_beacon(pos, meta)
|
||||
end
|
||||
|
||||
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
|
||||
register_beacon(1, 500) -- short range
|
||||
register_beacon(2, 5000) -- mid range
|
||||
register_beacon(3, 30000) -- long range
|
||||
|
||||
Reference in New Issue
Block a user