show icon, better chat message

This commit is contained in:
whosit 2021-05-18 18:30:38 +03:00
parent dcfd8dfd33
commit 39f742c311
2 changed files with 37 additions and 13 deletions

View File

@ -1,9 +1,10 @@
-- TODO show some text on screen for a short while? -- TODO show some text on screen for a short while?
-- TODO "admin" command version with configurable pos, radius and timeout -- TODO "admin" command version with configurable pos, radius and timeout
local announce_command_name = "look!" local announce_command_name = "look"
local announce_radius = 256 local announce_radius = 256
local announce_timeout = 20 local announce_icon = "exclamation_mark.png"
local announce_timeout = 10
local waypoint_precision = 1 -- set to 1 to show whole number or 10 for 1 decimal local waypoint_precision = 1 -- set to 1 to show whole number or 10 for 1 decimal
local waypoint_color = 0xFFFFFF local waypoint_color = 0xFFFFFF
local point_range = 180 local point_range = 180
@ -20,9 +21,9 @@ local function raycast_crosshair(player, range)
local pointed_thing = ray:next() local pointed_thing = ray:next()
while pointed_thing do while pointed_thing do
if pointed_thing.type == "object" and pointed_thing.ref == player then if pointed_thing.type == "object" and pointed_thing.ref == player then
-- exclude the player themselves from the raycast
pointed_thing = ray:next() pointed_thing = ray:next()
else else
print("pointed_thing.type", pointed_thing.type)
return pointed_thing return pointed_thing
end end
end end
@ -43,34 +44,51 @@ local function get_pointed_position(player, range)
end end
local function show_hud_waypoint(player, point_pos, name) local function show_hud_waypoint(player, point_pos, name, icon_name)
local hud_id = player:hud_add({ local hud_id1 = player:hud_add({
hud_elem_type = "waypoint", hud_elem_type = "waypoint",
name = name, name = name,
text = "m", -- distance suffix text = "m", -- distance suffix
precision = waypoint_precision, precision = waypoint_precision,
number = waypoint_color, number = waypoint_color,
world_pos = point_pos, world_pos = point_pos,
offset = {x=0,y=0},
alignment = {x=0, y=1},
}) })
return hud_id
local hud_id2 = player:hud_add({
hud_elem_type = "image_waypoint",
scale = {x=-3,y=-3},
text = icon_name,
alignment = {x=0,y=-1},
world_pos = point_pos,
offset = {x=0,y=0},
--name = name,
--precision = waypoint_precision,
--number = waypoint_color,
})
local hud_ids = {hud_id1, hud_id2}
return hud_ids
end end
local function hide_hud_waypoint(player_name, hud_id) local function hide_hud_waypoint(player_name, hud_ids)
local player = minetest.get_player_by_name(player_name) local player = minetest.get_player_by_name(player_name)
if player then if player then
player:hud_remove(hud_id) for _,hud_id in pairs(hud_ids) do
player:hud_remove(hud_id)
end
end end
end end
local function add_announcement(announcer, pos, radius, point_pos, name, timeout) local function add_announcement(announcer, pos, radius, point_pos, name, icon_name, timeout)
for i, object in pairs(minetest.get_objects_inside_radius(pos, radius)) do for i, object in pairs(minetest.get_objects_inside_radius(pos, radius)) do
if object:is_player() then if object:is_player() then
local player = object local player = object
local player_name = player:get_player_name() local player_name = player:get_player_name()
local hud_id = show_hud_waypoint(player, point_pos, name) local hud_ids = show_hud_waypoint(player, point_pos, name, icon_name)
minetest.after(announce_timeout, hide_hud_waypoint, player_name, hud_id) minetest.after(announce_timeout, hide_hud_waypoint, player_name, hud_ids)
end end
end end
end end
@ -84,6 +102,7 @@ minetest.register_chatcommand(announce_command_name, {
local player = minetest.get_player_by_name(name) local player = minetest.get_player_by_name(name)
if player then -- player is online if player then -- player is online
local player_pos = player:get_pos() local player_pos = player:get_pos()
local player_name = player:get_player_name()
-- TODO use pointed thing to provide some description? -- TODO use pointed thing to provide some description?
local pointed_pos, pointed_thing = get_pointed_position(player, point_range) local pointed_pos, pointed_thing = get_pointed_position(player, point_range)
if not pointed_pos then if not pointed_pos then
@ -91,8 +110,13 @@ minetest.register_chatcommand(announce_command_name, {
pointed_pos = player_pos pointed_pos = player_pos
end end
-- TODO limit message length? -- TODO limit message length?
add_announcement(player, player_pos, announce_radius, pointed_pos, param, announce_timeout) add_announcement(player, player_pos, announce_radius, pointed_pos, param, announce_icon, announce_timeout)
return true, "Look at " .. minetest.pos_to_string(pointed_pos) local rounded_pos = vector.round(pointed_pos)
return true, minetest.colorize("blue",
"[ANNOUNCE] (" ..
player_name ..
") Look: " .. param .. " " ..
minetest.pos_to_string(rounded_pos))
else else
return false return false
end end

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 B