Convert bonus, research, sups, and cctv

This commit is contained in:
Cooldude2606
2025-01-26 02:30:52 +00:00
parent 242545b007
commit 81c1e17429
5 changed files with 162 additions and 140 deletions

View File

@@ -1,32 +1,31 @@
---- module surveillance
-- @gui surveillance
local Gui = require("modules.exp_legacy.expcore.gui") --- @dep expcore.gui
local Gui = require("modules/exp_gui")
local Roles = require("modules.exp_legacy.expcore.roles") --- @dep expcore.roles
local Event = require("modules/exp_legacy/utils/event") --- @dep utils.event
local cctv_player =
Gui.element(function(definition, parent, player_list)
local cctv_player = Gui.element("cctv_player")
:draw(function(def, parent, player_list)
return parent.add{
name = definition.name,
name = def.name,
type = "drop-down",
items = player_list,
selected_index = #player_list > 0 and 1,
selected_index = #player_list > 0 and 1 or nil,
}
end)
:style{
horizontally_stretchable = true,
}
:static_name(Gui.unique_static_name)
local cctv_status =
Gui.element{
local cctv_status = Gui.element("cctv_status")
:draw{
type = "drop-down",
items = { { "surveillance.status-enable" }, { "surveillance.status-disable" } },
selected_index = 2,
}:style{
width = 96,
}:on_selection_changed(function(_, element, _)
}:on_selection_state_changed(function(def, event, element)
if element.selected_index == 1 then
element.parent.parent.parent.cctv_display.visible = true
else
@@ -34,59 +33,60 @@ local cctv_status =
end
end)
local cctv_type =
Gui.element{
local cctv_type = Gui.element("cctv_type")
:draw{
type = "drop-down",
name = Gui.unique_static_name,
name = Gui.property_from_name,
items = { { "surveillance.type-player" }, { "surveillance.type-static" }, { "surveillance.type-player-loop" } },
selected_index = 1,
}:style{
width = 96,
}
local cctv_location =
Gui.element{
local cctv_location = Gui.element("cctv_location")
:draw{
type = "button",
name = Gui.unique_static_name,
name = Gui.property_from_name,
caption = { "surveillance.func-set" },
}:style{
width = 48,
}:on_click(function(player, element, _)
}:on_click(function(def, event, element)
local player = Gui.get_player(event)
element.parent.parent.parent.cctv_display.position = player.physical_position
end)
local zoom_in =
Gui.element{
local zoom_in = Gui.element("zoom_in")
:draw{
type = "button",
name = Gui.unique_static_name,
name = Gui.property_from_name,
caption = "+",
}:style{
width = 32,
}:on_click(function(_, element, _)
}:on_click(function(def, event, element)
local display = element.parent.parent.parent.cctv_display
if display.zoom < 2.0 then
display.zoom = display.zoom + 0.05
end
end)
local zoom_out =
Gui.element{
local zoom_out = Gui.element("zoom_out")
:draw{
type = "button",
name = Gui.unique_static_name,
name = Gui.property_from_name,
caption = "-",
}:style{
width = 32,
}:on_click(function(_, element, _)
}:on_click(function(def, event, element)
local display = element.parent.parent.parent.cctv_display
if display.zoom > 0.2 then
display.zoom = display.zoom - 0.05
end
end)
local camera_set =
Gui.element(function(_, parent, name, player_list)
local camera_set = Gui.element("camera_set")
:draw(function(_, parent, name, player_list)
local camera_set = parent.add{ type = "flow", direction = "vertical", name = name }
local buttons = Gui.scroll_table(camera_set, 480, 6, "buttons")
local buttons = Gui.elements.scroll_table(camera_set, 480, 6, "buttons")
cctv_player(buttons, player_list)
cctv_status(buttons)
@@ -109,9 +109,9 @@ local camera_set =
return camera_set
end)
local cctv_container =
Gui.element(function(definition, parent)
local container = Gui.container(parent, definition.name, 480)
local cctv_container = Gui.element("cctv_container")
:draw(function(def, parent)
local container = Gui.elements.container(parent, 480)
local scroll = container.add{ name = "scroll", type = "scroll-pane", direction = "vertical" }
scroll.style.maximal_height = 704
local player_list = {}
@@ -125,12 +125,18 @@ local cctv_container =
return container.parent
end)
:static_name(Gui.unique_static_name)
:add_to_left_flow()
Gui.left_toolbar_button("entity/radar", { "surveillance.main-tooltip" }, cctv_container, function(player)
return Roles.player_allowed(player, "gui/surveillance")
end)
--- Add the element to the left flow with a toolbar button
Gui.add_left_element(cctv_container, false)
Gui.create_toolbar_button{
name = "cctv_toggle",
left_element = cctv_container,
sprite = "entity/radar",
tooltip = { "surveillance.main-tooltip" },
visible = function(player, element)
return Roles.player_allowed(player, "gui/surveillance")
end
}
local function gui_update()
local player_list = {}
@@ -140,9 +146,9 @@ local function gui_update()
end
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, cctv_container)
frame.container.scroll["cctv_st_1"].buttons.table[cctv_player.name].items = player_list
frame.container.scroll["cctv_st_2"].buttons.table[cctv_player.name].items = player_list
local container = Gui.get_left_element(cctv_container, player)
container.frame.scroll["cctv_st_1"].buttons.table[cctv_player.name].items = player_list
container.frame.scroll["cctv_st_2"].buttons.table[cctv_player.name].items = player_list
end
end
@@ -151,18 +157,18 @@ Event.add(defines.events.on_player_left_game, gui_update)
Event.add(defines.events.on_tick, function(_)
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, cctv_container)
local container = Gui.get_left_element(cctv_container, player)
for i = 1, 2 do
local scroll_table_name = "cctv_st_" .. i
local current_camera_set = frame.container.scroll[scroll_table_name]
local current_camera_set = container.frame.scroll[scroll_table_name]
local switch_index = current_camera_set.buttons.table[cctv_type.name].selected_index
if (switch_index == 1) or (switch_index == 3) then
local selected_index = current_camera_set.buttons.table[cctv_player.name].selected_index
if selected_index ~= 0 then
selected_index = current_camera_set.buttons.table[cctv_player.name].items[selected_index]
selected_index = current_camera_set.buttons.table[cctv_player.name].items[selected_index] --[[ @as number ]]
current_camera_set["cctv_display"].position = game.players[selected_index].physical_position
current_camera_set["cctv_display"].surface_index = game.players[selected_index].surface_index
else
@@ -176,10 +182,10 @@ end)
Event.on_nth_tick(600, function(_)
for _, player in pairs(game.connected_players) do
local frame = Gui.get_left_element(player, cctv_container)
local container = Gui.get_left_element(cctv_container, player)
for i = 1, 2 do
local current_camera_set = frame.container.scroll["cctv_st_" .. i]
local current_camera_set = container.frame.scroll["cctv_st_" .. i]
if current_camera_set.buttons.table[cctv_type.name].selected_index == 3 then
local item_n = #current_camera_set.buttons.table[cctv_player.name].items