1 Commits
Author SHA1 Message Date
dutchie031 c31cc6a552 first helper classes for displaying images to units as part of a briefing
PR Prerequisites / Lua Check (pull_request) Successful in 23s
PR Prerequisites / Bundles Without Errors (pull_request) Successful in 24s
2026-09-22 20:51:57 +02:00
2 changed files with 171 additions and 0 deletions
@@ -0,0 +1,112 @@
local Logger = require("classes.util.Logger")
local logger = Logger.new("ImageDisplay")
---@class ImageDisplay
local ImageDisplay = {}
---@param unit Unit
---@param settings ImageDisplaySettings
function ImageDisplay.outImageToUnit(unit, settings)
if unit == nil then return end
settings:ValidateOrSetDefaults() --Overwrites wrong settings
if settings.picPath == nil then
logger:warn("No picture path provided for unit display.")
return -- Nothing to display
end
ImageDisplay.outImage("a_out_picture_u",
unit,
settings.picPath,
settings.duration,
settings.clearview,
settings.delay,
settings.horizontalAlignment,
settings.verticalAlignment,
settings.size,
settings.sizeUnits
)
end
---@param group Group
---@param settings ImageDisplaySettings
function ImageDisplay.outImageToGroup(group, settings)
if group == nil then return end
settings:ValidateOrSetDefaults() --Overwrites wrong settings
if settings.picPath == nil then
logger:warn("No picture path provided for group display.")
return -- Nothing to display
end
ImageDisplay.outImage("a_out_picture_g",
group,
settings.picPath,
settings.duration,
settings.clearview,
settings.delay,
settings.horizontalAlignment,
settings.verticalAlignment,
settings.size,
settings.sizeUnits
)
end
---@alias OutPictureTriggerName
---| "a_out_picture_u"
---| "a_out_picture_g"
---@private
---@param object Unit|Group
---@param triggerName OutPictureTriggerName
---@param picPath string
---@param duration number
---@param clearview boolean
---@param delay number
---@param horizontalAlignment ImageDisplaySettings.HorizontalAlignment
---@param verticalAlignment ImageDisplaySettings.VerticalAlignment
---@param size number
---@param sizeUnits ImageDisplaySettings.SizeUnits
function ImageDisplay.outImage(triggerName, object, picPath, duration, clearview, delay, horizontalAlignment, verticalAlignment, size, sizeUnits)
---@type number
local id
if triggerName == "a_out_picture_u" then
object = object --[[@as Unit]]
id = object:getID()
elseif triggerName == "a_out_picture_g" then
object = object --[[@as Group]]
id = object:getID()
end
--[[
a_out_picture_u(
unitID:number,
filePath:string,
showTime:number,
clearview:boolean,
startDelayTime:number,
horzAlignment:string,
vertAlignment:string,
size:number,
size_units:string
) -- args may not correct.
]]
local cmdString = string.format(triggerName .. '(%d, "%s", %d, %s, %d, "%d", "%d", %d, "%d")',
id,
picPath,
duration,
clearview,
delay,
horizontalAlignment,
verticalAlignment,
size,
sizeUnits)
local f, err = loadstring(cmdString)
if f then
f()
else
logger:error("Something failed when drawing complex drawing" .. err)
end
end
return ImageDisplay
@@ -0,0 +1,59 @@
---@class ImageDisplaySettings
---@field picPath string?
---@field duration number
---@field clearview boolean
---@field delay number
---@field horizontalAlignment ImageDisplaySettings.HorizontalAlignment
---@field verticalAlignment ImageDisplaySettings.VerticalAlignment
---@field size number
---@field sizeUnits ImageDisplaySettings.SizeUnits
local ImageDisplaySettings = {}
ImageDisplaySettings.__index = ImageDisplaySettings
---@enum ImageDisplaySettings.VerticalAlignment
ImageDisplaySettings.VerticalAlignment = {
Top = "0",
Center = "1",
Bottom = "2"
}
---@enum ImageDisplaySettings.HorizontalAlignment
ImageDisplaySettings.HorizontalAlignment = {
Left = "0",
Center = "1",
Right = "2"
}
---@enum ImageDisplaySettings.SizeUnits
ImageDisplaySettings.SizeUnits = {
OriginalSize = "0",
WindowSize = "1"
}
function ImageDisplaySettings.new()
local self = setmetatable({}, ImageDisplaySettings)
self.picPath = nil
self.duration = 30
self.clearview = false
self.delay = 0
self.horizontalAlignment = ImageDisplaySettings.HorizontalAlignment.Center
self.verticalAlignment = ImageDisplaySettings.VerticalAlignment.Center
self.size = 100
self.sizeUnits = ImageDisplaySettings.SizeUnits.OriginalSize
return self
end
function ImageDisplaySettings:ValidateOrSetDefaults()
if self.picPath == "" then self.picPath = nil end
if self.duration == nil or self.duration <= 0 then self.duration = 30 end
if self.clearview == nil then self.clearview = false end
if self.delay == nil then self.delay = 0 end
if self.horizontalAlignment == nil then self.horizontalAlignment = ImageDisplaySettings.HorizontalAlignment.Center end
if self.verticalAlignment == nil then self.verticalAlignment = ImageDisplaySettings.VerticalAlignment.Center end
if self.size == nil or self.size <= 0 then self.size = 100 end
if self.sizeUnits == nil then self.sizeUnits = ImageDisplaySettings.SizeUnits.OriginalSize end
end
return ImageDisplaySettings