Skip to content

Commit

Permalink
Add toggle/shortcut to pause all cameras.
Browse files Browse the repository at this point in the history
Fixes #38
  • Loading branch information
veger committed Jun 27, 2023
1 parent 252b5c2 commit 24a3c7e
Show file tree
Hide file tree
Showing 10 changed files with 189 additions and 54 deletions.
3 changes: 3 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
---------------------------------------------------------------------------------------------------
Version: 1.5.0

Features:
- Add toggle/shortcut to take a screenshot (on paused active camera)

Changes:
- Use 10 digits for screenshot numbers.
- Use 'transition' when mentioning camera movement (instead of zoom)
Expand Down
8 changes: 7 additions & 1 deletion control.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ local function on_init()
for index, player in pairs(game.players) do
-- initialize player(s) when mod is loaded into existing game
TLBE.Config.reload({ player_index = index })
TLBE.GUI.initialize(player, global.playerSettings[index])

player.print({ "mod-loaded" }, { r = 1, g = 0.5, b = 0 })
player.print({ "mod-loaded2" })
Expand All @@ -29,11 +30,15 @@ local function on_init()
end

-- A player got created (or joined the game)
--- @param event EventData.on_player_created
local function on_player_created(event)
-- Initialize playerSettings
TLBE.Config.reload(event)

game.players[event.player_index].print({ "mod-loaded2" }, { r = 1, g = 0.5, b = 0 })
local player = game.players[event.player_index]
player.print({ "mod-loaded2" }, { r = 1, g = 0.5, b = 0 })

TLBE.GUI.initialize(player, global.playerSettings[event.player_index])
end

local function on_tick()
Expand Down Expand Up @@ -62,6 +67,7 @@ script.on_event(defines.events.on_rocket_launched, TLBE.Main.rocket_launched)

script.on_event("tlbe-main-window-toggle", TLBE.GUI.toggleMainWindow)
script.on_event("tlbe-pause-cameras", TLBE.GUI.togglePauseCameras)
script.on_event("tlbe-take-screenshot", TLBE.GUI.takeScreenshotEvent)
script.on_event(defines.events.on_lua_shortcut, TLBE.GUI.onShortcut)

script.on_event(defines.events.on_tick, on_tick)
Binary file added graphics/take-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions locale/en/locale.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ tracker-wrong-surface=Tracker is disabled because tracker surface differs from c
[controls]
tlbe-main-window-toggle=Open/Close camera settings
tlbe-pause-cameras=Pause/Unpause all TLBE cameras
tlbe-take-screenshot=Take a screenshot

[mod-setting-name]
tlbe-save-folder=Save location
Expand All @@ -78,3 +79,4 @@ tlbe-sequential-names=Use sequential numbering per camera for the screenshot num
[shortcut]
tlbe=Time Lapse Base Edition
tlbe-pause=Pause all TLBE cameras
tlbe-screenshot=Take a screenshot using the selected camera
11 changes: 11 additions & 0 deletions migrations/tlbe.1.4.5.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ if global.playerSettings == nil then
end

local Camera = require("scripts.camera")
local GUI = require("scripts.gui")

-- Convert to new Camera transitionData
for player_index, player in pairs(game.players) do
Expand All @@ -12,6 +13,16 @@ for player_index, player in pairs(game.players) do
goto NextPlayer
end

-- Just make sure it is here
if playerSettings.guiPersist == nil then
playerSettings.guiPersist = {
selectedCamera = 1,
selectedTracker = 1,
selectedCameraTracker = 1
}
end
GUI.updateTakeScreenshotButton(player, playerSettings)

local warned = false
for _, camera in pairs(playerSettings.cameras) do
local activeTracker = camera.lastKnownActiveTracker
Expand Down
52 changes: 48 additions & 4 deletions prototypes/shortcuts.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
-- luacheck: globals data
data:extend(
{
{
Expand All @@ -13,6 +12,12 @@ data:extend(
key_sequence = "CONTROL + SHIFT + P",
consuming = "none"
},
{
type = "custom-input",
name = "tlbe-take-screenshot",
key_sequence = "CONTROL + SHIFT + S",
consuming = "none"
},
{
type = "shortcut",
name = "tlbe-shortcut",
Expand Down Expand Up @@ -61,7 +66,7 @@ data:extend(
localised_name = { "shortcut.tlbe-pause" },
associated_control_input = "tlbe-pause-cameras",
icon = {
-- tlbe-logo
-- tlbe-pause-camera
filename = "__TLBE__/graphics/pause-camera.png",
priority = "extra-high-no-scale",
width = 64,
Expand All @@ -71,7 +76,7 @@ data:extend(
flags = { "icon" }
},
small_icon = {
-- tlbe-logo
-- tlbe-pause-camera
filename = "__TLBE__/graphics/pause-camera.png",
priority = "extra-high-no-scale",
width = 64,
Expand All @@ -81,7 +86,7 @@ data:extend(
flags = { "icon" }
},
disabled_small_icon = {
-- tlbe-logo-white
-- tlbe-pause-camera-white
filename = "__TLBE__/graphics/pause-camera.png",
priority = "extra-high-no-scale",
width = 64,
Expand All @@ -90,6 +95,45 @@ data:extend(
scale = 1,
flags = { "icon" }
}
},
{
type = "shortcut",
name = "tlbe-screenshot-shortcut",
toggleable = false,
order = "a[mod]-tlbe",
action = "lua",
localised_name = { "shortcut.tlbe-screenshot" },
associated_control_input = "tlbe-take-screenshot",
icon = {
-- tlbe-take-screenshot
filename = "__TLBE__/graphics/take-screenshot.png",
priority = "extra-high-no-scale",
width = 64,
height = 64,
position = { 0, 0 },
scale = 1,
flags = { "icon" }
},
small_icon = {
-- tlbe-take-screenshot
filename = "__TLBE__/graphics/take-screenshot.png",
priority = "extra-high-no-scale",
width = 64,
height = 64,
position = { 0, 0 },
scale = 1,
flags = { "icon" }
},
disabled_small_icon = {
-- tlbe-take-screenshot-white
filename = "__TLBE__/graphics/take-screenshot.png",
priority = "extra-high-no-scale",
width = 64,
height = 50,
position = { 65, 0 },
scale = 1,
flags = { "icon" }
}
}
}
)
12 changes: 11 additions & 1 deletion prototypes/sprites.lua
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
-- luacheck: globals data
data:extend(
{
{
Expand Down Expand Up @@ -34,6 +33,17 @@ data:extend(
scale = 0.5,
flags = { "gui-icon" }
},
{
type = "sprite",
name = "tlbe-take-screenshot",
filename = "__TLBE__/graphics/take-screenshot.png",
priority = "extra-high-no-scale",
width = 64,
height = 64,
position = { 0, 0 },
scale = 0.5,
flags = { "gui-icon" }
},
{
type = "sprite",
name = "play-white",
Expand Down
14 changes: 13 additions & 1 deletion scripts/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ local Tracker = require("scripts.tracker")
--- @field saveFolder string
--- @field sequentialNames boolean
--- @field noticeMaxZoom boolean When true the warning about the max zoom is already raised
--- @field guiPersist persistedGUISettings

--- @class persistedGUISettings
--- @field selectedCamera integer Selected camera
--- @field selectedTracker integer Selected tracker
--- @field selectedCameraTracker integer Selected tracker of the selected camera

--- (re)loads the mod settings and initializes player settings if needed
function Config.reload(event)
Expand Down Expand Up @@ -49,7 +55,13 @@ function Config.newPlayerSettings(player)
return {
-- Setup a default camera and attach trackers to it
cameras = { camera },
trackers = trackers
trackers = trackers,
guiPersist = {
selectedCamera = 1,
selectedTracker = 1,
selectedCameraTracker = 1
}

}
end

Expand Down
66 changes: 51 additions & 15 deletions scripts/gui.lua
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ local function findActiveTracker(trackers, surfaceName)
end
end

-- Initialize the GUI for a new player
---@param player LuaPlayer
---@param playerSettings playerSettings
function GUI.initialize(player, playerSettings)
GUI.updateTakeScreenshotButton(player, playerSettings)
end

function GUI.tick()
if game.tick % ticks_per_half_second ~= 0 then
return
Expand Down Expand Up @@ -101,9 +108,10 @@ function GUI.onClick(event)
selectedCamera.enabled = not selectedCamera.enabled

GUI.updateCameraActions(playerSettings.gui, playerSettings.guiPersist, playerSettings.cameras)
GUI.updateTakeScreenshotButton(player, playerSettings)
elseif event.element.name == "tlbe_camera_add" then
table.insert(playerSettings.cameras, Camera.newCamera(player, playerSettings.cameras))
playerSettings.guiPersist.selectedCamera = #playerSettings.cameras
GUI.setSelectedCamera(player, playerSettings, #playerSettings.cameras)

GUI.updateCameraList(playerSettings.gui, playerSettings.guiPersist, playerSettings.cameras)
GUI.updateCameraActions(playerSettings.gui, playerSettings.guiPersist, playerSettings.cameras)
Expand All @@ -125,7 +133,7 @@ function GUI.onClick(event)
table.remove(playerSettings.cameras, playerSettings.guiPersist.selectedCamera)

if playerSettings.guiPersist.selectedCamera > #playerSettings.cameras then
playerSettings.guiPersist.selectedCamera = #playerSettings.cameras
GUI.setSelectedCamera(player, playerSettings, #playerSettings.cameras)
end

GUI.updateCameraList(playerSettings.gui, playerSettings.guiPersist, playerSettings.cameras)
Expand Down Expand Up @@ -390,11 +398,13 @@ function GUI.onClick(event)
end
end

--- @param event EventData.on_gui_selection_state_changed
function GUI.onSelected(event)
local player = game.players[event.player_index]
local playerSettings = global.playerSettings[event.player_index]

if event.element.name == "tlbe-cameras-list" then
playerSettings.guiPersist.selectedCamera = event.element.selected_index
GUI.setSelectedCamera(player, playerSettings, event.element.selected_index)
playerSettings.guiPersist.selectedCameraTracker = 1

GUI.updateCameraActions(playerSettings.gui, playerSettings.guiPersist, playerSettings.cameras)
Expand Down Expand Up @@ -531,7 +541,7 @@ function GUI.onTextChanged(event)
Camera.setFrameRate(playerSettings.cameras[playerSettings.guiPersist.selectedCamera], event.element.text)
elseif event.element.name == "camera-speed-gain" then
Camera.setSpeedGain(playerSettings.cameras[playerSettings.guiPersist.selectedCamera], event.element.text)
elseif event.element.name == "camera-transtion-period" then
elseif event.element.name == "camera-transition-period" then
Camera.setTransitionPeriod(playerSettings.cameras[playerSettings.guiPersist.selectedCamera], event.element.text)
elseif event.element.name == "tlbe-tracker-top" then
local value = tonumber(event.element.text)
Expand Down Expand Up @@ -591,16 +601,33 @@ function GUI.onStateChanged(event)
end
end

--- @param event EventData.on_lua_shortcut
function GUI.onShortcut(event)
if event.prototype_name == "tlbe-shortcut" then
GUI.toggleMainWindow(event)
elseif event.prototype_name == "tlbe-pause-shortcut" then
GUI.togglePauseCameras(event)
elseif event.prototype_name == "tlbe-screenshot-shortcut" then
GUI.takeScreenshotEvent(event)
end
end

function GUI.takeScreenshotEvent(event)
local player = game.players[event.player_index]
local active = player.is_shortcut_available("tlbe-screenshot-shortcut")
player.print("active " .. tostring(active))
if active then
---@type playerSettings
local playerSettings = global.playerSettings[event.player_index]
local camera = playerSettings.cameras[playerSettings.guiPersist.selectedCamera]
local _, activeTracker = Tracker.findActiveTracker(camera.trackers, camera.surfaceName)

Main.takeScreenshot(player, playerSettings, camera, activeTracker)
end
end

function GUI.onSurfacesUpdated()
-- Surface list got udpated so refresh GUI
-- Surface list got updated so refresh GUI
for _, player in pairs(game.players) do
local playerSettings = global.playerSettings[player.index]
if playerSettings.gui ~= nil then
Expand Down Expand Up @@ -685,14 +712,6 @@ function GUI.toggleMainWindow(event)
-- Create frame without caption (we have our own title_bar)
local mainWindow = player.gui.screen.add { type = "frame", name = "tlbe-main-window", direction = "vertical" }
playerSettings.gui = {}
if playerSettings.guiPersist == nil then
playerSettings.guiPersist = {
-- initialize persisting gui configurations
selectedCamera = 1,
selectedCameraTracker = 1,
selectedTracker = 1
}
end

-- Add title bar
local title_bar = mainWindow.add { type = "flow" }
Expand Down Expand Up @@ -840,7 +859,7 @@ function GUI.createCameraSettings(parent, playerGUI, guiPersist, cameras, tracke
}
playerGUI.cameraInfo.add {
type = "textfield",
name = "camera-transtion-period",
name = "camera-transition-period",
tooltip = { "tooltip.camera-transitionperiod" },
style = "tlbe_config_half_width_textfield",
numeric = true,
Expand Down Expand Up @@ -1217,7 +1236,7 @@ function GUI.updateCameraConfig(cameraInfo, camera)
cameraInfo["camera-name"].text = camera.name
cameraInfo["camera-frame-rate"].text = string.format("%d", camera.frameRate or 25)
cameraInfo["camera-speed-gain"].text = string.format("%d", camera.speedGain or 60)
cameraInfo["camera-transtion-period"].text = string.format("%2.2f", camera.transitionPeriod or 1.5)
cameraInfo["camera-transition-period"].text = string.format("%2.2f", camera.transitionPeriod or 1.5)
cameraInfo["camera-entity-info"].state = camera.entityInfo
cameraInfo["camera-always-day"].state = camera.alwaysDay
resolutionFlow["camera-resolution-x"].text = string.format("%d", camera.width or 1920)
Expand Down Expand Up @@ -1465,4 +1484,21 @@ function GUI.fancyListBoxSelectItem(fancyList, selectedIndex)
end
end

---@param player LuaPlayer
---@param playerSettings playerSettings
---@param index integer
function GUI.setSelectedCamera(player, playerSettings, index)
index = Utils.clamp(1, #playerSettings.cameras, index)
playerSettings.guiPersist.selectedCamera = index

GUI.updateTakeScreenshotButton(player, playerSettings)
end

---@param player LuaPlayer
---@param playerSettings playerSettings
function GUI.updateTakeScreenshotButton(player, playerSettings)
local available = playerSettings.cameras[playerSettings.guiPersist.selectedCamera].enabled == false
player.set_shortcut_available("tlbe-screenshot-shortcut", available)
end

return GUI
Loading

0 comments on commit 24a3c7e

Please sign in to comment.