mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
145 lines
3.9 KiB
Lua
145 lines
3.9 KiB
Lua
-- created by Gerkiz for ComfyFactorio
|
|
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
|