mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
OPS Cargo
This commit is contained in:
parent
0933eef4c3
commit
016198e7f2
@ -1424,6 +1424,7 @@ end
|
||||
-- @param #DATABASE self
|
||||
-- @param Ops.OpsGroup#OPSGROUP opsgroup The OPS group added to the DB.
|
||||
function DATABASE:AddOpsGroup(opsgroup)
|
||||
env.info("Adding OPSGROUP "..tostring(opsgroup.groupname))
|
||||
self.FLIGHTGROUPS[opsgroup.groupname]=opsgroup
|
||||
end
|
||||
|
||||
@ -1439,6 +1440,7 @@ function DATABASE:GetOpsGroup(groupname)
|
||||
groupname=groupname:GetName()
|
||||
end
|
||||
|
||||
env.info("Getting OPSGROUP "..tostring(groupname))
|
||||
return self.FLIGHTGROUPS[groupname]
|
||||
end
|
||||
|
||||
|
||||
@ -171,6 +171,9 @@ function ARMYGROUP:New(group)
|
||||
|
||||
-- Start check zone timer.
|
||||
self.timerCheckZone=TIMER:New(self._CheckInZones, self):Start(2, 30)
|
||||
|
||||
-- Add OPSGROUP to _DATABASE.
|
||||
_DATABASE:AddOpsGroup(self)
|
||||
|
||||
return self
|
||||
end
|
||||
@ -477,22 +480,24 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
|
||||
if self.cargoTransport then
|
||||
|
||||
local text=string.format("Cargo: %s %s --> %s", self.carrierStatus, self.cargoTransport.pickupzone:GetName(), self.cargoTransport.deployzone:GetName())
|
||||
|
||||
-- Debug
|
||||
local text=string.format("Carrier [%s]: %s --> %s", self.carrierStatus, self.cargoTransport.pickupzone:GetName(), self.cargoTransport.deployzone:GetName())
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --Ops.OpsGroup#OPSGROUP.CargoGroup
|
||||
local name=cargo.opsgroup:GetName()
|
||||
local gstatus=cargo.opsgroup:GetState()
|
||||
local cstatus=cargo.opsgroup.cargoStatus
|
||||
text=text..string.format("\n- %s [%s]: %s", name, gstatus, cstatus)
|
||||
end
|
||||
|
||||
text=text..string.format("\n- %s [%s]: %s", name, gstatus, cstatus)
|
||||
--self:I({template=cargo.opsgroup.template})
|
||||
end
|
||||
self:I(self.lid..text)
|
||||
|
||||
|
||||
if self:IsNotCarrier() then
|
||||
|
||||
env.info("FF not carrier ==> pickup")
|
||||
|
||||
--TODO: Check if there is still cargo left. Maybe someone else already picked it up or it got destroyed.
|
||||
|
||||
-- Initiate the cargo transport process.
|
||||
self:Pickup(self.cargoTransport.pickupzone)
|
||||
@ -500,6 +505,8 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
elseif self:IsPickingup() then
|
||||
|
||||
env.info("FF picking up")
|
||||
|
||||
--TODO: Check if there is still cargo left. Maybe someone else already picked it up or it got destroyed.
|
||||
|
||||
elseif self:IsLoading() then
|
||||
|
||||
@ -509,7 +516,7 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --Ops.OpsGroup#OPSGROUP.CargoGroup
|
||||
|
||||
if cargo.opsgroup.carrierGroup:GetName()==self:GetName() and cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.BOARDING then
|
||||
if cargo.opsgroup.carrierGroup and cargo.opsgroup.carrierGroup:GetName()==self:GetName() and cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.BOARDING then
|
||||
boarding=true
|
||||
end
|
||||
|
||||
@ -523,15 +530,32 @@ function ARMYGROUP:onafterStatus(From, Event, To)
|
||||
|
||||
elseif self:IsLoaded() then
|
||||
|
||||
env.info("FF loaded")
|
||||
env.info("FF loaded (nothing to do?)")
|
||||
|
||||
elseif self:IsTransporting() then
|
||||
|
||||
env.info("FF transporting")
|
||||
env.info("FF transporting (nothing to do)")
|
||||
|
||||
elseif self:IsUnloading() then
|
||||
|
||||
env.info("FF unloading")
|
||||
env.info("FF unloading ==> Checking if all cargo was delivered")
|
||||
|
||||
local delivered=true
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --Ops.OpsGroup#OPSGROUP.CargoGroup
|
||||
|
||||
if (cargo.opsgroup.carrierGroup and cargo.opsgroup.carrierGroup:GetName()==self:GetName()) and not cargo.delivered then
|
||||
delivered=false
|
||||
break
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
-- Boarding finished ==> Transport cargo.
|
||||
if delivered then
|
||||
env.info("FF unloading finished ==> Unloaded")
|
||||
self:Unloaded()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
@ -332,6 +332,9 @@ function FLIGHTGROUP:New(group)
|
||||
-- Start check zone timer.
|
||||
self.timerCheckZone=TIMER:New(self._CheckInZones, self):Start(3, 10)
|
||||
|
||||
-- Add OPSGROUP to _DATABASE.
|
||||
_DATABASE:AddOpsGroup(self)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@ -2603,9 +2606,7 @@ function FLIGHTGROUP:onafterStop(From, Event, To)
|
||||
|
||||
-- Call OPSGROUP function.
|
||||
self:GetParent(self).onafterStop(self, From, Event, To)
|
||||
|
||||
-- Remove flight from data base.
|
||||
_DATABASE.FLIGHTGROUPS[self.groupname]=nil
|
||||
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@ -188,6 +188,9 @@ function NAVYGROUP:New(group)
|
||||
|
||||
-- Start check zone timer.
|
||||
self.timerCheckZone=TIMER:New(self._CheckInZones, self):Start(2, 60)
|
||||
|
||||
-- Add OPSGROUP to _DATABASE.
|
||||
_DATABASE:AddOpsGroup(self)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
@ -410,6 +410,7 @@ OPSGROUP.CargoStatus={
|
||||
-- @field #string status Status of the cargo group. See @{#OPSGROUP.CargoStatus}.
|
||||
-- @field Core.Zone#ZONE pickupzone Zone where the cargo is picked up.
|
||||
-- @field Core.Zone#ZONE deployzone Zone where the cargo is dropped off.
|
||||
-- @field #boolean delivered If true, group was delivered.
|
||||
|
||||
--- OpsGroup version.
|
||||
-- @field #string version
|
||||
@ -555,6 +556,7 @@ function OPSGROUP:New(group)
|
||||
self:AddTransition("*", "Loaded", "*") -- Carrier loaded all assigned cargo into carrier.
|
||||
self:AddTransition("*", "Transport", "*") -- Carrier is transporting cargo.
|
||||
self:AddTransition("*", "Deploy", "*") -- Carrier is dropping off cargo.
|
||||
self:AddTransition("*", "Unloaded", "*") -- Carrier unloaded all its cargo.
|
||||
|
||||
------------------------
|
||||
--- Pseudo Functions ---
|
||||
@ -581,7 +583,7 @@ function OPSGROUP:New(group)
|
||||
|
||||
|
||||
-- Add to data base.
|
||||
_DATABASE:AddOpsGroup(self)
|
||||
--_DATABASE:AddOpsGroup(self)
|
||||
|
||||
return self
|
||||
end
|
||||
@ -4419,8 +4421,11 @@ function OPSGROUP:onafterStop(From, Event, To)
|
||||
self:E(self.lid..text)
|
||||
end
|
||||
|
||||
-- Remove flight from data base.
|
||||
_DATABASE.FLIGHTGROUPS[self.groupname]=nil
|
||||
|
||||
-- Debug output.
|
||||
self:I(self.lid.."STOPPED! Unhandled events, cleared scheduler and removed from database.")
|
||||
self:I(self.lid.."STOPPED! Unhandled events, cleared scheduler and removed from database")
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
@ -4496,12 +4501,13 @@ function OPSGROUP:CreateCargoGroupData(group, Pickupzone, Deployzone)
|
||||
else
|
||||
opsgroup=ARMYGROUP:New(group)
|
||||
end
|
||||
|
||||
else
|
||||
env.info("FF found opsgroup in createcargo")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
local cargo={} --#OPSGROUP.Cargo
|
||||
local cargo={} --#OPSGROUP.CargoGroup
|
||||
|
||||
cargo.opsgroup=opsgroup
|
||||
cargo.status="Unknown"
|
||||
@ -4631,22 +4637,29 @@ function OPSGROUP:onafterLoading(From, Event, To)
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --#OPSGROUP.CargoGroup
|
||||
|
||||
local weight=cargo.opsgroup:GetWeightTotal()
|
||||
if not cargo.delivered then
|
||||
|
||||
local carrier=_findCarrier(weight)
|
||||
|
||||
if carrier then
|
||||
|
||||
-- Set cargo status.
|
||||
cargo.opsgroup.cargoStatus=OPSGROUP.CargoStatus.ASSIGNED
|
||||
|
||||
-- Order cargo group to board the carrier.
|
||||
env.info("FF order group to board carrier")
|
||||
cargo.opsgroup:Board(self, carrier)
|
||||
local weight=cargo.opsgroup:GetWeightTotal()
|
||||
|
||||
else
|
||||
|
||||
env.info("FF cannot board carrier")
|
||||
local carrier=_findCarrier(weight)
|
||||
|
||||
if carrier then
|
||||
|
||||
-- Set cargo status.
|
||||
cargo.opsgroup.cargoStatus=OPSGROUP.CargoStatus.ASSIGNED
|
||||
|
||||
-- Order cargo group to board the carrier.
|
||||
env.info("FF order group to board carrier")
|
||||
cargo.opsgroup:Board(self, carrier)
|
||||
|
||||
--TODO: only one group for testing
|
||||
break
|
||||
|
||||
else
|
||||
|
||||
env.info("FF cannot board carrier")
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
@ -4744,26 +4757,33 @@ end
|
||||
function OPSGROUP:onafterDeploy(From, Event, To, Zone)
|
||||
env.info("FF deploy at zone ".. (Zone and Zone:GetName() or "Not given!"))
|
||||
|
||||
-- Set carrier status to UNLOADING.
|
||||
self.carrierStatus=OPSGROUP.CarrierStatus.UNLOADING
|
||||
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --#OPSGROUP.CargoGroup
|
||||
|
||||
env.info("FF deploy cargo "..cargo.opsgroup:GetName())
|
||||
|
||||
local zone=Zone or cargo.deployzone --Core.Zone#ZONE
|
||||
if cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.LOADED and cargo.opsgroup.carrierGroup:GetName()==self.groupname then
|
||||
|
||||
--if zone:IsCoordinateInZone(self:GetCoordinate()) then
|
||||
|
||||
local Coordinate=zone:GetRandomCoordinate()
|
||||
local Heading=math.random(0,359)
|
||||
env.info("FF deploy cargo "..cargo.opsgroup:GetName())
|
||||
|
||||
local zone=Zone or cargo.deployzone --Core.Zone#ZONE
|
||||
|
||||
-- Unload.
|
||||
env.info("FF unload cargo "..cargo.opsgroup:GetName())
|
||||
cargo.opsgroup:Unboard(Coordinate, Heading)
|
||||
--self:Unload(cargo.opsgroup, Coordinate, Heading)
|
||||
|
||||
--end
|
||||
--if zone:IsCoordinateInZone(self:GetCoordinate()) then
|
||||
|
||||
local Coordinate=zone:GetRandomCoordinate()
|
||||
local Heading=math.random(0,359)
|
||||
|
||||
cargo.delivered=true
|
||||
|
||||
-- Unload.
|
||||
env.info("FF unload cargo "..cargo.opsgroup:GetName())
|
||||
cargo.opsgroup:Unboard(Coordinate, Heading)
|
||||
--self:Unload(cargo.opsgroup, Coordinate, Heading)
|
||||
|
||||
--end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -4786,6 +4806,46 @@ function OPSGROUP:onafterUnload(From, Event, To, CargoGroup, Coordinate, Heading
|
||||
|
||||
end
|
||||
|
||||
--- On after "Unloaded" event.
|
||||
-- @param #OPSGROUP self
|
||||
-- @param #string From From state.
|
||||
-- @param #string Event Event.
|
||||
-- @param #string To To state.
|
||||
-- @param Core.Zone#ZONE Zone Deploy zone.
|
||||
function OPSGROUP:onafterUnloaded(From, Event, To)
|
||||
env.info("FF unloaded")
|
||||
|
||||
local pickup=false
|
||||
for _,_cargo in pairs(self.cargoTransport.cargos) do
|
||||
local cargo=_cargo --Ops.OpsGroup#OPSGROUP.CargoGroup
|
||||
|
||||
-- Check for waiting or undelivered non cargo groups.
|
||||
--if cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.WAITING or (cargo.opsgroup.cargoStatus==OPSGROUP.CargoStatus.NOTCARGO and not cargo.delivered) then
|
||||
if not cargo.delivered then
|
||||
pickup=true
|
||||
break
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if pickup then
|
||||
|
||||
env.info("FF cargo left ==> pickup")
|
||||
self:Pickup(self.cargoTransport.pickupzone)
|
||||
|
||||
else
|
||||
|
||||
-- No current transport assignment.
|
||||
self.cargoTransport=nil
|
||||
|
||||
env.info("FF all delivered ==> check group done")
|
||||
self:_CheckGroupDone()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
---
|
||||
-- Cargo Group Functions
|
||||
---
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user