Aleksei-bird 7c9c708c92 Первый фикс
Пачки некоторых позиций увеличены
2024-03-01 20:54:33 +03:00

208 lines
13 KiB
Lua

---@diagnostic disable
-- This file contains functionality to rig the interface for various setups
-- that make for good screenshots. It provides a remote interface that its
-- companion scenario calls to actually take the screenshots.
-- This code is terrible and uses some functions completely inappropriately,
-- but it needs to do that to manipulate the interface because GUI events
-- can't be raised manually anymore.
local mod_gui = require("mod-gui")
local handler_requires = {"ui.base.compact_dialog", "ui.base.modal_dialog", "ui.main.title_bar",
"ui.dialogs.picker_dialog", "ui.dialogs.porter_dialog"}
local handlers = {} -- Need to require these here since it can't be done inside an event
for _, path in pairs(handler_requires) do handlers[path] = require(path) end
local function return_dimensions(scene, frame)
local dimensions = {actual_size=frame.actual_size, location=frame.location}
-- We do this on teardown so the frame has time to adjust all its sizes
remote.call("screenshotter_output", "return_dimensions", scene, dimensions)
end
local function open_modal(player, dialog, modal_data)
main_dialog.toggle(player)
util.globals.main_elements(player).main_frame.location = player.display_resolution -- hack city
util.raise.open_dialog(player, {dialog=dialog, modal_data=modal_data, skip_dimmer=true})
end
local function modal_teardown(player, scene)
return_dimensions(scene, util.globals.modal_elements(player).modal_frame)
util.raise.close_dialog(player, "cancel")
end
local function get_handler(path, index, event, name)
local gui_handlers = handlers[path][index].gui[event]
for _, handler_table in pairs(gui_handlers) do
if handler_table.name == name then return handler_table.handler end
end
end
local function set_machine_default(player, proto_name, category_name)
local proto = prototyper.util.find_prototype("machines", proto_name, category_name)
prototyper.defaults.set(player, "machines", proto.id, proto.category_id)
end
local actions = {
player_setup = function(player)
local player_table = util.globals.player_table(player)
-- Mod settings
settings.get_player_settings(player)["fp_display_gui_button"] = {value = false}
settings.get_player_settings(player)["fp_products_per_row"] = {value = 5}
settings.get_player_settings(player)["fp_subfactory_list_rows"] = {value = 18}
-- Preferences
player_table.preferences.recipe_filters = {disabled = true, hidden = false}
player_table.preferences.ignore_barreling_recipes = true
player_table.preferences.ignore_recycling_recipes = true
player_table.preferences.done_column = true
player_table.preferences.mb_defaults = { -- naughty use of the prototyper function
machine = prototyper.util.find_prototype("modules", "productivity-module-3", "productivity"),
machine_secondary = nil,
beacon = prototyper.util.find_prototype("modules", "speed-module-3", "speed"),
beacon_count = 8
}
prototyper.defaults.set(player, "belts", PROTOTYPE_MAPS.belts["fast-transport-belt"].id)
set_machine_default(player, "electric-mining-drill", "basic-solid")
set_machine_default(player, "steel-furnace", "smelting")
set_machine_default(player, "assembling-machine-2", "crafting")
set_machine_default(player, "assembling-machine-3", "advanced-crafting")
set_machine_default(player, "assembling-machine-2", "crafting-with-fluid")
-- Subfactories
local export_string = "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"
util.porter.add_by_string(player, export_string)
local trash = Factory.get_by_gui_position(player_table.factory, "Subfactory", 5)
Factory.remove(player_table.factory, trash)
Factory.add(player_table.archive, trash)
local hotness = Factory.get_by_gui_position(player_table.factory, "Subfactory", 3)
util.context.set_subfactory(player, hotness)
solver.update(player, hotness)
util.raise.refresh(player, "all", nil)
-- Research
player.force.technologies["oil-processing"].researched=true
player.force.technologies["coal-liquefaction"].researched=true
-- Player inventory
player.insert{name="assembling-machine-3", count=9}
player.insert{name="assembling-machine-2", count=1}
player.insert{name="electric-mining-drill", count=29}
player.insert{name="speed-module-3", count=14}
player.insert{name="speed-module-2", count=1}
player.insert{name="chemical-plant", count=6}
end,
setup_01_main_interface = function(player)
local translation_progress = mod_gui.get_frame_flow(player)["flib_translation_progress"]
if translation_progress then translation_progress.visible = false end
main_dialog.toggle(player)
end,
teardown_01_main_interface = function(player)
local main_frame = util.globals.main_elements(player).main_frame
return_dimensions("01_main_interface", main_frame)
end,
setup_02_compact_interface = function(player)
util.globals.main_elements(player).main_frame.location = player.display_resolution -- hack city
view_state.select(player, 2)
local toggle_handler = get_handler("ui.main.title_bar", 1, "on_gui_click", "switch_to_compact_view")
toggle_handler(player, nil, nil)
end,
teardown_02_compact_interface = function(player)
local compact_frame = util.globals.ui_state(player).compact_elements.compact_frame
return_dimensions("02_compact_interface", compact_frame)
local toggle_handler = get_handler("ui.base.compact_dialog", 2, "on_gui_click", "switch_to_main_view")
toggle_handler(player, nil, nil)
end,
setup_03_item_picker = function(player)
local modal_data = {item_id=nil, item_category="product"}
open_modal(player, "picker", modal_data)
local modal_elements = util.globals.modal_elements(player)
modal_elements.search_textfield.text = "f"
local search_handler = get_handler("ui.base.modal_dialog", 1, "on_gui_text_changed", "modal_searchfield")
search_handler(player, nil, {text="f"})
local group_handler = get_handler("ui.dialogs.picker_dialog", 1, "on_gui_click", "select_picker_item_group")
group_handler(player, {group_id=3}, nil)
modal_elements.item_choice_button.sprite = "item/raw-fish"
modal_elements.belt_amount_textfield.text = "0.5"
modal_elements.belt_choice_button.elem_value = "fast-transport-belt"
local belt_handler = get_handler("ui.dialogs.picker_dialog", 1, "on_gui_elem_changed", "picker_choose_belt")
belt_handler(player, nil, {element=modal_elements.belt_choice_button, elem_value="fast-transport-belt"})
modal_elements.search_textfield.focus()
end,
teardown_03_item_picker = (function(player) modal_teardown(player, "03_item_picker") end),
setup_04_recipe_picker = function(player)
local product_proto = prototyper.util.find_prototype("items", "petroleum-gas", "fluid")
---@cast product_proto -nil
open_modal(player, "recipe", {category_id=product_proto.category_id,
product_id=product_proto.id, production_type="produce"})
end,
teardown_04_recipe_picker = (function(player) modal_teardown(player, "04_recipe_picker") end),
setup_05_machine = function(player)
local floor = util.globals.context(player).floor
local line = Collection.get_by_gui_position(floor.Line, 2) ---@cast line -nil
local modal_data = {floor_id=floor.id, line_id=line.id, recipe_name=line.recipe.proto.localised_name}
open_modal(player, "machine", modal_data)
end,
teardown_05_machine = (function(player) modal_teardown(player, "05_machine") end),
setup_06_import = function(player)
open_modal(player, "import", nil)
local export_string = "eNrtWt+P4jYQ/lfcPG+2hG2ra6Q+tJUqVepJp+Ohqu5Q5DiT3Wn9I7UdVIT43ztOzIK4RRDKHnBF4gHb4/HM941n7CSLRJmqmIF1aHSSJ9l9dv/tKLlL4J/GWF/QqAOf5Iuk5A5WAt+TQC2xpPboPqNfaHPhjZ03kmsNdq1qeZe4tuxHEVySf1gkmqug6wOqxx/Qg/oatQPrwU7Ze2O8I3UeFTjBJcl9N7pLtPFhbkIj76ypWtHZZMo/QZB4vqBV+kYhJHdB8lfSS9Kr5s9GShoOXpKsN01RS2Ns0PIbatinrZPZpU3CDGSSZ+vxXzrdy3XHZAXBnHqfAZgokOT1/P/i75rwpneKFKZOIGgBacPFX1P2B/AnNum7vtqNS8reUaAx03rmaCKwqIWtFX/UKfvx7xYtMM5qdE/MG1a2KCs2abCieLO90O8oZZhX8lLOmQaomDI0C2mccVrAKNJrUPsdbFBE03RvQmf0dId/pMChaiTWCFWSe9sCuThvwpSAS4CQK9PSUnn2hvy10HlQFaveRVJBTeRURTmnSbF7a1ZJYVVEk2ouHcQQiMT1y66oWnm0nJ4ypgiTrVgKWWCAuAWBTSf0X7AV3MNjiMI8EZbXHvVjsH2toojo9z2bMf++NyAwQpIzWKmsTLC9g5UUgRWgPX+krmxE0CsunqJz23aTWlClJBPSKJU+DDG6NrRWIVGhf16f8nMroYg5um+5Q4Nzhn6e9nP2W7I5aTNMv1kj9rZT9VIgxZFdoRS9EM8aQTV+XjgZakE+2l5hQt5u5Jq3EfJlCHwuQh371Oc4ssfJuimi4IaHb46E2TWUSg7Gt5PeXHZ8cmDHA4H9KUIRMvjBu9NylNe4FcevvxVfqLOD+Btt8Tc+dGMMIjCUvdR5vM6MeqMxYgNhfYsirVurecfDjcxrJfOFin3j86g6PL7COryOmelRF7XxJxe1QcHHqxmnQ3aVCrSiRX87aN8O2reD9tkP2n2BN5pK/Fk2Zv//VuFPU+GFaQjKVPDyc5f2a+Hx9Bs/O/nGz7ZiJXuVWHEeQKaNJNf2+hyeMJ+zFg+9hmwa/CXvd+cJ0bS0B1yzbxxe6pMS1Rji0aYdmftQKbkjCJ2RWJ2fSYU6pO/KopQDDb+Ue9kL2fvusCP4+Ngj+OlPig9HXwUHPT4gQU8cltzurdNPoND57r3dWQ4XnQGCd/VN+0HmXkaueXgVCvtNaJBwsUaAcyG/7gFnS/pMhAYrbPfOsnvRPdDiy7yLP1xOIrjku/j4mu/i08/+UYR7/ixhyr7sT0Kmy38BcOORig=="
local modal_elements = util.globals.modal_elements(player)
modal_elements.import_textfield.text = export_string
local textfield_handler = get_handler("ui.dialogs.porter_dialog", 1, "on_gui_text_changed", "import_string")
textfield_handler(player, nil, {element=modal_elements.import_textfield, text=export_string})
local import_handler = get_handler("ui.dialogs.porter_dialog", 1, "on_gui_click", "import_subfactories")
import_handler(player, nil, nil)
modal_elements.subfactory_checkboxes["tmp_1"].state = false
modal_elements.subfactory_checkboxes["tmp_3"].state = false
modal_elements.master_checkbox.state = false
end,
teardown_06_import = (function(player) modal_teardown(player, "06_import") end),
setup_07_utility = function(player)
open_modal(player, "utility", nil)
end,
teardown_07_utility = (function(player) modal_teardown(player, "07_utility") end),
setup_08_preferences = function(player)
open_modal(player, "preferences", nil)
end,
teardown_08_preferences = (function(player) modal_teardown(player, "08_preferences") end)
}
local function initial_setup()
DEV_ACTIVE = false -- desync city, but it's fiiine. Avoids any accidental artifacts.
return {"09_settings"}
end
local function execute_action(player_index, action_name)
local player = game.get_player(player_index)
actions[action_name](player)
end
remote.add_interface("screenshotter_input", {
initial_setup = initial_setup,
execute_action = execute_action
})