1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-02-03 13:12:11 +02:00

module to quick select a tag icon

This commit is contained in:
MewMew 2020-09-14 09:27:07 +02:00
parent 3bac26ed87
commit 9c9bff153b

98
modules/simple_tags.lua Normal file
View File

@ -0,0 +1,98 @@
--Adds a small gui to quick select an icon tag for your character - mewmew
local Event = require 'utils.event'
local icons = {
{"img=item/stone-furnace", "item/stone-furnace", "Smeltery"},
{"img=item/big-electric-pole", "item/big-electric-pole", "Power"},
{"img=item/assembling-machine-1", "item/assembling-machine-1", "Production"},
{"img=item/chemical-science-pack", "item/chemical-science-pack", "Science"},
{"img=item/locomotive", "item/locomotive", "Trainman"},
{"img=fluid/crude-oil", "fluid/crude-oil", "Oil processing"},
{"img=item/submachine-gun", "item/submachine-gun", "Trooper"},
{"img=item/stone-wall", "item/stone-wall", "Fortifications"},
{"img=item/repair-pack", "item/repair-pack", "Support"},
}
local checks = {
"minimal_width", "left_margin", "right_margin"
}
local function get_x_offset(player)
local x = 0
for _, element in pairs(player.gui.top.children) do
if element.name == "simple_tag" then break end
local style = element.style
for _, v in pairs(checks) do
if style[v] then
x = x + style[v]
end
end
end
return x
end
local function draw_top_gui(player)
if player.gui.top.simple_tag then return end
local button = player.gui.top.add({type = "sprite-button", name = "simple_tag", caption = "Tag"})
button.style.font = "heading-2"
button.style.font_color = {212, 212, 212}
button.style.minimal_height = 38
button.style.minimal_width = 38
button.style.padding = -2
end
local function draw_screen_gui(player)
local frame = player.gui.screen.simple_tag_frame
if player.gui.screen.simple_tag_frame then
frame.destroy()
return
end
local frame = player.gui.screen.add({
type = "frame",
name = "simple_tag_frame",
caption = "Pick your duty:",
})
frame.location = {x = get_x_offset(player), y = 39}
frame.style.padding = -1
for _, v in pairs(icons) do
local button = frame.add({type = "sprite-button", name = v[1], sprite = v[2], tooltip = v[3]})
button.style.minimal_height = 38
button.style.minimal_width = 38
button.style.padding = -1
end
end
local function on_player_joined_game(event)
local player = game.players[event.player_index]
draw_top_gui(player)
end
local function on_gui_click(event)
local element = event.element
if not element then return end
if not element.valid then return end
local name = element.name
if name == "simple_tag" then
local player = game.players[event.player_index]
draw_screen_gui(player)
return
end
local parent = element.parent
if not parent then return end
if not parent.valid then return end
if not parent.name then return end
if parent.name ~= "simple_tag_frame" then return end
local player = game.players[event.player_index]
local selected_tag = "[" .. element.name .. "]"
if player.tag == selected_tag then selected_tag = "" end
player.tag = selected_tag
parent.destroy()
end
Event.add(defines.events.on_gui_click, on_gui_click)
Event.add(defines.events.on_player_joined_game, on_player_joined_game)