1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/modules/fjei/main.lua
2021-03-24 20:14:55 +01:00

133 lines
3.8 KiB
Lua

--luacheck: ignore
--[[
FJEI - "Factorio Just enough items"
A comfy recipe browser - MewMew
]]
local Gui = require 'modules.fjei.gui'
local Functions = require 'modules.fjei.functions'
local recipe_window_position = 'center'
local function on_player_joined_game(event)
local player = game.players[event.player_index]
if not global.fjei then
Public.build_tables()
end
if not global.fjei.player_data[player.index] then
global.fjei.player_data[player.index] = {}
end
Gui.draw_top_toggle_button(player)
Gui.refresh_main_window(player)
end
local function on_player_left_game(event)
local player = game.players[event.player_index]
global.fjei.player_data[player.index].history = nil
global.fjei.player_data[player.index].filtered_list = nil
global.fjei.player_data[player.index] = nil
end
local function on_research_finished(event)
if not Functions.add_research_to_whitelist(event.research.force, event.research.effects) then
return
end
local player_data = global.fjei.player_data
for _, player in pairs(event.research.force.connected_players) do
player_data[player.index].filtered_list = nil
Gui.refresh_main_window(player)
end
end
local sprite_parent_whitelist = {
['fjei_main_window_item_list_table'] = true,
['fjei_main_window_history_table'] = true,
['fjei_recipe_window'] = true,
['fjei_recipe_window_select_table'] = true
}
local function on_gui_click(event)
local element = event.element
if not element then
return
end
if not element.valid then
return
end
local player = game.players[event.player_index]
if Gui.gui_click_actions(element, player, event.button) then
return
end
if element.type ~= 'sprite' and element.type ~= 'choose-elem-button' then
return
end
local parent = element.parent
for _ = 1, 4, 1 do
if not parent then
return
end
if not parent.name then
return
end
if sprite_parent_whitelist[parent.name] then
Gui.open_recipe(element, player, event.button)
return
end
parent = parent.parent
end
end
local function on_gui_text_changed(event)
local element = event.element
if not element then
return
end
if not element.valid then
return
end
if element.name ~= 'fjei_main_window_search_textfield' then
return
end
local player = game.players[event.player_index]
if element.text == '' then
global.fjei.player_data[player.index].active_filter = false
else
global.fjei.player_data[player.index].active_filter = element.text
end
Functions.set_filtered_list(player)
Gui.refresh_main_window(player)
end
local function on_configuration_changed()
Functions.build_tables()
for _, player in pairs(game.players) do
if player.gui.left['fjei_main_window'] then
player.gui.left['fjei_main_window'].destroy()
end
if player.gui[recipe_window_position]['fjei_recipe_window'] then
player.gui[recipe_window_position]['fjei_recipe_window'].destroy()
end
end
end
local function on_init()
Functions.build_tables()
end
local function on_load()
for _, player in pairs(game.players) do
Gui.draw_top_toggle_button(player)
end
end
local event = require 'utils.event'
event.add(defines.events.on_player_joined_game, on_player_joined_game)
event.add(defines.events.on_player_left_game, on_player_left_game)
event.add(defines.events.on_research_finished, on_research_finished)
event.add(defines.events.on_gui_click, on_gui_click)
event.add(defines.events.on_gui_text_changed, on_gui_text_changed)
script.on_configuration_changed(on_configuration_changed)
event.on_init(on_init)
event.on_init(on_load)