1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2024-12-30 23:17:53 +02:00
ComfyFactorio/maps/chronosphere/config_tab.lua

237 lines
8.9 KiB
Lua

-- config tab for chronotrain--
local Chrono_table = require 'maps.chronosphere.table'
local Chrono = require 'maps.chronosphere.chrono'
local Token = require 'utils.token'
local Tabs = require 'comfy_panel.main'
local module_name = 'ChronoTrain'
local functions = {
['comfy_panel_offline_accidents'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
objective.config.offline_loot = true
else
objective.config.offline_loot = false
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_danger_events'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
objective.config.jumpfailure = true
else
objective.config.jumpfailure = false
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_lock_difficulties'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
objective.config.lock_difficulties = true
Chrono.set_difficulty_settings()
for _, player in pairs(game.connected_players) do
if player.gui.screen['difficulty_poll'] then
player.gui.screen['difficulty_poll'].destroy()
end
end
else
objective.config.lock_difficulties = false
Chrono.set_difficulty_settings()
for _, player in pairs(game.connected_players) do
if player.gui.screen['difficulty_poll'] then
player.gui.screen['difficulty_poll'].destroy()
end
end
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_lock_hard_difficulties'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
objective.config.lock_hard_difficulties = true
Chrono.set_difficulty_settings()
for _, player in pairs(game.connected_players) do
if player.gui.screen['difficulty_poll'] then
player.gui.screen['difficulty_poll'].destroy()
end
end
else
objective.config.lock_hard_difficulties = false
Chrono.set_difficulty_settings()
for _, player in pairs(game.connected_players) do
if player.gui.screen['difficulty_poll'] then
player.gui.screen['difficulty_poll'].destroy()
end
end
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_overstay_penalty'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
objective.config.overstay_penalty = true
else
objective.config.overstay_penalty = false
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_game_lost'] = function(event)
local objective = Chrono_table.get_table()
if game.players[event.player_index].admin then
local frame = event.element.parent.parent
if event.element.switch_state == 'left' then
if not objective.game_lost then
game.auto_save('chronotrain_before_manual_reset' .. math.random(1, 1000))
end
frame['comfy_panel_game_lost_confirm_table'].visible = true
else
frame['comfy_panel_game_lost_confirm_table'].visible = false
end
else
game.players[event.player_index].print('You are not an admin!')
end
end,
['comfy_panel_game_lost_confirm'] = function(event)
if game.players[event.player_index].admin then
if event.element.switch_state == 'left' then
Chrono.objective_died()
end
else
game.players[event.player_index].print('You are not an admin!')
end
end
}
local function add_switch(element, switch_state, name, description_main, description)
local t = element.add({type = 'table', column_count = 5, name = name .. '_table'})
local label
label = t.add({type = 'label', caption = 'ON'})
label.style.padding = 0
label.style.left_padding = 10
label.style.font_color = {0.77, 0.77, 0.77}
local switch = t.add({type = 'switch', name = name})
switch.switch_state = switch_state
switch.style.padding = 0
switch.style.margin = 0
label = t.add({type = 'label', caption = 'OFF'})
label.style.padding = 0
label.style.font_color = {0.70, 0.70, 0.70}
label = t.add({type = 'label', caption = description_main})
label.style.padding = 2
label.style.left_padding = 10
label.style.minimal_width = 130
label.style.font = 'heading-2'
label.style.font_color = {0.88, 0.88, 0.99}
label = t.add({type = 'label', caption = description})
label.style.padding = 2
label.style.left_padding = 10
label.style.single_line = false
label.style.font = 'heading-3'
label.style.font_color = {0.85, 0.85, 0.85}
end
local function build_config_gui(data)
local frame = data.frame
local objective = Chrono_table.get_table()
local switch_state
frame.clear()
local line_elements = {}
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.config.offline_loot then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_offline_accidents', {'chronosphere.config_tab_offline'}, {'chronosphere.config_tab_offline_text'})
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.config.jumpfailure then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_danger_events', {'chronosphere.config_tab_dangers'}, {'chronosphere.config_tab_dangers_text'})
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.config.lock_difficulties then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_lock_difficulties', {'chronosphere.config_tab_difficulties_easy'}, {'chronosphere.config_tab_difficulties_easy_text'})
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.config.lock_hard_difficulties then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_lock_hard_difficulties', {'chronosphere.config_tab_difficulties_hard'}, {'chronosphere.config_tab_difficulties_hard_text'})
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.config.overstay_penalty then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_overstay_penalty', {'chronosphere.config_tab_overstay'}, {'chronosphere.config_tab_overstay_text'})
line_elements[#line_elements + 1] = frame.add({type = 'line'})
switch_state = 'right'
if objective.game_lost then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_game_lost', {'chronosphere.config_tab_reset'}, {'chronosphere.config_tab_reset_text'})
switch_state = 'right'
if objective.game_lost then
switch_state = 'left'
end
add_switch(frame, switch_state, 'comfy_panel_game_lost_confirm', {'chronosphere.config_tab_reset_confirm'}, {'chronosphere.config_tab_reset_confirm_text'})
frame['comfy_panel_game_lost_confirm_table'].visible = false
line_elements[#line_elements + 1] = frame.add({type = 'line'})
end
local build_config_gui_token = Token.register(build_config_gui)
local function on_gui_click(event)
if not event.element then
return
end
if not event.element.valid then
return
end
if functions[event.element.name] then
functions[event.element.name](event)
return
end
end
Tabs.add_tab_to_gui({name = module_name, id = build_config_gui_token, admin = true})
local event = require 'utils.event'
event.add(defines.events.on_gui_click, on_gui_click)