mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-08 00:39:30 +02:00
133 lines
3.8 KiB
Lua
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)
|