43 lines
1.4 KiB
Lua
43 lines
1.4 KiB
Lua
local _messages = {}
|
|
|
|
---@alias MessageCategory "error" | "warning" | "hint"
|
|
|
|
---@class PlayerMessage
|
|
---@field category MessageCategory
|
|
---@field text LocalisedString
|
|
---@field lifetime integer
|
|
|
|
---@param player LuaPlayer
|
|
---@param category MessageCategory
|
|
---@param message LocalisedString
|
|
---@param lifetime integer
|
|
function _messages.raise(player, category, message, lifetime)
|
|
local messages = util.globals.ui_state(player).messages
|
|
table.insert(messages, {category=category, text=message, lifetime=lifetime})
|
|
end
|
|
|
|
---@param player LuaPlayer
|
|
function _messages.refresh(player)
|
|
-- Only refresh messages if the user is actually looking at them
|
|
if not main_dialog.is_in_focus(player) then return end
|
|
|
|
local ui_state = util.globals.ui_state(player)
|
|
local message_frame = ui_state.main_elements["messages_frame"]
|
|
if not message_frame or not message_frame.valid then return end
|
|
|
|
local messages = ui_state.messages
|
|
message_frame.visible = (next(messages) ~= nil)
|
|
message_frame.clear()
|
|
|
|
for i=#messages, 1, -1 do
|
|
local message = messages[i] ---@type PlayerMessage
|
|
local caption = {"", "[img=warning-white] ", {"fp." .. message.category .. "_message", message.text}}
|
|
message_frame.add{type="label", caption=caption, style="bold_label"}
|
|
|
|
message.lifetime = message.lifetime - 1
|
|
if message.lifetime == 0 then table.remove(messages, i) end
|
|
end
|
|
end
|
|
|
|
return _messages
|