refactor using Announcement object
This commit is contained in:
parent
ecf3f06555
commit
68e45eabe8
35
init.lua
35
init.lua
@ -142,15 +142,29 @@ local function hide_hud_waypoint(player_name, hud_ids)
|
||||
end
|
||||
end
|
||||
|
||||
local Announcement = {}
|
||||
|
||||
function Announcement:new(announcer_name, radius, message, icon, timeout)
|
||||
local a = {
|
||||
announcer_name = announcer_name,
|
||||
radius = radius,
|
||||
message = message,
|
||||
icon = icon,
|
||||
timeout = timeout,
|
||||
players_huds = {},
|
||||
}
|
||||
setmetatable(a, self)
|
||||
return a
|
||||
end
|
||||
|
||||
local prepared_announcements = {}
|
||||
local function prepare_announcement(announcer_name, announce_radius, message, announce_icon, announce_timeout)
|
||||
local function prepare_announcement(announcer_name, radius, message, icon, timeout)
|
||||
--prepared_announcements[select(1,...)] = table.pack(...) -- does not work in older lua?
|
||||
prepared_announcements[announcer_name] = {announcer_name, announce_radius, message, announce_icon, announce_timeout}
|
||||
prepared_announcements[announcer_name] = Announcement:new(announcer_name, radius, message, icon, timeout)
|
||||
end
|
||||
|
||||
|
||||
local function add_announcement(announcer, announcer_name, radius, message, icon_name, timeout)
|
||||
local function add_announcement(announcer, announcement)
|
||||
local player_pos = announcer:get_pos()
|
||||
-- TODO use pointed thing to provide some description?
|
||||
local pointed_pos, pointed_thing = get_pointed_position(announcer, point_range)
|
||||
@ -159,33 +173,33 @@ local function add_announcement(announcer, announcer_name, radius, message, icon
|
||||
pointed_pos = player_pos
|
||||
end
|
||||
|
||||
for i, object in pairs(minetest.get_objects_inside_radius(player_pos, radius)) do
|
||||
for i, object in pairs(minetest.get_objects_inside_radius(player_pos, announcement.radius)) do
|
||||
if object:is_player() then
|
||||
local player = object
|
||||
local player_name = player:get_player_name()
|
||||
local hud_ids = show_hud_waypoint(player, pointed_pos, message, icon_name)
|
||||
local hud_ids = show_hud_waypoint(player, pointed_pos, announcement.message, announcement.icon)
|
||||
minetest.after(announce_timeout, hide_hud_waypoint, player_name, hud_ids)
|
||||
end
|
||||
end
|
||||
|
||||
local rounded_pos = vector.round(pointed_pos)
|
||||
local chat_message = "[ANNOUNCE] (" ..
|
||||
announcer_name ..
|
||||
announcement.announcer_name ..
|
||||
") Look: " ..
|
||||
message .. " " ..
|
||||
announcement.message .. " " ..
|
||||
minetest.pos_to_string(rounded_pos)
|
||||
minetest.chat_send_all(minetest.colorize(chat_message_color, chat_message))
|
||||
end
|
||||
|
||||
|
||||
local function check_click_for_prepared_players(dtime)
|
||||
for player_name, prepared_args in pairs(prepared_announcements) do
|
||||
for player_name, announcement in pairs(prepared_announcements) do
|
||||
local player = minetest.get_player_by_name(player_name)
|
||||
if player then
|
||||
local player_controls = player:get_player_control()
|
||||
if player_controls['dig'] then
|
||||
-- place prepared announcement at pointed position
|
||||
add_announcement(player, unpack(prepared_args))
|
||||
add_announcement(player, announcement)
|
||||
prepared_announcements[player_name] = nil
|
||||
elseif player_controls['place'] then
|
||||
-- cancel prepared announcement
|
||||
@ -229,7 +243,8 @@ minetest.register_chatcommand(announce_command_name, {
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then -- player is online
|
||||
local player_name = player:get_player_name()
|
||||
add_announcement(player, player_name, announce_radius, param, announce_icon, announce_timeout)
|
||||
local announcement = Announcement:new(player_name, announce_radius, param, announce_icon, announce_timeout)
|
||||
add_announcement(player, announcement)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
|
Loading…
Reference in New Issue
Block a user