mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-21 11:53:30 +00:00
Warehouse
This commit is contained in:
@@ -3796,6 +3796,7 @@ function WAREHOUSE:onafterAddAsset(From, Event, To, group, ngroups, forceattribu
|
|||||||
asset.wid=self.uid
|
asset.wid=self.uid
|
||||||
|
|
||||||
-- No request associated with this asset.
|
-- No request associated with this asset.
|
||||||
|
env.info(string.format("FF asset=%s: setting rid=nil", asset.spawngroupname))
|
||||||
asset.rid=nil
|
asset.rid=nil
|
||||||
|
|
||||||
-- Asset is not spawned.
|
-- Asset is not spawned.
|
||||||
@@ -3819,7 +3820,7 @@ function WAREHOUSE:onafterAddAsset(From, Event, To, group, ngroups, forceattribu
|
|||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
-- Debug info.
|
-- Debug info.
|
||||||
self:_DebugMessage(string.format("Warehouse %s: Adding %d NEW assets of group %s to stock.", self.alias, n, tostring(group:GetName())), 5)
|
self:_DebugMessage(string.format("Warehouse %s: Adding %d NEW assets of group %s to stock", self.alias, n, tostring(group:GetName())), 5)
|
||||||
|
|
||||||
-- This is a group that is not in the db yet. Add it n times.
|
-- This is a group that is not in the db yet. Add it n times.
|
||||||
local assets=self:_RegisterAsset(group, n, forceattribute, forcecargobay, forceweight, loadradius, liveries, skill, assignment)
|
local assets=self:_RegisterAsset(group, n, forceattribute, forcecargobay, forceweight, loadradius, liveries, skill, assignment)
|
||||||
@@ -3844,11 +3845,11 @@ function WAREHOUSE:onafterAddAsset(From, Event, To, group, ngroups, forceattribu
|
|||||||
|
|
||||||
-- Destroy group if it is alive.
|
-- Destroy group if it is alive.
|
||||||
if group:IsAlive()==true then
|
if group:IsAlive()==true then
|
||||||
self:_DebugMessage(string.format("Removing group %s.", group:GetName()), 5)
|
self:_DebugMessage(string.format("Removing group %s", group:GetName()), 5)
|
||||||
-- Setting parameter to false, i.e. creating NO dead or remove unit event, seems to not confuse the dispatcher logic.
|
-- Setting parameter to false, i.e. creating NO dead or remove unit event, seems to not confuse the dispatcher logic.
|
||||||
-- Create a RemoveUnit event to let the FLIGHTCONTROL know, the parking is now free.
|
-- Create a RemoveUnit event to let the FLIGHTCONTROL know, the parking is now free.
|
||||||
-- TODO: Need to check if my above comment not to confuse the dispatcher logic is broken by this!
|
-- TODO: Need to check if my above comment not to confuse the dispatcher logic is broken by this!
|
||||||
group:Destroy()
|
group:Destroy(false)
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -4299,6 +4300,9 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request)
|
|||||||
|
|
||||||
local spawngroup=nil --Wrapper.Group#GROUP
|
local spawngroup=nil --Wrapper.Group#GROUP
|
||||||
|
|
||||||
|
-- Add asset by id to all assets table.
|
||||||
|
Request.assets[_assetitem.uid]=_assetitem
|
||||||
|
|
||||||
-- Spawn assets depending on type.
|
-- Spawn assets depending on type.
|
||||||
if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE then
|
if Request.transporttype==WAREHOUSE.TransportType.AIRPLANE then
|
||||||
|
|
||||||
@@ -4310,9 +4314,6 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request)
|
|||||||
-- Spawn helos at airport in controlled state. They need to fly to the spawn zone.
|
-- Spawn helos at airport in controlled state. They need to fly to the spawn zone.
|
||||||
spawngroup=self:_SpawnAssetAircraft(_alias,_assetitem, Request, Parking[_assetitem.uid], false)
|
spawngroup=self:_SpawnAssetAircraft(_alias,_assetitem, Request, Parking[_assetitem.uid], false)
|
||||||
|
|
||||||
-- Activate helo randomly within the next 10 seconds.
|
|
||||||
--spawngroup:StartUncontrolled(math.random(10))
|
|
||||||
|
|
||||||
elseif Request.transporttype==WAREHOUSE.TransportType.APC then
|
elseif Request.transporttype==WAREHOUSE.TransportType.APC then
|
||||||
|
|
||||||
-- Spawn APCs in spawn zone.
|
-- Spawn APCs in spawn zone.
|
||||||
@@ -4338,9 +4339,6 @@ function WAREHOUSE:onafterRequest(From, Event, To, Request)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Add asset by id to all assets table.
|
|
||||||
Request.assets[_assetitem.uid]=_assetitem
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Init problem table.
|
-- Init problem table.
|
||||||
@@ -5098,6 +5096,24 @@ function WAREHOUSE:onafterAirbaseRecaptured(From, Event, To, Coalition)
|
|||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- On before "AssetSpawned" event. Checks whether the asset was already set to "spawned" for groups with multiple units.
|
||||||
|
-- @param #WAREHOUSE self
|
||||||
|
-- @param #string From From state.
|
||||||
|
-- @param #string Event Event.
|
||||||
|
-- @param #string To To state.
|
||||||
|
-- @param Wrapper.Group#GROUP group The group spawned.
|
||||||
|
-- @param #WAREHOUSE.Assetitem asset The asset that is dead.
|
||||||
|
-- @param #WAREHOUSE.Pendingitem request The request of the dead asset.
|
||||||
|
function WAREHOUSE:onbeforeAssetSpawned(From, Event, To, group, asset, request)
|
||||||
|
if asset.spawned then
|
||||||
|
--return false
|
||||||
|
else
|
||||||
|
--return true
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
--- On after "AssetSpawned" event triggered when an asset group is spawned into the cruel world.
|
--- On after "AssetSpawned" event triggered when an asset group is spawned into the cruel world.
|
||||||
-- @param #WAREHOUSE self
|
-- @param #WAREHOUSE self
|
||||||
-- @param #string From From state.
|
-- @param #string From From state.
|
||||||
@@ -5107,28 +5123,33 @@ end
|
|||||||
-- @param #WAREHOUSE.Assetitem asset The asset that is dead.
|
-- @param #WAREHOUSE.Assetitem asset The asset that is dead.
|
||||||
-- @param #WAREHOUSE.Pendingitem request The request of the dead asset.
|
-- @param #WAREHOUSE.Pendingitem request The request of the dead asset.
|
||||||
function WAREHOUSE:onafterAssetSpawned(From, Event, To, group, asset, request)
|
function WAREHOUSE:onafterAssetSpawned(From, Event, To, group, asset, request)
|
||||||
local text=string.format("Asset %s from request id=%d was spawned!", asset.templatename, request.uid)
|
local text=string.format("Asset %s from request id=%d was spawned!", asset.spawngroupname, request.uid)
|
||||||
self:I(self.lid..text)
|
self:I(self.lid..text)
|
||||||
self:_DebugMessage(text)
|
|
||||||
|
|
||||||
-- Sete asset state to spawned.
|
-- Sete asset state to spawned.
|
||||||
asset.spawned=true
|
asset.spawned=true
|
||||||
|
|
||||||
-- Check if all assets groups are spawned and trigger events.
|
-- Check if all assets groups are spawned and trigger events.
|
||||||
local allspawned=true
|
local n=0
|
||||||
for _,_asset in pairs(request.assets) do
|
for _,_asset in pairs(request.assets) do
|
||||||
local assetitem=_asset --#WAREHOUSE.Assetitem
|
local assetitem=_asset --#WAREHOUSE.Assetitem
|
||||||
|
|
||||||
--self:I(string.format("FF Asset %s spawned %s as %s", assetitem.templatename, tostring(assetitem.spawned), tostring(assetitem.spawngroupname)))
|
self:I(string.format("FF Asset %s spawned %s as %s", assetitem.templatename, tostring(assetitem.spawned), tostring(assetitem.spawngroupname)))
|
||||||
|
|
||||||
if not assetitem.spawned then
|
if assetitem.spawned then
|
||||||
allspawned=false
|
n=n+1
|
||||||
|
else
|
||||||
|
self:E("FF What?! This should not happen!")
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Trigger event.
|
-- Trigger event.
|
||||||
if allspawned then
|
if n==request.nasset+request.ntransport then
|
||||||
|
env.info(string.format("All assets %d (ncargo=%d + ntransport=%d) of request rid=%d spawned. Calling RequestSpawned", n, request.nasset, request.ntransport, request.uid))
|
||||||
self:RequestSpawned(request, request.cargogroupset, request.transportgroupset)
|
self:RequestSpawned(request, request.cargogroupset, request.transportgroupset)
|
||||||
|
else
|
||||||
|
env.info(string.format("Not all assets %d (ncargo=%d + ntransport=%d) of request rid=%d spawned YET", n, request.nasset, request.ntransport, request.uid))
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -5443,10 +5464,14 @@ function WAREHOUSE:_SpawnAssetRequest(Request)
|
|||||||
|
|
||||||
-- Set request ID.
|
-- Set request ID.
|
||||||
asset.rid=Request.uid
|
asset.rid=Request.uid
|
||||||
|
env.info(string.format("FF asset=%s: setting rid=%s", asset.spawngroupname, tostring(asset.rid)))
|
||||||
|
|
||||||
-- Spawn group name.
|
-- Spawn group name.
|
||||||
local _alias=asset.spawngroupname
|
local _alias=asset.spawngroupname
|
||||||
|
|
||||||
|
--Request add asset by id.
|
||||||
|
Request.assets[asset.uid]=asset
|
||||||
|
|
||||||
-- Spawn an asset group.
|
-- Spawn an asset group.
|
||||||
local _group=nil --Wrapper.Group#GROUP
|
local _group=nil --Wrapper.Group#GROUP
|
||||||
if asset.category==Group.Category.GROUND then
|
if asset.category==Group.Category.GROUND then
|
||||||
@@ -5484,10 +5509,6 @@ function WAREHOUSE:_SpawnAssetRequest(Request)
|
|||||||
self:E(self.lid.."ERROR: Unknown asset category!")
|
self:E(self.lid.."ERROR: Unknown asset category!")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--Request add asset by id.
|
|
||||||
Request.assets[asset.uid]=asset
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@@ -6066,12 +6087,15 @@ function WAREHOUSE:_OnEventBirth(EventData)
|
|||||||
local wid,aid,rid=self:_GetIDsFromGroup(group)
|
local wid,aid,rid=self:_GetIDsFromGroup(group)
|
||||||
|
|
||||||
if wid==self.uid then
|
if wid==self.uid then
|
||||||
self:T(self.lid..string.format("Warehouse %s captured event birth of its asset unit %s.", self.alias, EventData.IniUnitName))
|
|
||||||
|
|
||||||
-- Get asset and request from id.
|
-- Get asset and request from id.
|
||||||
local asset=self:GetAssetByID(aid)
|
local asset=self:GetAssetByID(aid)
|
||||||
local request=self:GetRequestByID(rid)
|
local request=self:GetRequestByID(rid)
|
||||||
|
|
||||||
|
-- Debug message.
|
||||||
|
self:I(self.lid..string.format("Warehouse %s captured event birth of its asset unit %s. spawned=%s", self.alias, EventData.IniUnitName, tostring(asset.spawned)))
|
||||||
|
|
||||||
|
|
||||||
-- Birth is triggered for each unit. We need to make sure not to call this too often!
|
-- Birth is triggered for each unit. We need to make sure not to call this too often!
|
||||||
if not asset.spawned then
|
if not asset.spawned then
|
||||||
|
|
||||||
@@ -6095,7 +6119,8 @@ function WAREHOUSE:_OnEventBirth(EventData)
|
|||||||
group:SetState(group, "WAREHOUSE", self)
|
group:SetState(group, "WAREHOUSE", self)
|
||||||
|
|
||||||
-- Asset spawned FSM function.
|
-- Asset spawned FSM function.
|
||||||
self:__AssetSpawned(1, group, asset, request)
|
--self:__AssetSpawned(1, group, asset, request)
|
||||||
|
self:AssetSpawned(group, asset, request)
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -7787,10 +7812,10 @@ function WAREHOUSE:_GetIDsFromGroup(group)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Debug info
|
-- Debug info
|
||||||
self:T3(self.lid..string.format("Group Name = %s", tostring(name)))
|
self:T(self.lid..string.format("Group Name = %s", tostring(name)))
|
||||||
self:T3(self.lid..string.format("Warehouse ID = %s", tostring(wid)))
|
self:T(self.lid..string.format("Warehouse ID = %s", tostring(wid)))
|
||||||
self:T3(self.lid..string.format("Asset ID = %s", tostring(aid)))
|
self:T(self.lid..string.format("Asset ID = %s", tostring(aid)))
|
||||||
self:T3(self.lid..string.format("Request ID = %s", tostring(rid)))
|
self:T(self.lid..string.format("Request ID = %s", tostring(rid)))
|
||||||
|
|
||||||
return wid,aid,rid
|
return wid,aid,rid
|
||||||
else
|
else
|
||||||
@@ -8456,7 +8481,7 @@ function WAREHOUSE:_DebugMessage(text, duration)
|
|||||||
if duration>0 then
|
if duration>0 then
|
||||||
MESSAGE:New(text, duration):ToAllIf(self.Debug)
|
MESSAGE:New(text, duration):ToAllIf(self.Debug)
|
||||||
end
|
end
|
||||||
self:T(self.lid..text)
|
self:I(self.lid..text)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Error message. Message send to all (if duration > 0). Text self:E(text) added to DCS.log file.
|
--- Error message. Message send to all (if duration > 0). Text self:E(text) added to DCS.log file.
|
||||||
|
|||||||
@@ -1780,7 +1780,8 @@ function AUFTRAG:CountMissionTargets()
|
|||||||
local target=self.engageTarget.Target --Wrapper.Group#GROUP
|
local target=self.engageTarget.Target --Wrapper.Group#GROUP
|
||||||
|
|
||||||
local units=target:GetUnits()
|
local units=target:GetUnits()
|
||||||
for _,_unit in pairs(units) do
|
|
||||||
|
for _,_unit in pairs(units or {}) do
|
||||||
local unit=_unit --Wrapper.Unit#UNIT
|
local unit=_unit --Wrapper.Unit#UNIT
|
||||||
|
|
||||||
-- We check that unit is "alive" and has health >1. Somtimes units get heavily damanged but are still alive.
|
-- We check that unit is "alive" and has health >1. Somtimes units get heavily damanged but are still alive.
|
||||||
|
|||||||
@@ -3996,7 +3996,8 @@ function FLIGHTGROUP:_InitGroup()
|
|||||||
self.speedCruise=math.min(self.speedmax*0.7, speedCruiseLimit)
|
self.speedCruise=math.min(self.speedmax*0.7, speedCruiseLimit)
|
||||||
|
|
||||||
-- Initial fuel mass.
|
-- Initial fuel mass.
|
||||||
self.fuelmass=self.template.pylons.fuel
|
-- TODO: this is a unit property?
|
||||||
|
self.fuelmass=0 --self.template.pylons.fuel
|
||||||
|
|
||||||
self.traveldist=0
|
self.traveldist=0
|
||||||
self.position=self:GetCoordinate()
|
self.position=self:GetCoordinate()
|
||||||
|
|||||||
Reference in New Issue
Block a user