mirror of
https://github.com/ComfyFactory/ComfyFactorio.git
synced 2025-01-10 00:43:27 +02:00
104 lines
2.4 KiB
Lua
104 lines
2.4 KiB
Lua
|
local Global = require "utils.global"
|
||
|
|
||
|
local this = {
|
||
|
-- map player <> force
|
||
|
initialForce = {}
|
||
|
}
|
||
|
|
||
|
Global.register(this, function (t) this = t end)
|
||
|
|
||
|
local function is_spying(player)
|
||
|
return this.initialForce[player.index] ~= nil
|
||
|
end
|
||
|
|
||
|
local function switch_force(player, force)
|
||
|
this.initialForce[player.index] = player.force
|
||
|
player.force = force
|
||
|
end
|
||
|
|
||
|
local function spy_production(player, force)
|
||
|
if is_spying(player) then
|
||
|
return
|
||
|
end
|
||
|
switch_force(player, force)
|
||
|
player.opened = defines.gui_type.production
|
||
|
end
|
||
|
|
||
|
local function spy_tech_tree(player, force)
|
||
|
if is_spying(player) then
|
||
|
return
|
||
|
end
|
||
|
switch_force(player, force)
|
||
|
player.open_technology_gui()
|
||
|
end
|
||
|
|
||
|
local function restore_force(player)
|
||
|
if not is_spying(player) then
|
||
|
return
|
||
|
end
|
||
|
player.force = this.initialForce[player.index]
|
||
|
this.initialForce[player.index] = nil
|
||
|
end
|
||
|
|
||
|
-- When a player clicks on a spying prod LuaGuiElement
|
||
|
local function spy_prod_handler(event)
|
||
|
if not event.element.valid then
|
||
|
return
|
||
|
end
|
||
|
local elementToForce = {
|
||
|
["spy-north-prod"] = "north",
|
||
|
["spy-south-prod"] = "south"
|
||
|
}
|
||
|
local force = elementToForce[event.element.name]
|
||
|
if force then
|
||
|
local player = game.players[event.player_index]
|
||
|
spy_production(player, force)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- When a player clicks on a spying tech LuaGuiElement
|
||
|
local function spy_tech_handler(event)
|
||
|
if not event.element.valid then
|
||
|
return
|
||
|
end
|
||
|
local elementToForce = {
|
||
|
["spy-north-tech"] = "north",
|
||
|
["spy-south-tech"] = "south"
|
||
|
}
|
||
|
local force = elementToForce[event.element.name]
|
||
|
if force then
|
||
|
local player = game.players[event.player_index]
|
||
|
spy_tech_tree(player, force)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- When a player closes the prod view while spying
|
||
|
local function close_prod_handler(event)
|
||
|
if event.gui_type ~= defines.gui_type.production then
|
||
|
return
|
||
|
end
|
||
|
local player = game.players[event.player_index]
|
||
|
-- If the player was spying
|
||
|
if is_spying(player) then
|
||
|
restore_force(player)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- When a player closes the tech view while spying
|
||
|
local function close_tech_handler(event)
|
||
|
if event.gui_type ~= defines.gui_type.research then
|
||
|
return
|
||
|
end
|
||
|
local player = game.players[event.player_index]
|
||
|
-- If the player was spying
|
||
|
if is_spying(player) then
|
||
|
restore_force(player)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local Event = require 'utils.event'
|
||
|
Event.add(defines.events.on_gui_click, spy_prod_handler)
|
||
|
Event.add(defines.events.on_gui_click, spy_tech_handler)
|
||
|
Event.add(defines.events.on_gui_closed, close_prod_handler)
|
||
|
Event.add(defines.events.on_gui_closed, close_tech_handler)
|