1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/utils/datastore/warning_on_join_data.lua

144 lines
3.9 KiB
Lua

local Token = require 'utils.token'
local Server = require 'utils.server'
local Event = require 'utils.event'
local Gui = require 'utils.gui'
local dataset = 'warnings'
local set_data = Server.set_data
local try_get_data = Server.try_get_data
local warning_frame_name = Gui.uid_name()
local discard_button_name = Gui.uid_name()
local Public = {}
local function draw_warning_frame(player, message)
local main_frame, inside_table = Gui.add_main_frame_with_toolbar(player, 'screen', warning_frame_name, nil, nil, 'Warning', true, 2)
if not main_frame or not inside_table then
return
end
local main_frame_style = main_frame.style
main_frame_style.width = 400
main_frame.auto_center = true
local content_flow = inside_table.add {type = 'flow', direction = 'horizontal'}
content_flow.style.top_padding = 16
content_flow.style.bottom_padding = 16
content_flow.style.left_padding = 24
content_flow.style.right_padding = 24
content_flow.style.horizontally_stretchable = false
local sprite_flow = content_flow.add {type = 'flow'}
sprite_flow.style.vertical_align = 'center'
sprite_flow.style.vertically_stretchable = false
sprite_flow.add {type = 'sprite', sprite = 'utility/warning_icon'}
local label_flow = content_flow.add {type = 'flow'}
label_flow.style.horizontal_align = 'left'
label_flow.style.top_padding = 10
label_flow.style.left_padding = 24
local warning_message = '[font=heading-2]Message from Comfy to: ' .. player.name .. '[/font]\n' .. message
label_flow.style.horizontally_stretchable = false
local label = label_flow.add {type = 'label', caption = warning_message}
label.style.single_line = false
local bottom_flow = main_frame.add({type = 'flow', direction = 'horizontal'})
local left_flow = bottom_flow.add({type = 'flow'})
left_flow.style.horizontal_align = 'left'
left_flow.style.horizontally_stretchable = true
local close_button = left_flow.add({type = 'button', name = discard_button_name, caption = 'Understood'})
close_button.style = 'back_button'
player.opened = main_frame
end
local fetch =
Token.register(
function(data)
local key = data.key
if not key then
return
end
local value = data.value
if not value then
return
end
local player = game.get_player(key)
if not player or not player.valid then
return
end
draw_warning_frame(player, value)
end
)
--- Tries to get data from the webpanel and applies the value to the player.
-- @param data_set player token
function Public.fetch(key)
local secs = Server.get_current_time()
if not secs then
local player = game.players[key]
if not player or not player.valid then
return
end
return
else
try_get_data(dataset, key, fetch)
end
end
Event.add(
defines.events.on_player_joined_game,
function(event)
local player = game.get_player(event.player_index)
if not player or not player.valid then
return
end
Public.fetch(player.name)
end
)
Gui.on_click(
discard_button_name,
function(event)
local player = event.player
local screen = player.gui.screen
local frame = screen[warning_frame_name]
if not player or not player.valid then
return
end
if frame and frame.valid then
frame.destroy()
set_data(dataset, player.name)
end
end
)
Server.on_data_set_changed(
dataset,
function(data)
if not data then
return
end
local key = data.key
local value = data.value
local player = game.get_player(key)
if not player or not player.valid then
return
end
draw_warning_frame(player, value)
end
)
return Public