1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-10 00:43:27 +02:00
ComfyFactorio/utils/datastore/current_time_data.lua
2023-11-11 23:59:17 +01:00

132 lines
3.2 KiB
Lua

-- created by Gerkiz for ComfyFactorio
local Server = require 'utils.server'
local Event = require 'utils.event'
local Gui = require 'utils.gui'
local Color = require 'utils.color_presets'
local current_time_label = 'current_time_label'
local function validate_player(player)
if not player then
return false
end
if not player.valid then
return false
end
return true
end
local function set_location(player)
local gui = player.gui
local label = gui.screen[current_time_label]
if not label or not label.valid then
return
end
local res = player.display_resolution
local uis = player.display_scale
label.location = {x = res.width - 423 * uis, y = 50 * uis}
end
local function create_label(player)
local date = Server.get_current_date_with_time()
if not date then
date = '1970-01-01'
end
local label =
player.gui.screen.add(
{
type = 'label',
name = current_time_label,
caption = date
}
)
local style = label.style
style.font = 'default-game'
return label
end
Event.add(
defines.events.on_player_joined_game,
function(event)
local player = game.get_player(event.player_index)
local label = player.gui.screen[current_time_label]
if not label or not label.valid then
label = create_label(player)
end
set_location(player)
label.visible = false
end
)
-- Update the value each second
Event.on_nth_tick(
60,
function()
local date = Server.get_current_date_with_time()
if not date then
date = '1969-01-01 00:00'
end
local players = game.connected_players
for i = 1, #players do
local player = players[i]
local label = player.gui.screen[current_time_label]
if label and label.valid then
label.caption = date
set_location(player)
end
end
end
)
commands.add_command(
'server-date',
'Toggle to show the date',
function()
local player = game.player
local secs = Server.get_current_time()
if validate_player(player) then
if not secs then
return player.print('Not running on Comfy backend.', Color.warning)
end
local label = player.gui.screen[current_time_label]
if not label or not label.valid then
label = create_label(player)
end
if label.visible then
label.visible = false
player.print('Removed date-label.', Color.warning)
else
label.visible = true
set_location(player)
player.print('Added date-label.', Color.success)
end
end
end
)
Gui.screen_to_bypass(current_time_label)
Event.add(
defines.events.on_player_display_resolution_changed,
function(event)
local player = game.get_player(event.player_index)
set_location(player)
end
)
Event.add(
defines.events.on_player_display_scale_changed,
function(event)
local player = game.get_player(event.player_index)
set_location(player)
end
)