This commit is contained in:
2026-08-17 21:37:34 +02:00
parent c8329108dd
commit b429d4a284
5 changed files with 59 additions and 84 deletions
@@ -11,6 +11,8 @@ local StageBase = require("classes.stageClasses.SpecialZones.StageBase")
local BlueSam = require("classes.stageClasses.SpecialZones.BlueSam")
local Events = require("classes.spearhead_events")
local GlobalCapManager = require("classes.capClasses.GlobalCapManager")
local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
local DrawingHelper = require("classes.stageClasses.drawings.helper.DrawingHelper")
---@alias StageColor
---| "RED"
@@ -53,7 +55,8 @@ local GlobalCapManager = require("classes.capClasses.GlobalCapManager")
--- @field protected _preActivated boolean
--- @field protected _activeStage integer
--- @field protected _stageConfig StageConfig
--- @field protected _stageDrawingId integer
--- @field protected _stageDrawing DrawingObject
--- @field protected _currentDrawingId integer
--- @field protected _spawnedGroups Array<string>
--- @field protected _stageCompleteListeners Array<StageCompleteListener>
--- @field protected CheckContinuousAsync fun(self:Stage, time:number) : number?
@@ -65,11 +68,11 @@ Stage.__index = Stage
Stage.StageColors = {
INVISIBLE = { r=0, g=0, b=0, a=0 },
RED_ACTIVE = { r=1, g=0, b=0, a=0.15 },
RED_PREACTIVE = { r=1, g=0, b=0, a=0.10},
BLUE = { r=0, g=0, b=1, a=0.10},
GRAY = { r=80/255, g=80/255, b=80/255, a=0.10 }
INVISIBLE = { 0, 0, 0, 0 },
RED_ACTIVE = { 1, 0, 0, 0.15 },
RED_PREACTIVE = { 1, 0, 0, 0.10},
BLUE = { 0, 0, 1, 0.10},
GRAY = { 80/255, 80/255, 80/255, 0.10 }
}
---comment
@@ -116,7 +119,34 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
local zone = DcsUtil.getZoneByName(self.zoneName)
if zone then
self._stageDrawingId = DcsUtil.DrawZone(zone, Stage.StageColors.INVISIBLE, Stage.StageColors.INVISIBLE, 4)
if zone.zone_type == "Cilinder" then
---@type Circle
local drawing = {
colorString = DrawingHelper.ColorTableToColorString( Stage.StageColors.INVISIBLE),
mapX = zone.location.x,
mapY = zone.location.y,
radius = zone.radius,
name = "DRAWING_" .. zone.name,
polygonMode = "circle",
primitiveType = "Polygon",
thickness = 1,
fillColorString = DrawingHelper.ColorTableToColorString( Stage.StageColors.INVISIBLE),
visible = true,
style = "solid"
}
self._stageDrawing = drawing
else
local verts = {}
---@type Free
local drawing = {
mapX = zone.location.x,
mapY = zone.location.y,
}
end
end
self._spawnedGroups = {}
@@ -253,6 +283,7 @@ function Stage:superNew(database, stageConfig, logger, initData, missionPriority
end
end
Events.AddStageNumberChangedListener(self)
return self
@@ -367,8 +398,7 @@ function Stage:AddStageCompleteListener(listener)
end
---Activates all SAMS, Airbase units etc all at once.
---@param draw boolean
function Stage:PreActivate(draw)
function Stage:PreActivate()
if self._preActivated == false then
self._preActivated = true
for key, mission in pairs(self._db.sams) do
@@ -382,9 +412,7 @@ function Stage:PreActivate(draw)
end
end
if draw == true then
self:MarkStage(Stage.StageColors.RED_PREACTIVE)
end
self:MarkStage(Stage.StageColors.RED_PREACTIVE)
end
@@ -405,6 +433,8 @@ function Stage:MarkStage(stageColor)
DcsUtil.SetLineColor(self._stageDrawingId, lineColor)
DcsUtil.SetFillColor(self._stageDrawingId, fillColor)
end
end
function Stage:ActivateStage()
@@ -414,7 +444,7 @@ function Stage:ActivateStage()
self:MarkStage(Stage.StageColors.RED_ACTIVE)
end)
self:PreActivate(false)
self:PreActivate()
self._logger:debug("Activating Misc groups for zone. Count: " .. Util.tableLength(self._db.miscGroups))
for _, miscGroup in pairs(self._db.miscGroups) do
@@ -462,9 +492,9 @@ function Stage:OnStageNumberChanged(number)
if self.stageNumber - self._activeStage == self._stageConfig.AmountPreactivateStage then
self._logger:debug("Pre-activating stage: " .. self.zoneName .. " with number: " .. number)
self:PreActivate(true)
self:PreActivate()
elseif GlobalCapManager.IsCapActiveWhenZoneIsActive(self.zoneName, number) == true then
self:PreActivate(false)
self:PreActivate()
end
if number == self.stageNumber then
@@ -47,9 +47,9 @@ function ExtraStage:OnStageNumberChanged(number)
if self.stageNumber - self._activeStage == self._stageConfig.AmountPreactivateStage then
self._logger:debug("Pre-activating stage: " .. self.zoneName .. " with number: " .. number)
self:PreActivate(true)
self:PreActivate()
elseif GlobalCapManager.IsCapActiveWhenZoneIsActive(self.zoneName, number) == true then
self:PreActivate(false)
self:PreActivate()
end
if number == self.stageNumber then
@@ -149,7 +149,6 @@ function DrawingHelper.DrawPolygon(object, id, logger)
local firstPoint = points[1]
if firstPoint == nil or newPoint.x ~= firstPoint.x or newPoint.z ~= firstPoint.z then
logger:debug("Drawing free polygon point " .. tostring(k) .. ": " .. tostring(free.points[k].x) .. ", " .. tostring(free.points[k].y))
table.insert(points, newPoint)
end
end
@@ -250,6 +249,17 @@ function DrawingHelper.ColorToColorTable(hexStr)
return { r, g , b , a }
end
---@param rgba table
---@return string
function DrawingHelper.ColorTableToColorString(rgba)
local r = string.format("%02X", math.floor(rgba[1] * 255))
local g = string.format("%02X", math.floor(rgba[2] * 255))
local b = string.format("%02X", math.floor(rgba[3] * 255))
local a = string.format("%02X", math.floor(rgba[4] * 255))
return "0x" .. r .. g .. b .. a
end
---@param lineStyle string
function DrawingHelper.ToLineStyleInteger(lineStyle)
lineStyle = lineStyle:lower()
@@ -350,7 +350,7 @@ function ZoneMission:SpawnPersistedState()
end
end
---spawns the mission, but doesn't add
---spawns the mission, but doesn't add it to the mission commands.
function ZoneMission:SpawnInactive()
self._logger:info("PreActivating " .. self.name)
-65
View File
@@ -636,71 +636,6 @@ do -- INIT DCS_UTIL
---@field b number
---@field a number
local drawID = 400
---@param zone SpearheadTriggerZone
---@param lineColor DrawColor
---@param fillColor DrawColor
---@param lineStyle LineType
---@return number drawID
function DCS_UTIL.DrawZone(zone, lineColor, fillColor, lineStyle)
if lineStyle == nil then lineStyle = 4 end
drawID = drawID + 1
if zone.zone_type == "Cilinder" then
trigger.action.circleToAll(-1, drawID, { x = zone.location.x, y = 0, z = zone.location.y }, zone.radius,
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, lineStyle, true)
else
local functionString = "trigger.action.markupToAll(7, -1, " .. drawID .. ","
for _, vecpoint in pairs(zone.verts) do
functionString = functionString .. " { x=" .. vecpoint.x .. ", y=0,z=" .. vecpoint.y .. "},"
end
functionString = functionString .. "{0,1,0,1}, {0,1,0,1}, " .. lineStyle .. ")"
---@diagnostic disable-next-line: deprecated
local f, err = loadstring(functionString)
if f then
f()
else
env.error("Something failed when drawing complex drawing" .. err)
end
end
local fillColorMapped = {
fillColor.r or 0,
fillColor.g or 0,
fillColor.b or 0,
fillColor.a or 0.5
}
local lineColorMapped = {
lineColor.r or 0,
lineColor.g or 0,
lineColor.b or 0,
lineColor.a or 1
}
trigger.action.setMarkupColorFill(drawID, fillColorMapped)
trigger.action.setMarkupColor(drawID, lineColorMapped)
return drawID
end
---@param start Vec3
---@param finish Vec3
---@param lineColor DrawColor
---@param lineStyle LineType
function DCS_UTIL.DrawLine(start, finish, lineColor, lineStyle)
if lineStyle == nil then lineStyle = 4 end
drawID = drawID + 1
local lineColorMapped = {
lineColor.r or 0,
lineColor.g or 0,
lineColor.b or 0,
lineColor.a or 1
}
trigger.action.lineToAll(-1, drawID, start, finish, lineColorMapped, lineStyle)
return drawID
end
---@param groupID number
---@param text string