Aleksei-bird 46d69f3a45 Исправлен мод heroturrets
Добавлен мод blueprint-sandboxes
Добавляет метку версии в zzzparanoidal (#72)
2024-08-16 10:59:17 +03:00

187 lines
6.2 KiB
Lua

local ToggleGUI = {}
ToggleGUI.name = BPSB.pfx .. "toggle-gui"
ToggleGUI.pfx = ToggleGUI.name .. "-"
ToggleGUI.toggleShortcut = ToggleGUI.pfx .. "sb-toggle-shortcut"
ToggleGUI.selectedSandboxDropdown = ToggleGUI.pfx .. "selected-sandbox-dropdown"
ToggleGUI.resetButton = ToggleGUI.pfx .. "reset-button"
ToggleGUI.daytimeSlider = ToggleGUI.pfx .. "daytime-slider"
function ToggleGUI.Init(player)
if player.gui.left[ToggleGUI.name] then
return
end
local frame = player.gui.left.add {
type = "frame",
name = ToggleGUI.name,
caption = { "gui." .. ToggleGUI.name },
visible = false,
}
local innerFrame = frame.add {
type = "frame",
name = "innerFrame",
direction = "vertical",
style = "inside_shallow_frame_with_padding",
}
local topLineFlow = innerFrame.add {
type = "flow",
name = "topLineFlow",
direction = "horizontal",
style = BPSB.pfx .. "centered-horizontal-flow",
}
topLineFlow.add {
type = "sprite-button",
name = ToggleGUI.resetButton,
tooltip = { "gui-description." .. ToggleGUI.resetButton },
style = "tool_button",
sprite = "utility/reset_white",
}
topLineFlow.add {
type = "drop-down",
name = ToggleGUI.selectedSandboxDropdown,
tooltip = { "gui-description." .. ToggleGUI.selectedSandboxDropdown },
items = Sandbox.choices,
selected_index = global.players[player.index].selectedSandbox,
}.style.horizontally_stretchable = true
local daylightFlow = innerFrame.add {
type = "flow",
name = "daylightFlow",
direction = "horizontal",
style = BPSB.pfx .. "centered-horizontal-flow",
}
daylightFlow.add {
type = "sprite",
tooltip = { "gui-description." .. ToggleGUI.daytimeSlider },
sprite = "utility/select_icon_white",
resize_to_sprite = false,
style = BPSB.pfx .. "sprite-like-tool-button",
}
daylightFlow.add {
type = "slider",
name = ToggleGUI.daytimeSlider,
value = 0.0,
minimum_value = 0.5,
maximum_value = 0.975,
value_step = 0.025,
style = "notched_slider",
}.style.horizontally_stretchable = true
ToggleGUI.Update(player)
end
function ToggleGUI.Destroy(player)
if not player.gui.left[ToggleGUI.name] then
return
end
player.gui.left[ToggleGUI.name].destroy()
end
function ToggleGUI.FindDescendantByName(instance, name)
for _, child in pairs(instance.children) do
if child.name == name then
return child
end
local found = ToggleGUI.FindDescendantByName(child, name)
if found then return found end
end
end
function ToggleGUI.FindByName(player, name)
return ToggleGUI.FindDescendantByName(player.gui.left[ToggleGUI.name], name)
end
function ToggleGUI.Update(player)
if not player.gui.left[ToggleGUI.name] then
return
end
ToggleGUI.FindByName(player, ToggleGUI.selectedSandboxDropdown).selected_index = global.players[player.index].selectedSandbox
if Sandbox.IsPlayerInsideSandbox(player) then
local playerData = global.players[player.index]
player.set_shortcut_toggled(ToggleGUI.toggleShortcut, true)
player.gui.left[ToggleGUI.name].visible = true
local resetButton = ToggleGUI.FindByName(player, ToggleGUI.resetButton)
if game.is_multiplayer
and not player.admin
and playerData.selectedSandbox ~= Sandbox.player
and settings.global[Settings.onlyAdminsForceReset].value
then
resetButton.enabled = false
resetButton.tooltip = { "gui-description." .. ToggleGUI.resetButton .. "-only-admins" }
else
resetButton.enabled = true
resetButton.tooltip = { "gui-description." .. ToggleGUI.resetButton }
end
ToggleGUI.FindByName(player, ToggleGUI.daytimeSlider).slider_value = player.surface.daytime
else
player.set_shortcut_toggled(ToggleGUI.toggleShortcut, false)
player.gui.left[ToggleGUI.name].visible = false
ToggleGUI.FindByName(player, ToggleGUI.resetButton).enabled = false
end
end
function ToggleGUI.OnGuiValueChanged(event)
local player = game.players[event.player_index]
if event.element.name == ToggleGUI.daytimeSlider then
local daytime = event.element.slider_value
return Lab.SetDayTime(player, player.surface, daytime)
or SpaceExploration.SetDayTime(player, player.surface, daytime)
end
end
function ToggleGUI.OnGuiDropdown(event)
local player = game.players[event.player_index]
if event.element.name == ToggleGUI.selectedSandboxDropdown then
local choice = event.element.selected_index
if Sandbox.IsEnabled(choice) then
global.players[player.index].selectedSandbox = event.element.selected_index
Sandbox.Toggle(event.player_index)
else
player.print("That Sandbox is not possible.")
event.element.selected_index = global.players[player.index].selectedSandbox
ToggleGUI.Update(player)
end
end
end
function ToggleGUI.OnGuiClick(event)
local player = game.players[event.player_index]
if event.element.name == ToggleGUI.toggleShortcut then
Sandbox.Toggle(event.player_index)
elseif event.element.name == ToggleGUI.resetButton then
if event.shift then
return Lab.ResetEquipmentBlueprint(player.surface)
or SpaceExploration.ResetEquipmentBlueprint(player.surface)
else
local blueprintString = Inventory.GetCursorBlueprintString(player)
if blueprintString then
return Lab.SetEquipmentBlueprint(player.surface, blueprintString)
or SpaceExploration.SetEquipmentBlueprint(player.surface, blueprintString)
else
return Lab.Reset(player)
or SpaceExploration.Reset(player)
end
end
end
end
function ToggleGUI.OnToggleShortcut(event)
if (event.input_name or event.prototype_name) == ToggleGUI.toggleShortcut then
Sandbox.Toggle(event.player_index)
end
end
return ToggleGUI