wip
This commit is contained in:
@@ -453,6 +453,7 @@ function MissionCommandsHelper:AddSupplyHubCommandsIfApplicable(groupID)
|
|||||||
---@field groupID number
|
---@field groupID number
|
||||||
---@field crateType CrateType
|
---@field crateType CrateType
|
||||||
---@field supplyUnitsTracker SupplyUnitsTracker
|
---@field supplyUnitsTracker SupplyUnitsTracker
|
||||||
|
---@field commandHelper MissionCommandsHelper
|
||||||
|
|
||||||
---comment
|
---comment
|
||||||
---@param params LoadCargoCommandParams
|
---@param params LoadCargoCommandParams
|
||||||
@@ -460,31 +461,31 @@ function MissionCommandsHelper:AddSupplyHubCommandsIfApplicable(groupID)
|
|||||||
local crateType = params.crateType
|
local crateType = params.crateType
|
||||||
local supplyUnitsTracker = params.supplyUnitsTracker
|
local supplyUnitsTracker = params.supplyUnitsTracker
|
||||||
if supplyUnitsTracker then
|
if supplyUnitsTracker then
|
||||||
supplyUnitsTracker:UnitRequestCrateLoading(params.groupID, crateType)
|
supplyUnitsTracker:UnitRequestCrateLoading(params.groupID, crateType, params.commandHelper)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local path = { [1] = folderNames.supplyHub }
|
local path = { [1] = folderNames.supplyHub }
|
||||||
|
|
||||||
---@type LoadCargoCommandParams
|
---@type LoadCargoCommandParams
|
||||||
local farpParams1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_1000", supplyUnitsTracker = self._supplyUnitsTracker }
|
local farpParams1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_1000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (1000)", path, loadCargoCommand, farpParams1000)
|
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (1000)", path, loadCargoCommand, farpParams1000)
|
||||||
|
|
||||||
---@type LoadCargoCommandParams
|
---@type LoadCargoCommandParams
|
||||||
local farpParams2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker }
|
local farpParams2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "FARP_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (2000)", path, loadCargoCommand, farpParams2000)
|
missionCommands.addCommandForGroup(groupID, "Load FARP Crate (2000)", path, loadCargoCommand, farpParams2000)
|
||||||
|
|
||||||
---@type LoadCargoCommandParams
|
---@type LoadCargoCommandParams
|
||||||
local samParms1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker }
|
local samParms1000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (1000)", path, loadCargoCommand, samParms1000)
|
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (1000)", path, loadCargoCommand, samParms1000)
|
||||||
|
|
||||||
---@type LoadCargoCommandParams
|
---@type LoadCargoCommandParams
|
||||||
local samParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker }
|
local samParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "SAM_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (2000)", path, loadCargoCommand, samParms2000)
|
missionCommands.addCommandForGroup(groupID, "Load SAM Crate (2000)", path, loadCargoCommand, samParms2000)
|
||||||
|
|
||||||
---@type LoadCargoCommandParams
|
---@type LoadCargoCommandParams
|
||||||
local samParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "AIRBASE_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker }
|
local airbaseParms2000 = { unitID = unit:getID(), groupID = group:getID(), crateType = "AIRBASE_CRATE_2000", supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Airbase Crate (2000)", path, loadCargoCommand, samParms2000)
|
missionCommands.addCommandForGroup(groupID, "Airbase Crate (2000)", path, loadCargoCommand, airbaseParms2000)
|
||||||
end
|
end
|
||||||
|
|
||||||
function MissionCommandsHelper:AddCargoCommands(groupID)
|
function MissionCommandsHelper:AddCargoCommands(groupID)
|
||||||
@@ -499,13 +500,15 @@ function MissionCommandsHelper:AddCargoCommands(groupID)
|
|||||||
---@field unitID number
|
---@field unitID number
|
||||||
---@field crateType CrateType
|
---@field crateType CrateType
|
||||||
---@field supplyUnitsTracker SupplyUnitsTracker
|
---@field supplyUnitsTracker SupplyUnitsTracker
|
||||||
|
---@field commandHelper MissionCommandsHelper
|
||||||
|
|
||||||
---comment
|
---comment
|
||||||
---@param params UnloadCargoCommandParams
|
---@param params UnloadCargoCommandParams
|
||||||
local unloadCargoCommand = function(params)
|
local unloadCargoCommand = function(params)
|
||||||
local unitID = params.unitID
|
local unitID = params.unitID
|
||||||
local crateType = params.crateType
|
local crateType = params.crateType
|
||||||
params.supplyUnitsTracker:UnloadRequested(unitID, crateType)
|
local supplyUnitsTracker = params.supplyUnitsTracker
|
||||||
|
params.supplyUnitsTracker:UnloadRequested(unitID, crateType, params.commandHelper)
|
||||||
end
|
end
|
||||||
|
|
||||||
local cargo = self._supplyUnitsTracker:GetCargoInUnit(unit:getID())
|
local cargo = self._supplyUnitsTracker:GetCargoInUnit(unit:getID())
|
||||||
@@ -516,7 +519,7 @@ function MissionCommandsHelper:AddCargoCommands(groupID)
|
|||||||
for i = 1, amount do
|
for i = 1, amount do
|
||||||
local path = { [1] = folderNames.cargo }
|
local path = { [1] = folderNames.cargo }
|
||||||
---@type UnloadCargoCommandParams
|
---@type UnloadCargoCommandParams
|
||||||
local params = { unitID = unit:getID(), crateType = cargoType, supplyUnitsTracker = self._supplyUnitsTracker }
|
local params = { unitID = unit:getID(), crateType = cargoType, supplyUnitsTracker = self._supplyUnitsTracker, commandHelper = self }
|
||||||
missionCommands.addCommandForGroup(groupID, "Unload " .. cargoConfig.displayName, path, unloadCargoCommand, params)
|
missionCommands.addCommandForGroup(groupID, "Unload " .. cargoConfig.displayName, path, unloadCargoCommand, params)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,23 +1,26 @@
|
|||||||
|
|
||||||
local Logger = require("classes.util.Logger")
|
local Logger = require("classes.util.Logger")
|
||||||
local Util = require("classes.util.Util")
|
local Util = require("classes.util.Util")
|
||||||
local DcsUtil = require("classes.util.DcsUtil")
|
local DcsUtil = require("classes.util.DcsUtil")
|
||||||
local MissionCommandsHelper = require("classes.stageClasses.helpers.MissionCommandsHelper")
|
|
||||||
local SpearheadEvents = require("classes.spearhead_events")
|
local SpearheadEvents = require("classes.spearhead_events")
|
||||||
local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHelper")
|
local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHelper")
|
||||||
local MaxLoadConfig = require("classes.stageClasses.helpers.MaxLoadConfig")
|
local MaxLoadConfig = require("classes.stageClasses.helpers.MaxLoadConfig")
|
||||||
|
|
||||||
env.info("Spearhead SupplyUnitsTracker loaded")
|
env.info("Spearhead SupplyUnitsTracker loaded")
|
||||||
|
|
||||||
|
---@class SupplyUnitEventListener
|
||||||
|
---@field supplyUnitSpawned fun(self:SupplyUnitEventListener, unit:Unit) | nil
|
||||||
|
---@field enteredSupplyHub fun(self:SupplyUnitEventListener, unit:Unit, hub:SupplyHub) | nil
|
||||||
|
---@field exitedSupplyHub fun(self:SupplyUnitEventListener, unit:Unit, hub:SupplyHub) | nil
|
||||||
|
|
||||||
---@class SupplyUnitsTracker
|
---@class SupplyUnitsTracker
|
||||||
---@field private _supplyUnitsByName table<string, Unit>
|
---@field private _supplyUnitsByName table<string, Unit>
|
||||||
---@field private _cargoInUnits table<string, table<CrateType, number>>
|
---@field private _cargoInUnits table<string, table<CrateType, number>>
|
||||||
---@field private _logger Logger
|
---@field private _logger Logger
|
||||||
---@field private _unitPositions table<string, Vec3>
|
---@field private _unitPositions table<string, Vec3>
|
||||||
---@field private _commandsHelper MissionCommandsHelper
|
---@field private _unitInSupplyHub table<string, boolean>
|
||||||
---@field private _droppedCrates table<string, StaticObject>
|
---@field private _droppedCrates table<string, StaticObject>
|
||||||
---@field private _registeredHubs table<SupplyHub, boolean>
|
---@field private _registeredHubs table<SupplyHub, boolean>
|
||||||
---@field private _supplyUnitSpawnedListener Array<SupplyUnitSpawnedListener>
|
---@field private _supplyUnitEventsListeners Array<SupplyUnitEventListener>
|
||||||
local SupplyUnitsTracker = {}
|
local SupplyUnitsTracker = {}
|
||||||
SupplyUnitsTracker.__index = SupplyUnitsTracker
|
SupplyUnitsTracker.__index = SupplyUnitsTracker
|
||||||
|
|
||||||
@@ -37,9 +40,8 @@ function SupplyUnitsTracker.getOrCreate(logLevel)
|
|||||||
singleton._supplyUnitsByName = {}
|
singleton._supplyUnitsByName = {}
|
||||||
singleton._droppedCrates = {}
|
singleton._droppedCrates = {}
|
||||||
singleton._registeredHubs = {}
|
singleton._registeredHubs = {}
|
||||||
singleton._supplyUnitSpawnedListener = {}
|
singleton._supplyUnitEventsListeners = {}
|
||||||
|
singleton._unitInSupplyHub = {}
|
||||||
singleton._commandsHelper = MissionCommandsHelper.getOrCreate(singleton._logger.LogLevel)
|
|
||||||
|
|
||||||
SpearheadEvents.AddOnPlayerEnterUnitListener(singleton)
|
SpearheadEvents.AddOnPlayerEnterUnitListener(singleton)
|
||||||
|
|
||||||
@@ -78,29 +80,30 @@ function SupplyUnitsTracker:OnPlayerEntersUnit(unit)
|
|||||||
if self:IsSupplyUnit(unit) == true then
|
if self:IsSupplyUnit(unit) == true then
|
||||||
self._supplyUnitsByName[unit:getName()] = unit
|
self._supplyUnitsByName[unit:getName()] = unit
|
||||||
self._cargoInUnits[tostring(unit:getID())] = nil
|
self._cargoInUnits[tostring(unit:getID())] = nil
|
||||||
|
self._unitInSupplyHub[tostring(unit:getID())] = false
|
||||||
self._unitPositions[tostring(unit:getID())] = unit:getPoint()
|
self._unitPositions[tostring(unit:getID())] = unit:getPoint()
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, listener in pairs(self._supplyUnitSpawnedListener) do
|
for _, listener in pairs(self._supplyUnitEventsListeners) do
|
||||||
pcall(function()
|
pcall(function()
|
||||||
listener:SupplyUnitSpawned(unit)
|
if listener.supplyUnitSpawned then
|
||||||
|
listener:supplyUnitSpawned(unit)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
---@class SupplyUnitSpawnedListener
|
|
||||||
---@field SupplyUnitSpawned fun(self:SupplyUnitSpawnedListener, unit:Unit)
|
|
||||||
|
|
||||||
---@param listener SupplyUnitSpawnedListener
|
---@param listener SupplyUnitEventListener
|
||||||
function SupplyUnitsTracker:AddOnSupplyUnitSpawnedListener(listener)
|
function SupplyUnitsTracker:AddOnSupplyUnitSpawnedListener(listener)
|
||||||
if listener == nil then return end
|
if listener == nil then return end
|
||||||
|
|
||||||
if self._supplyUnitSpawnedListener == nil then
|
if self._supplyUnitEventsListeners == nil then
|
||||||
self._supplyUnitSpawnedListener = {}
|
self._supplyUnitEventsListeners = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
table.insert(self._supplyUnitSpawnedListener, listener)
|
table.insert(self._supplyUnitEventsListeners, listener)
|
||||||
end
|
end
|
||||||
|
|
||||||
function SupplyUnitsTracker:Update()
|
function SupplyUnitsTracker:Update()
|
||||||
@@ -150,6 +153,7 @@ function SupplyUnitsTracker:AddCargoToUnit(unitID, crateType)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@private
|
||||||
---@param unitID number
|
---@param unitID number
|
||||||
---@param crateType CrateType
|
---@param crateType CrateType
|
||||||
function SupplyUnitsTracker:RemoveCargoFromUnit(unitID, crateType)
|
function SupplyUnitsTracker:RemoveCargoFromUnit(unitID, crateType)
|
||||||
@@ -176,6 +180,7 @@ function SupplyUnitsTracker:RemoveCargoFromUnit(unitID, crateType)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@private
|
||||||
---@param unit Unit
|
---@param unit Unit
|
||||||
function SupplyUnitsTracker:UpdateWeightForUnit(unit)
|
function SupplyUnitsTracker:UpdateWeightForUnit(unit)
|
||||||
|
|
||||||
@@ -206,9 +211,29 @@ function SupplyUnitsTracker:CheckUnitsInZones()
|
|||||||
local zone = hub:GetZone()
|
local zone = hub:GetZone()
|
||||||
if zone ~= nil then
|
if zone ~= nil then
|
||||||
if Util.is3dPointInZone(pos, zone) then
|
if Util.is3dPointInZone(pos, zone) then
|
||||||
self._commandsHelper:MarkUnitInSupplyHub(group:getID())
|
if self._unitInSupplyHub[tostring(unit:getID())] ~= true then
|
||||||
|
self._unitInSupplyHub[tostring(unit:getID())] = true
|
||||||
|
|
||||||
|
for _, listener in pairs(self._supplyUnitEventsListeners) do
|
||||||
|
pcall(function()
|
||||||
|
if listener.enteredSupplyHub then
|
||||||
|
listener:enteredSupplyHub(unit, hub)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
self._commandsHelper:MarkUnitOutsideSupplyHub(group:getID())
|
if self._unitInSupplyHub[tostring(unit:getID())] == true then
|
||||||
|
self._unitInSupplyHub[tostring(unit:getID())] = false
|
||||||
|
for _, listener in pairs(self._supplyUnitEventsListeners) do
|
||||||
|
pcall(function()
|
||||||
|
if listener.exitedSupplyHub then
|
||||||
|
listener:exitedSupplyHub(unit, hub)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -245,7 +270,12 @@ function SupplyUnitsTracker:GetUnits()
|
|||||||
end
|
end
|
||||||
|
|
||||||
local cargoCount = 0
|
local cargoCount = 0
|
||||||
function SupplyUnitsTracker:UnloadRequested(unitID, crateType)
|
|
||||||
|
---comment
|
||||||
|
---@param unitID number
|
||||||
|
---@param crateType CrateType
|
||||||
|
---@param missionCommandsHelper MissionCommandsHelper
|
||||||
|
function SupplyUnitsTracker:UnloadRequested(unitID, crateType, missionCommandsHelper)
|
||||||
|
|
||||||
self._logger:debug("Unload requested for unit: " .. unitID .. " crateType: " .. crateType)
|
self._logger:debug("Unload requested for unit: " .. unitID .. " crateType: " .. crateType)
|
||||||
|
|
||||||
@@ -278,7 +308,7 @@ function SupplyUnitsTracker:UnloadRequested(unitID, crateType)
|
|||||||
|
|
||||||
local spawned = coalition.addStaticObject(unit:getCoalition(), cargoSpawnObject)
|
local spawned = coalition.addStaticObject(unit:getCoalition(), cargoSpawnObject)
|
||||||
self._droppedCrates[cargoSpawnObject.name] = spawned
|
self._droppedCrates[cargoSpawnObject.name] = spawned
|
||||||
self._commandsHelper:updateCommandsForGroup(group:getID())
|
missionCommandsHelper:updateCommandsForGroup(group:getID())
|
||||||
end
|
end
|
||||||
|
|
||||||
---@return table<string,StaticObject>
|
---@return table<string,StaticObject>
|
||||||
@@ -289,7 +319,8 @@ end
|
|||||||
---Loads a crate directly into the unit
|
---Loads a crate directly into the unit
|
||||||
---@param groupID number
|
---@param groupID number
|
||||||
---@param crateType CrateType
|
---@param crateType CrateType
|
||||||
function SupplyUnitsTracker:UnitRequestCrateLoading(groupID, crateType)
|
---@param missionCommandsHelper MissionCommandsHelper
|
||||||
|
function SupplyUnitsTracker:UnitRequestCrateLoading(groupID, crateType, missionCommandsHelper)
|
||||||
|
|
||||||
self._logger:debug("UnitRequestCrateLoading called with groupID: " .. groupID .. " and crateType: " .. crateType)
|
self._logger:debug("UnitRequestCrateLoading called with groupID: " .. groupID .. " and crateType: " .. crateType)
|
||||||
|
|
||||||
@@ -320,11 +351,12 @@ function SupplyUnitsTracker:UnitRequestCrateLoading(groupID, crateType)
|
|||||||
---@field unit Unit
|
---@field unit Unit
|
||||||
---@field groupID number
|
---@field groupID number
|
||||||
---@field crateType CrateType
|
---@field crateType CrateType
|
||||||
|
---@field commandHelper MissionCommandsHelper
|
||||||
|
|
||||||
---@param params LoadCargoParams
|
---@param params LoadCargoParams
|
||||||
local LoadCrateTask = function(params)
|
local LoadCrateTask = function(params)
|
||||||
|
|
||||||
local loaded = params.self:TryLoadCrateInUnit(params.unit, params.crateType)
|
local loaded = params.self:TryLoadCrateInUnit(params.unit, params.crateType, params.commandHelper)
|
||||||
if loaded ~= false then
|
if loaded ~= false then
|
||||||
trigger.action.outTextForUnit(unit:getID(), "Loaded crate :" .. params.crateType, 10)
|
trigger.action.outTextForUnit(unit:getID(), "Loaded crate :" .. params.crateType, 10)
|
||||||
end
|
end
|
||||||
@@ -335,7 +367,8 @@ function SupplyUnitsTracker:UnitRequestCrateLoading(groupID, crateType)
|
|||||||
self = self,
|
self = self,
|
||||||
unit = unit,
|
unit = unit,
|
||||||
crateType = crateType,
|
crateType = crateType,
|
||||||
groupID = groupID
|
groupID = groupID,
|
||||||
|
commandHelper = missionCommandsHelper
|
||||||
}
|
}
|
||||||
|
|
||||||
timer.scheduleFunction(LoadCrateTask, params, timer.getTime() + 15)
|
timer.scheduleFunction(LoadCrateTask, params, timer.getTime() + 15)
|
||||||
@@ -346,8 +379,9 @@ end
|
|||||||
---comment
|
---comment
|
||||||
---@param unit Unit
|
---@param unit Unit
|
||||||
---@param crateType CrateType
|
---@param crateType CrateType
|
||||||
|
---@param commandHelper MissionCommandsHelper
|
||||||
---@return boolean
|
---@return boolean
|
||||||
function SupplyUnitsTracker:TryLoadCrateInUnit(unit, crateType)
|
function SupplyUnitsTracker:TryLoadCrateInUnit(unit, crateType, commandHelper)
|
||||||
|
|
||||||
local crateConfigA = SupplyConfigHelper.getSupplyConfig(crateType)
|
local crateConfigA = SupplyConfigHelper.getSupplyConfig(crateType)
|
||||||
if crateConfigA == nil then
|
if crateConfigA == nil then
|
||||||
@@ -381,7 +415,7 @@ function SupplyUnitsTracker:TryLoadCrateInUnit(unit, crateType)
|
|||||||
local group = unit:getGroup()
|
local group = unit:getGroup()
|
||||||
if group == nil then return false end
|
if group == nil then return false end
|
||||||
local groupID = group:getID()
|
local groupID = group:getID()
|
||||||
self._commandsHelper:updateCommandsForGroup(groupID)
|
commandHelper:updateCommandsForGroup(groupID)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@@ -412,19 +446,19 @@ end
|
|||||||
function SupplyUnitsTracker:GetCargoPlacePosition(unit)
|
function SupplyUnitsTracker:GetCargoPlacePosition(unit)
|
||||||
|
|
||||||
local pos = unit:getPosition()
|
local pos = unit:getPosition()
|
||||||
local preferedPos = {
|
local preferredPos = {
|
||||||
x = pos.p.x - 10 * pos.x.x,
|
x = pos.p.x - 10 * pos.x.x,
|
||||||
y = pos.p.y - 10 * pos.x.y,
|
y = pos.p.y - 10 * pos.x.y,
|
||||||
z = pos.p.z - 10 * pos.x.z
|
z = pos.p.z - 10 * pos.x.z
|
||||||
}
|
}
|
||||||
|
|
||||||
return preferedPos
|
return preferredPos
|
||||||
|
|
||||||
|
|
||||||
-- local volume = {
|
-- local volume = {
|
||||||
-- id = world.VolumeType.SPHERE,
|
-- id = world.VolumeType.SPHERE,
|
||||||
-- params = {
|
-- params = {
|
||||||
-- point = preferedPos,
|
-- point = preferredPos,
|
||||||
-- radius = 10
|
-- radius = 10
|
||||||
-- }
|
-- }
|
||||||
-- }
|
-- }
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ local MissionCommandsHelper = require("classes.stageClasses.helpers.MissionComma
|
|||||||
local GlobalConfig = require("classes.configuration.GlobalConfig")
|
local GlobalConfig = require("classes.configuration.GlobalConfig")
|
||||||
local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHelper")
|
local SupplyConfigHelper = require("classes.stageClasses.helpers.SupplyConfigHelper")
|
||||||
|
|
||||||
---@class BuildableMission : Mission, SupplyUnitSpawnedListener
|
---@class BuildableMission : Mission, SupplyUnitEventListener
|
||||||
---@field private _requiredKilos number
|
---@field private _requiredKilos number
|
||||||
---@field private _droppedKilos number
|
---@field private _droppedKilos number
|
||||||
---@field private _crateType SupplyType
|
---@field private _crateType SupplyType
|
||||||
|
|||||||
Reference in New Issue
Block a user