minetest.register_on_leaveplayer(function(player)
player_huds[player:get_player_name()] = nil
+ player_waypoints[player:get_player_name()] = nil
end)
local etime = 0
return true
end,
})
+
+local player_waypoints = {}
+
+-- Use this to test waypoint capabilities
+minetest.register_chatcommand("hudwaypoints", {
+ params = "[ add | add_change | remove ]",
+ description = "Create HUD waypoints at your position for testing (add: Add waypoints and change them after 0.5s (default). add_change: Add waypoints and change immediately. remove: Remove all waypoints)",
+ func = function(name, params)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ if params == "remove" then
+ if player_waypoints[name] then
+ for i=1, #player_waypoints[name] do
+ player:hud_remove(player_waypoints[name][i])
+ end
+ player_waypoints[name] = {}
+ end
+ return true, "Waypoints removed."
+ end
+ if not (params == "add_change" or params == "add" or params == "") then
+ -- Incorrect syntax
+ return false
+ end
+ local regular = player:hud_add {
+ hud_elem_type = "waypoint",
+ name = "regular waypoint",
+ text = "m",
+ number = 0xFFFFFF,
+ world_pos = vector.add(player:get_pos(), {x = 0, y = 1.5, z = 0})
+ }
+ local reduced_precision = player:hud_add {
+ hud_elem_type = "waypoint",
+ name = "imprecise waypoint",
+ text = "m (0.1 steps, precision = 10)",
+ precision = 10,
+ number = 0xFFFFFF,
+ world_pos = vector.add(player:get_pos(), {x = 0, y = 1, z = 0})
+ }
+ local hidden_distance = player:hud_add {
+ hud_elem_type = "waypoint",
+ name = "waypoint with hidden distance",
+ text = "this text is hidden as well (precision = 0)",
+ precision = 0,
+ number = 0xFFFFFF,
+ world_pos = vector.add(player:get_pos(), {x = 0, y = 0.5, z = 0})
+ }
+ local function change(chplayer)
+ if not (chplayer and chplayer:is_player()) then
+ return
+ end
+ if regular then
+ chplayer:hud_change(regular, "world_pos", vector.add(player:get_pos(), {x = 0, y = 3, z = 0}))
+ chplayer:hud_change(regular, "number", 0xFF0000)
+ end
+ if reduced_precision then
+ chplayer:hud_change(reduced_precision, "precision", 2)
+ chplayer:hud_change(reduced_precision, "text", "m (0.5 steps, precision = 2)")
+ chplayer:hud_change(reduced_precision, "number", 0xFFFF00)
+ end
+ if hidden_distance then
+ chplayer:hud_change(hidden_distance, "number", 0x0000FF)
+ end
+ minetest.chat_send_player(chplayer:get_player_name(), "Waypoints changed.")
+ end
+ if params == "add_change" then
+ -- change immediate
+ change(player)
+ else
+ minetest.after(0.5, change, player)
+ end
+ local image_waypoint = player:hud_add {
+ hud_elem_type = "image_waypoint",
+ text = "testhud_waypoint.png",
+ world_pos = player:get_pos(),
+ scale = {x = 3, y = 3},
+ offset = {x = 0, y = -32}
+ }
+ if not player_waypoints[name] then
+ player_waypoints[name] = {}
+ end
+ if regular then
+ table.insert(player_waypoints[name], regular)
+ end
+ if reduced_precision then
+ table.insert(player_waypoints[name], reduced_precision)
+ end
+ if hidden_distance then
+ table.insert(player_waypoints[name], hidden_distance)
+ end
+ if image_waypoint then
+ table.insert(player_waypoints[name], image_waypoint)
+ end
+ regular = regular or "error"
+ reduced_precision = reduced_precision or "error"
+ hidden_distance = hidden_distance or "error"
+ image_waypoint = image_waypoint or "error"
+ return true, "Waypoints added. IDs: regular: " .. regular .. ", reduced precision: " .. reduced_precision ..
+ ", hidden distance: " .. hidden_distance .. ", image waypoint: " .. image_waypoint
+ end
+})
+
+minetest.register_on_leaveplayer(function(player)
+end)
+
+minetest.register_on_joinplayer(function(player)
+ player:set_properties({zoom_fov = 15})
+end)
+
+minetest.register_chatcommand("zoomfov", {
+ params = "[<FOV>]",
+ description = "Set or display your zoom_fov",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ if param == "" then
+ local fov = player:get_properties().zoom_fov
+ return true, "zoom_fov = "..tostring(fov)
+ end
+ local fov = tonumber(param)
+ if not fov then
+ return false, "Missing or incorrect zoom_fov parameter!"
+ end
+ player:set_properties({zoom_fov = fov})
+ fov = player:get_properties().zoom_fov
+ return true, "zoom_fov = "..tostring(fov)
+ end,
+})
end,
})
-minetest.register_on_joinplayer(function(player)
- player:set_properties({zoom_fov = 15})
-end)
-
-minetest.register_chatcommand("zoomfov", {
- params = "[<FOV>]",
- description = "Set or display your zoom_fov",
- func = function(name, param)
- local player = minetest.get_player_by_name(name)
- if not player then
- return false, "No player."
- end
- if param == "" then
- local fov = player:get_properties().zoom_fov
- return true, "zoom_fov = "..tostring(fov)
- end
- local fov = tonumber(param)
- if not fov then
- return false, "Missing or incorrect zoom_fov parameter!"
- end
- player:set_properties({zoom_fov = fov})
- fov = player:get_properties().zoom_fov
- return true, "zoom_fov = "..tostring(fov)
- end,
-})
-
local s_infplace = minetest.settings:get("devtest_infplace")
if s_infplace == "true" then
infplace = true
})
-
--- Use this to test waypoint capabilities
-minetest.register_chatcommand("test_waypoints", {
- params = "[change_immediate]",
- description = "tests waypoint capabilities",
- func = function(name, params)
- local player = minetest.get_player_by_name(name)
- local regular = player:hud_add {
- hud_elem_type = "waypoint",
- name = "regular waypoint",
- text = "m",
- number = 0xFF0000,
- world_pos = vector.add(player:get_pos(), {x = 0, y = 1.5, z = 0})
- }
- local reduced_precision = player:hud_add {
- hud_elem_type = "waypoint",
- name = "better waypoint",
- text = "m (0.5 steps, precision = 2)",
- precision = 10,
- number = 0xFFFF00,
- world_pos = vector.add(player:get_pos(), {x = 0, y = 1, z = 0})
- }
- local function change()
- if regular then
- player:hud_change(regular, "world_pos", vector.add(player:get_pos(), {x = 0, y = 3, z = 0}))
- end
- if reduced_precision then
- player:hud_change(reduced_precision, "precision", 2)
- end
- end
- if params ~= "" then
- -- change immediate
- change()
- else
- minetest.after(0.5, change)
- end
- regular = regular or "error"
- reduced_precision = reduced_precision or "error"
- local hidden_distance = player:hud_add {
- hud_elem_type = "waypoint",
- name = "waypoint with hidden distance",
- text = "this text is hidden as well (precision = 0)",
- precision = 0,
- number = 0x0000FF,
- world_pos = vector.add(player:get_pos(), {x = 0, y = 0.5, z = 0})
- } or "error"
- local image_waypoint = player:hud_add {
- hud_elem_type = "image_waypoint",
- text = "wieldhand.png",
- world_pos = player:get_pos(),
- scale = {x = 10, y = 10},
- offset = {x = 0, y = -32}
- } or "error"
- minetest.chat_send_player(name, "Waypoint IDs: regular: " .. regular .. ", reduced precision: " .. reduced_precision ..
- ", hidden distance: " .. hidden_distance .. ", image waypoint: " .. image_waypoint)
- end
-})
-
-- Unlimited node placement
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
if placer and placer:is_player() then