Resolved first comments and made StageDrawings explicit classes that now also follow lane identifiers
This commit is contained in:
@@ -33,6 +33,7 @@ do
|
|||||||
unitsStates = {},
|
unitsStates = {},
|
||||||
random_missions = {},
|
random_missions = {},
|
||||||
deliveredKilos = {},
|
deliveredKilos = {},
|
||||||
|
activeStage = nil, -- Backwards compatibility for previous version without lanes
|
||||||
activeStageInStageLane = {}
|
activeStageInStageLane = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,6 +239,21 @@ do
|
|||||||
Persistence._updateRequired = true
|
Persistence._updateRequired = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---Get the active stage as in the persistance file
|
||||||
|
---@param stageLane string?
|
||||||
|
---@return integer|nil
|
||||||
|
Persistence.GetActiveStage = function(stageLane)
|
||||||
|
stageLane = stageLane or "nil"
|
||||||
|
|
||||||
|
-- backwards compatibility for previous versions without stage lanes
|
||||||
|
if stageLane == "nil" and tables.activeStageInStageLane[stageLane] == nil then
|
||||||
|
tables.activeStageInStageLane[stageLane] = tables.activeStage
|
||||||
|
tables.activeStage = nil -- Clear the old activeStage so it's not used or confused later
|
||||||
|
end
|
||||||
|
|
||||||
|
return tables.activeStageInStageLane[stageLane]
|
||||||
|
end
|
||||||
|
|
||||||
---comment
|
---comment
|
||||||
---@param missionName string
|
---@param missionName string
|
||||||
---@param pickedZone string
|
---@param pickedZone string
|
||||||
@@ -257,13 +273,6 @@ do
|
|||||||
return tables.random_missions[string.lower(missionName)]
|
return tables.random_missions[string.lower(missionName)]
|
||||||
end
|
end
|
||||||
|
|
||||||
---Get the active stage as in the persistance file
|
|
||||||
---@param stageLane string?
|
|
||||||
---@return integer|nil
|
|
||||||
Persistence.GetActiveStage = function(stageLane)
|
|
||||||
stageLane = stageLane or "nil"
|
|
||||||
return tables.activeStageInStageLane[stageLane]
|
|
||||||
end
|
|
||||||
|
|
||||||
---comment
|
---comment
|
||||||
---@param zoneName string
|
---@param zoneName string
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ local Util = require("classes.util.Util")
|
|||||||
local DcsUtil = require("classes.util.DcsUtil")
|
local DcsUtil = require("classes.util.DcsUtil")
|
||||||
local MissionEditorWarnings = require("classes.util.MissionEditorWarnings")
|
local MissionEditorWarnings = require("classes.util.MissionEditorWarnings")
|
||||||
local MizGroupsManager = require("classes.helpers.MizGroupsManager")
|
local MizGroupsManager = require("classes.helpers.MizGroupsManager")
|
||||||
local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
|
local StageDrawing = require("classes.stageClasses.drawings.StageDrawing")
|
||||||
|
|
||||||
|
|
||||||
---@class DatabaseTables
|
---@class DatabaseTables
|
||||||
@@ -27,7 +27,7 @@ local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
|
|||||||
---@field MissionZoneData table<string, MissionZoneData>
|
---@field MissionZoneData table<string, MissionZoneData>
|
||||||
---@field FarpZoneData table<string,FarpZoneData>
|
---@field FarpZoneData table<string,FarpZoneData>
|
||||||
---@field missionCodes table<string, boolean>
|
---@field missionCodes table<string, boolean>
|
||||||
---@field CustomDrawings Array<CustomDrawing>
|
---@field StageDrawings Array<StageDrawing>
|
||||||
|
|
||||||
---@class CapRoute
|
---@class CapRoute
|
||||||
---@field zones Array<SpearheadTriggerZone>
|
---@field zones Array<SpearheadTriggerZone>
|
||||||
@@ -107,7 +107,7 @@ function Database.New(Logger)
|
|||||||
FarpZoneData = {},
|
FarpZoneData = {},
|
||||||
missionCodes = {},
|
missionCodes = {},
|
||||||
SupplyHubZones = {},
|
SupplyHubZones = {},
|
||||||
CustomDrawings = {}
|
StageDrawings = {}
|
||||||
}
|
}
|
||||||
|
|
||||||
Database.__index = Database
|
Database.__index = Database
|
||||||
@@ -231,8 +231,10 @@ function Database.New(Logger)
|
|||||||
for key, layer_object in pairs(layer.objects) do
|
for key, layer_object in pairs(layer.objects) do
|
||||||
if Util.startswith(layer_object.name, "drawing_", true) then
|
if Util.startswith(layer_object.name, "drawing_", true) then
|
||||||
local object = layer_object --[[@as DrawingObject]]
|
local object = layer_object --[[@as DrawingObject]]
|
||||||
local customDrawing = CustomDrawing.New(object)
|
local stageDrawing = StageDrawing.New(object)
|
||||||
table.insert(self._tables.CustomDrawings, customDrawing)
|
if stageDrawing then
|
||||||
|
table.insert(self._tables.StageDrawings, stageDrawing)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -621,12 +623,12 @@ function Database:loadBlueSamUnits()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return Array<CustomDrawing>
|
---@return Array<StageDrawing>
|
||||||
function Database:getCustomDrawings()
|
function Database:getStageDrawings()
|
||||||
if self._tables.CustomDrawings == nil then
|
if self._tables.StageDrawings == nil then
|
||||||
return {}
|
return {}
|
||||||
end
|
end
|
||||||
return self._tables.CustomDrawings
|
return self._tables.StageDrawings
|
||||||
end
|
end
|
||||||
|
|
||||||
---Loads all units, data and briefings
|
---Loads all units, data and briefings
|
||||||
|
|||||||
@@ -35,10 +35,10 @@ do
|
|||||||
local OnStageNumberChangedListeners = {}
|
local OnStageNumberChangedListeners = {}
|
||||||
local OnStageNumberChangedHandlers = {}
|
local OnStageNumberChangedHandlers = {}
|
||||||
---Add a stage zone number changed listener
|
---Add a stage zone number changed listener
|
||||||
---@param listener OnStageChangedListener object with function OnStageNumberChanged(self, number)
|
---@param listener OnStageChangedListener object with function OnStageNumberChanged(self, number, stageLaneIdentifier)
|
||||||
SpearheadEvents.AddStageNumberChangedListener = function(listener)
|
SpearheadEvents.AddStageNumberChangedListener = function(listener)
|
||||||
if type(listener) ~= "table" or type(listener.OnStageNumberChanged) ~= "function" then
|
if type(listener) ~= "table" or type(listener.OnStageNumberChanged) ~= "function" then
|
||||||
warn("Event handler not of type table/object with function OnStageNumberChanged(self, number)")
|
warn("Event handler not of type table/object with function OnStageNumberChanged(self, number, stageLaneIdentifier)")
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
table.insert(OnStageNumberChangedListeners, listener)
|
table.insert(OnStageNumberChangedListeners, listener)
|
||||||
|
|||||||
@@ -337,17 +337,24 @@ function GlobalStageManager:OnStageNumberChangeComplete(stageNumber, stageLaneId
|
|||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@private
|
||||||
function GlobalStageManager:UpdateDrawings(stageNumber)
|
---@param stageNumber number
|
||||||
|
---@param stageLaneIdentifier string?
|
||||||
|
function GlobalStageManager:UpdateDrawings(stageNumber, stageLaneIdentifier)
|
||||||
self.logger:debug("Updating custom drawings for stage number: " .. tostring(stageNumber))
|
self.logger:debug("Updating custom drawings for stage number: " .. tostring(stageNumber))
|
||||||
local drawings = self.database:getCustomDrawings()
|
local drawings = self.database:getStageDrawings()
|
||||||
for _, drawing in pairs(drawings) do
|
for _, drawing in pairs(drawings) do
|
||||||
local startStage, stopStage = drawing:GetStartAndStop()
|
local startStage = drawing:GetStartingStage()
|
||||||
if stageNumber >= startStage and stageNumber < stopStage then
|
local stopStage = drawing:GetRemoveAtStage()
|
||||||
self.logger:debug("Drawing " .. drawing:GetName() .. " is active for stage number: " .. tostring(stageNumber))
|
local laneIdentifier = drawing:GetStageLaneIdentifier()
|
||||||
drawing:Draw()
|
|
||||||
else
|
if laneIdentifier == stageLaneIdentifier then
|
||||||
self.logger:debug("Drawing " .. drawing:GetName() .. " is not active for stage number: " .. tostring(stageNumber))
|
if stageNumber >= startStage and stageNumber < stopStage then
|
||||||
drawing:Remove()
|
self.logger:debug("Drawing " .. drawing:GetName() .. " is active for stage number: " .. tostring(stageNumber))
|
||||||
|
drawing:Draw()
|
||||||
|
else
|
||||||
|
self.logger:debug("Drawing " .. drawing:GetName() .. " is not active for stage number: " .. tostring(stageNumber))
|
||||||
|
drawing:Remove()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,35 +1,25 @@
|
|||||||
|
|
||||||
local DrawingHelper = require("classes.stageClasses.drawings.helper.DrawingHelper")
|
local DrawingHelper = require("classes.stageClasses.drawings.helper.DrawingHelper")
|
||||||
local Util = require("classes.util.Util")
|
local Util = require("classes.util.Util")
|
||||||
local Logger = require("classes.util.Logger")
|
local Logger = require("classes.util.Logger")
|
||||||
|
local MissionEditorWarnings = require("classes.util.MissionEditorWarnings")
|
||||||
|
|
||||||
local drawingLogger = Logger.new("CustomDrawing")
|
local drawingLogger = Logger.new("CustomDrawing")
|
||||||
|
|
||||||
|
|
||||||
---@class CustomDrawing
|
---@class CustomDrawing
|
||||||
---@field private _id integer?
|
---@field protected _id integer?
|
||||||
---@field private _drawingObject DrawingObject
|
---@field protected _name string?
|
||||||
---@field private _startingStage number
|
---@field protected _drawingObject DrawingObject
|
||||||
---@field private _removeAtStage number
|
|
||||||
---@field private _logger Logger
|
|
||||||
local CustomDrawing = {}
|
local CustomDrawing = {}
|
||||||
CustomDrawing.__index = CustomDrawing
|
CustomDrawing.__index = CustomDrawing
|
||||||
|
|
||||||
|
---@protected
|
||||||
---@param drawingObject DrawingObject
|
---@param drawingObject DrawingObject
|
||||||
---@return CustomDrawing
|
---@return CustomDrawing?
|
||||||
function CustomDrawing.New(drawingObject)
|
function CustomDrawing.New(drawingObject)
|
||||||
local self = setmetatable({}, CustomDrawing)
|
local self = setmetatable({}, CustomDrawing)
|
||||||
self._drawingObject = drawingObject
|
self._drawingObject = drawingObject
|
||||||
self._id = nil -- initiate ID as nil, when drawn it will be set to the ID returned by DrawingHelper.Draw
|
self._id = nil -- initiate ID as nil, when drawn it will be set to the ID returned by DrawingHelper.Draw
|
||||||
self._logger = drawingLogger
|
self._name = drawingObject.name
|
||||||
|
|
||||||
local name = drawingObject.name
|
|
||||||
local split = Util.split_string(name or "", "_")
|
|
||||||
local secondPart = split[2] or "1"
|
|
||||||
local splitPart = Util.split_string(secondPart, ":")
|
|
||||||
self._startingStage = tonumber(splitPart[1]) or 1
|
|
||||||
self._removeAtStage = tonumber(splitPart[2]) or math.huge
|
|
||||||
return self
|
return self
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -95,7 +85,6 @@ function CustomDrawing.FromZone(zone, colorString, fillColorString, lineStyle, l
|
|||||||
end
|
end
|
||||||
|
|
||||||
if zone.zone_type == "Polygon" then
|
if zone.zone_type == "Polygon" then
|
||||||
|
|
||||||
---@type Free
|
---@type Free
|
||||||
local drawingObject = {
|
local drawingObject = {
|
||||||
mapX = 0,
|
mapX = 0,
|
||||||
@@ -110,7 +99,7 @@ function CustomDrawing.FromZone(zone, colorString, fillColorString, lineStyle, l
|
|||||||
fillColorString = fillColorString,
|
fillColorString = fillColorString,
|
||||||
thickness = lineThickness,
|
thickness = lineThickness,
|
||||||
}
|
}
|
||||||
|
|
||||||
return CustomDrawing.New(drawingObject)
|
return CustomDrawing.New(drawingObject)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -120,25 +109,19 @@ function CustomDrawing:GetName()
|
|||||||
return self._drawingObject.name
|
return self._drawingObject.name
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return number start
|
|
||||||
---@return number stop
|
|
||||||
function CustomDrawing:GetStartAndStop()
|
|
||||||
return self._startingStage, self._removeAtStage
|
|
||||||
end
|
|
||||||
|
|
||||||
function CustomDrawing:Draw()
|
function CustomDrawing:Draw()
|
||||||
self._logger:debug("Drawing custom drawing with ID " .. tostring(self._id))
|
drawingLogger:debug("Drawing custom drawing with ID " .. tostring(self._id))
|
||||||
|
|
||||||
if self._id ~= nil then
|
if self._id ~= nil then
|
||||||
DrawingHelper.Remove(self._id)
|
DrawingHelper.Remove(self._id)
|
||||||
end
|
end
|
||||||
|
|
||||||
self._id = DrawingHelper.Draw(self._drawingObject, self._logger)
|
self._id = DrawingHelper.Draw(self._drawingObject)
|
||||||
end
|
end
|
||||||
|
|
||||||
function CustomDrawing:Remove()
|
function CustomDrawing:Remove()
|
||||||
if self._id ~= nil then
|
if self._id ~= nil then
|
||||||
self._logger:debug("Removing custom drawing with ID " .. tostring(self._id))
|
drawingLogger:debug("Removing custom drawing with ID " .. tostring(self._id))
|
||||||
DrawingHelper.Remove(self._id)
|
DrawingHelper.Remove(self._id)
|
||||||
self._id = nil
|
self._id = nil
|
||||||
end
|
end
|
||||||
@@ -149,4 +132,4 @@ function CustomDrawing:UpdateDrawingObject(updateFunc)
|
|||||||
self._drawingObject = updateFunc(self._drawingObject)
|
self._drawingObject = updateFunc(self._drawingObject)
|
||||||
end
|
end
|
||||||
|
|
||||||
return CustomDrawing
|
return CustomDrawing
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
local CustomDrawing = require("classes.stageClasses.drawings.CustomDrawing")
|
||||||
|
local Util = require("classes.util.Util")
|
||||||
|
local MissionEditorWarnings = require("classes.util.MissionEditorWarnings")
|
||||||
|
---@class StageDrawing : CustomDrawing
|
||||||
|
---@field private _startingStage number
|
||||||
|
---@field private _removeAtStage number
|
||||||
|
---@field private _stageLaneIdentifier string?
|
||||||
|
local StageDrawing = {}
|
||||||
|
StageDrawing.__index = StageDrawing
|
||||||
|
setmetatable(StageDrawing, CustomDrawing)
|
||||||
|
|
||||||
|
|
||||||
|
---@param drawingObject DrawingObject
|
||||||
|
---@return StageDrawing?
|
||||||
|
function StageDrawing.New(drawingObject)
|
||||||
|
|
||||||
|
local super = CustomDrawing.New(drawingObject)
|
||||||
|
if not super then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
local self = setmetatable(super, StageDrawing) --[[@as StageDrawing]]
|
||||||
|
|
||||||
|
local split = Util.split_string(self._name or "", "_")
|
||||||
|
local secondPart = split[2] or "1"
|
||||||
|
local splitPart = Util.split_string(secondPart, ":")
|
||||||
|
if tonumber(splitPart[1]) == nil then
|
||||||
|
local laneIdentifier = string.sub(splitPart[1], 1, 1)
|
||||||
|
if tonumber(laneIdentifier) == nil then
|
||||||
|
self._stageLaneIdentifier = laneIdentifier
|
||||||
|
end
|
||||||
|
local startNumber = string.sub(splitPart[1], 2)
|
||||||
|
local startNumberVal = tonumber(startNumber)
|
||||||
|
if startNumberVal == nil then
|
||||||
|
MissionEditorWarnings.Add("Start number for " ..
|
||||||
|
self._name .. " is not a valid number: " .. tostring(startNumber))
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
self._startingStage = startNumberVal
|
||||||
|
else
|
||||||
|
local startNumber = tonumber(splitPart[1])
|
||||||
|
if startNumber == nil then
|
||||||
|
MissionEditorWarnings.Add("Start number for " ..
|
||||||
|
self._name .. " is not a valid number: " .. tostring(splitPart[1]))
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
self._startingStage = startNumber
|
||||||
|
end
|
||||||
|
|
||||||
|
if tonumber(splitPart[2]) == nil then
|
||||||
|
local laneIdentifier = string.sub(splitPart[2], 1, 1)
|
||||||
|
if tonumber(laneIdentifier) == nil then
|
||||||
|
if self._stageLaneIdentifier and self._stageLaneIdentifier ~= laneIdentifier then
|
||||||
|
MissionEditorWarnings.Add("Lane identifiers do not match for " ..
|
||||||
|
self._name ..
|
||||||
|
": " ..
|
||||||
|
self._stageLaneIdentifier ..
|
||||||
|
" vs " .. laneIdentifier .. ". Will only use stage " .. self._stageLaneIdentifier)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local stopNumber = string.sub(splitPart[2], 2)
|
||||||
|
local stopNumberVal = tonumber(stopNumber)
|
||||||
|
if stopNumberVal == nil then
|
||||||
|
MissionEditorWarnings.Add("Stop number for " ..
|
||||||
|
self._name .. " is not a valid number: " .. tostring(stopNumber))
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
self._removeAtStage = stopNumberVal
|
||||||
|
else
|
||||||
|
local stopNumber = tonumber(splitPart[2])
|
||||||
|
if stopNumber == nil then
|
||||||
|
MissionEditorWarnings.Add("Stop number for " ..
|
||||||
|
self._name .. " is not a valid number: " .. tostring(splitPart[2]))
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
self._removeAtStage = stopNumber
|
||||||
|
end
|
||||||
|
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function StageDrawing:GetStageLaneIdentifier()
|
||||||
|
return self._stageLaneIdentifier
|
||||||
|
end
|
||||||
|
|
||||||
|
function StageDrawing:GetStartingStage()
|
||||||
|
return self._startingStage
|
||||||
|
end
|
||||||
|
|
||||||
|
function StageDrawing:GetRemoveAtStage()
|
||||||
|
return self._removeAtStage
|
||||||
|
end
|
||||||
|
|
||||||
|
return StageDrawing
|
||||||
Reference in New Issue
Block a user