77 lines
2.2 KiB
Lua

local util = require("util")
local deregister_gui_internal
deregister_gui_internal = function(gui_element, data)
data[gui_element.index] = nil
for k, child in pairs (gui_element.children) do
deregister_gui_internal(child, data)
end
end
util.deregister_gui = function(gui_element, data)
local player_data = data[gui_element.player_index]
if not player_data then return end
deregister_gui_internal(gui_element, player_data)
end
util.register_gui = function(data, gui_element, param)
local player_data = data[gui_element.player_index]
if not player_data then
data[gui_element.player_index] = {}
player_data = data[gui_element.player_index]
end
player_data[gui_element.index] = param
end
util.gui_action_handler = function(event, data, functions)
error("don't actually use me")
if not data then error("Gui action handler data is nil") end
if not functions then error("Gui action handler functions is nil") end
local element = event.element
if not (element and element.valid) then return end
local player_data = data[event.player_index]
if not player_data then return end
local action = player_data[element.index]
if action then
functions[action.type](event, action)
return true
end
end
util.center = function(area)
return {x = (area.left_top.x + area.right_bottom.x) / 2, y = (area.left_top.y + area.right_bottom.y) / 2}
end
util.distance = function(p1, p2)
return (((p1.x - p2.x) ^ 2) + ((p1.y - p2.y) ^ 2)) ^ 0.5
end
util.radius = function(area)
return util.distance(area.right_bottom, area.left_top) / 2
end
util.clear_item = function(entity, item_name)
if not (entity and entity.valid and item_name) then return end
entity.remove_item{name = item_name, count = entity.get_item_count(item_name)}
end
util.copy = util.table.deepcopy
util.first_key = function(map)
local k, v = next(map)
return k
end
util.first_value = function(map)
local k, v = next(map)
return v
end
util.angle = function(position_1, position_2)
local d_x = (position_2[1] or position_2.x) - (position_1[1] or position_1.x)
local d_y = (position_2[2] or position_2.y) - (position_1[2] or position_1.y)
return math.atan2(d_y, d_x)
end
return util