diff --git a/player_list.lua b/player_list.lua index c4d5a6bc..7992916a 100644 --- a/player_list.lua +++ b/player_list.lua @@ -3,6 +3,7 @@ local Global = require 'utils.global' local Gui = require 'utils.gui' local UserGroups = require 'user_groups' local PlayerStats = require 'player_stats' +local Utils = require 'utils.utils' local poke_messages = require 'resources.poke_messages' local player_sprites = require 'resources.player_sprites' @@ -75,36 +76,6 @@ local function lighten_color(color) color.a = 1 end -local minutes_to_ticks = 60 * 60 -local hours_to_ticks = 60 * 60 * 60 -local ticks_to_minutes = 1 / minutes_to_ticks -local ticks_to_hours = 1 / hours_to_ticks - -local function format_time(ticks) - local result = {} - - local hours = math.floor(ticks * ticks_to_hours) - if hours > 0 then - ticks = ticks - hours * hours_to_ticks - table.insert(result, hours) - if hours == 1 then - table.insert(result, 'hour') - else - table.insert(result, 'hours') - end - end - - local minutes = math.floor(ticks * ticks_to_minutes) - table.insert(result, minutes) - if minutes == 1 then - table.insert(result, 'minute') - else - table.insert(result, 'minutes') - end - - return table.concat(result, ' ') -end - local function format_distance(tiles) return math.round(tiles * 0.001, 1) .. ' km' end @@ -224,7 +195,7 @@ local column_builders = { return label end, draw_cell = function(parent, cell_data) - local text = format_time(cell_data) + local text = Utils.format_time(cell_data) local label = parent.add {type = 'label', name = time_cell_name, caption = text} local label_style = label.style @@ -660,6 +631,7 @@ end Gui.on_click( poke_cell_name, function(event) + game.print(serpent.dump(event.element.parent.type)) local element = event.element local button_data = Gui.get_data(element) local poke_player = button_data.player diff --git a/utils/utils.lua b/utils/utils.lua index 5c51a4d1..cf10f13c 100644 --- a/utils/utils.lua +++ b/utils/utils.lua @@ -1,152 +1,131 @@ -local Module = {} - -Module.distance = function(pos1, pos2) - local dx = pos2.x - pos1.x - local dy = pos2.y - pos1.y - return math.sqrt(dx * dx + dy * dy) -end - --- rounds number (num) to certain number of decimal places (idp) -math.round = function(num, idp) - local mult = 10 ^ (idp or 0) - return math.floor(num * mult + 0.5) / mult -end - -function math.clamp(num, min, max) - if num < min then - return min - elseif num > max then - return max - else - return num - end -end - -Module.print_except = function(msg, player) - for _, p in pairs(game.players) do - if p.connected and p ~= player then - p.print(msg) - end - end -end - -Module.print_admins = function(msg) - for _, p in pairs(game.players) do - if p.connected and p.admin then - p.print(msg) - end - end -end - -Module.get_actor = function() - if game.player then - return game.player.name - end - return '' -end - -Module.cast_bool = function(var) - if var then - return true - else - return false - end -end - -Module.find_entities_by_last_user = - function(player, surface, filters) - if type(player) == 'string' or not player then - error( - "bad argument #1 to '" .. - debug.getinfo(1, 'n').name .. "' (number or LuaPlayer expected, got " .. type(player) .. ')', - 1 - ) - return - end - if type(surface) ~= 'table' and type(surface) ~= 'number' then - error( - "bad argument #2 to '" .. - debug.getinfo(1, 'n').name .. "' (number or LuaSurface expected, got " .. type(surface) .. ')', - 1 - ) - return - end - local entities = {} - local surface = surface - local player = player - local filters = filters or {} - if type(surface) == 'number' then - surface = game.surfaces[surface] - end - if type(player) == 'number' then - player = game.players[player] - end - filters.force = player.force.name - for _, e in pairs(surface.find_entities_filtered(filters)) do - if e.last_user == player then - table.insert(entities, e) - end - end - return entities -end - -local Gui = require("utils.gui") -local alert_frame_name = Gui.uid_name() -local alert_close_button_name = Gui.uid_name() -function Module.alert(player, lines) - if type(lines) == string then - lines = {lines} - end - local center = player.gui.center - local alert_frame = center[alert_frame_name] - if alert_frame and alert_frame.valid then - Gui.remove_data_recursivly(alert_frame) - alert_frame.destroy() - end - alert_frame = - center.add { - type = 'frame', - name = alert_frame_name, - direction = 'vertical', - caption = 'Alert' - } - alert_frame.style.maximal_width = 500 - player.opened = alert_frame - for _,line in pairs(lines) do - local frame = alert_frame.add { - type = 'label', - caption = line - } - frame.style.single_line = false - end - alert_frame.add {type = 'button', name = alert_close_button_name, caption = 'Close'} - -end - -Gui.on_custom_close( - alert_frame_name, - function(event) - Gui.remove_data_recursivly(event.element) - event.element.destroy() - end -) - -Gui.on_click( - alert_close_button_name, - function(event) - Gui.remove_data_recursivly(event.element) - event.element.parent.destroy() - end -) - - - - -Module.ternary = function(c, t, f) - if c then - return t - else - return f - end -end -return Module +local Module = {} + +Module.distance = function(pos1, pos2) + local dx = pos2.x - pos1.x + local dy = pos2.y - pos1.y + return math.sqrt(dx * dx + dy * dy) +end + +-- rounds number (num) to certain number of decimal places (idp) +math.round = function(num, idp) + local mult = 10 ^ (idp or 0) + return math.floor(num * mult + 0.5) / mult +end + +function math.clamp(num, min, max) + if num < min then + return min + elseif num > max then + return max + else + return num + end +end + +Module.print_except = function(msg, player) + for _, p in pairs(game.players) do + if p.connected and p ~= player then + p.print(msg) + end + end +end + +Module.print_admins = function(msg) + for _, p in pairs(game.players) do + if p.connected and p.admin then + p.print(msg) + end + end +end + +Module.get_actor = function() + if game.player then + return game.player.name + end + return '' +end + +Module.cast_bool = function(var) + if var then + return true + else + return false + end +end + +Module.find_entities_by_last_user = + function(player, surface, filters) + if type(player) == 'string' or not player then + error( + "bad argument #1 to '" .. + debug.getinfo(1, 'n').name .. "' (number or LuaPlayer expected, got " .. type(player) .. ')', + 1 + ) + return + end + if type(surface) ~= 'table' and type(surface) ~= 'number' then + error( + "bad argument #2 to '" .. + debug.getinfo(1, 'n').name .. "' (number or LuaSurface expected, got " .. type(surface) .. ')', + 1 + ) + return + end + local entities = {} + local surface = surface + local player = player + local filters = filters or {} + if type(surface) == 'number' then + surface = game.surfaces[surface] + end + if type(player) == 'number' then + player = game.players[player] + end + filters.force = player.force.name + for _, e in pairs(surface.find_entities_filtered(filters)) do + if e.last_user == player then + table.insert(entities, e) + end + end + return entities +end + +Module.ternary = function(c, t, f) + if c then + return t + else + return f + end +end + + +local minutes_to_ticks = 60 * 60 +local hours_to_ticks = 60 * 60 * 60 +local ticks_to_minutes = 1 / minutes_to_ticks +local ticks_to_hours = 1 / hours_to_ticks +Module.format_time = function(ticks) + local result = {} + + local hours = math.floor(ticks * ticks_to_hours) + if hours > 0 then + ticks = ticks - hours * hours_to_ticks + table.insert(result, hours) + if hours == 1 then + table.insert(result, 'hour') + else + table.insert(result, 'hours') + end + end + + local minutes = math.floor(ticks * ticks_to_minutes) + table.insert(result, minutes) + if minutes == 1 then + table.insert(result, 'minute') + else + table.insert(result, 'minutes') + end + + return table.concat(result, ' ') +end + +return Module