From 39f742c3113972b6f69b5f0e6dc3338d85a2aa4e Mon Sep 17 00:00:00 2001 From: whosit Date: Tue, 18 May 2021 18:30:38 +0300 Subject: [PATCH] show icon, better chat message --- init.lua | 50 +++++++++++++++++++++++++--------- textures/exclamation_mark.png | Bin 0 -> 150 bytes 2 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 textures/exclamation_mark.png diff --git a/init.lua b/init.lua index ced74a0..1de149f 100644 --- a/init.lua +++ b/init.lua @@ -1,9 +1,10 @@ -- TODO show some text on screen for a short while? -- 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_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_color = 0xFFFFFF local point_range = 180 @@ -20,9 +21,9 @@ local function raycast_crosshair(player, range) local pointed_thing = ray:next() while pointed_thing do if pointed_thing.type == "object" and pointed_thing.ref == player then + -- exclude the player themselves from the raycast pointed_thing = ray:next() else - print("pointed_thing.type", pointed_thing.type) return pointed_thing end end @@ -43,34 +44,51 @@ local function get_pointed_position(player, range) end -local function show_hud_waypoint(player, point_pos, name) - local hud_id = player:hud_add({ +local function show_hud_waypoint(player, point_pos, name, icon_name) + local hud_id1 = player:hud_add({ hud_elem_type = "waypoint", name = name, text = "m", -- distance suffix precision = waypoint_precision, number = waypoint_color, 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 -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) if player then - player:hud_remove(hud_id) + for _,hud_id in pairs(hud_ids) do + player:hud_remove(hud_id) + 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 if object:is_player() then local player = object local player_name = player:get_player_name() - local hud_id = show_hud_waypoint(player, point_pos, name) - minetest.after(announce_timeout, hide_hud_waypoint, player_name, hud_id) + local hud_ids = show_hud_waypoint(player, point_pos, name, icon_name) + minetest.after(announce_timeout, hide_hud_waypoint, player_name, hud_ids) end end end @@ -84,6 +102,7 @@ minetest.register_chatcommand(announce_command_name, { local player = minetest.get_player_by_name(name) if player then -- player is online local player_pos = player:get_pos() + local player_name = player:get_player_name() -- TODO use pointed thing to provide some description? local pointed_pos, pointed_thing = get_pointed_position(player, point_range) if not pointed_pos then @@ -91,8 +110,13 @@ minetest.register_chatcommand(announce_command_name, { pointed_pos = player_pos end -- TODO limit message length? - add_announcement(player, player_pos, announce_radius, pointed_pos, param, announce_timeout) - return true, "Look at " .. minetest.pos_to_string(pointed_pos) + add_announcement(player, player_pos, announce_radius, pointed_pos, param, announce_icon, announce_timeout) + local rounded_pos = vector.round(pointed_pos) + return true, minetest.colorize("blue", + "[ANNOUNCE] (" .. + player_name .. + ") Look: " .. param .. " " .. + minetest.pos_to_string(rounded_pos)) else return false end diff --git a/textures/exclamation_mark.png b/textures/exclamation_mark.png new file mode 100644 index 0000000000000000000000000000000000000000..2a389dba88128218dc785167230aaf535b74f791 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf