Improvements to cargo AI handling.

This commit is contained in:
FlightControl 2018-09-18 13:49:37 +02:00
parent 02aff87b9f
commit 08fffb9004
5 changed files with 63 additions and 101 deletions

View File

@ -354,8 +354,18 @@ function AI_CARGO:onafterPickedUp( Carrier, From, Event, To, PickupZone )
Carrier:RouteResume() Carrier:RouteResume()
local HasCargo = false
if Carrier and Carrier :IsAlive() then
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
HasCargo = true
break
end
end
self.Relocating = false self.Relocating = false
self.Transporting = true if HasCargo then
self.Transporting = true
end
end end
@ -466,8 +476,6 @@ end
function AI_CARGO:onafterDeployed( Carrier, From, Event, To, DeployZone ) function AI_CARGO:onafterDeployed( Carrier, From, Event, To, DeployZone )
self:F( { Carrier, From, Event, To, DeployZone = DeployZone } ) self:F( { Carrier, From, Event, To, DeployZone = DeployZone } )
self:__Guard( 0.1 )
self.Transporting = false self.Transporting = false
end end

View File

@ -439,6 +439,21 @@ function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, De
end end
--- On after Deployed event.
-- @param #AI_CARGO_APC self
-- @param Wrapper.Group#GROUP Carrier
-- @param #string From From state.
-- @param #string Event Event.
-- @param #string To To state.
-- @param Core.Zone#ZONE DeployZone The zone wherein the cargo is deployed. This can be any zone type, like a ZONE, ZONE_GROUP, ZONE_AIRBASE.
function AI_CARGO_APC:onafterDeployed( APC, From, Event, To, DeployZone )
self:F( { APC, From, Event, To, DeployZone = DeployZone } )
self:__Guard( 0.1 )
self:GetParent( self, AI_CARGO_APC ).onafterDeployed( self, APC, From, Event, To, DeployZone )
end
--- On after Home event. --- On after Home event.

View File

@ -145,18 +145,6 @@ function AI_CARGO_AIRPLANE:New( Airplane, CargoSet )
end end
function AI_CARGO_AIRPLANE:IsTransporting()
return self.Transporting == true
end
function AI_CARGO_AIRPLANE:IsRelocating()
return self.Relocating == true
end
--- Set the Carrier (controllable). Also initializes events for carrier and defines the coalition. --- Set the Carrier (controllable). Also initializes events for carrier and defines the coalition.
-- @param #AI_CARGO_AIRPLANE self -- @param #AI_CARGO_AIRPLANE self
-- @param Wrapper.Group#GROUP Airplane Transport plane. -- @param Wrapper.Group#GROUP Airplane Transport plane.
@ -253,16 +241,12 @@ function AI_CARGO_AIRPLANE:onafterLanded( Airplane, From, Event, To )
if self.RoutePickup == true then if self.RoutePickup == true then
env.info("FF load airplane "..Airplane:GetName()) env.info("FF load airplane "..Airplane:GetName())
self:Load( self.PickupZone ) self:Load( self.PickupZone )
self.RoutePickup = false
self.Relocating = true
end end
-- Aircraft was send to this airbase to deploy troops. Initiate unloading. -- Aircraft was send to this airbase to deploy troops. Initiate unloading.
if self.RouteDeploy == true then if self.RouteDeploy == true then
self:Unload() self:Unload()
self.RouteDeploy = false self.RouteDeploy = false
self.Transporting = false
self.Relocating = false
end end
end end
@ -326,8 +310,7 @@ function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate,
end end
self.Transporting = false self:GetParent( self, AI_CARGO_AIRPLANE ).onafterPickup( self, Airplane, From, Event, To, Coordinate, Speed, PickupZone )
self.Relocating = true
else else
env.info("FF onafterpick aircraft not alive") env.info("FF onafterpick aircraft not alive")
end end
@ -364,30 +347,12 @@ function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate,
-- Set destination airbase for next :Route() command. -- Set destination airbase for next :Route() command.
self.Airbase = Airbase self.Airbase = Airbase
self.Transporting = true self:GetParent( self, AI_CARGO_AIRPLANE ).onafterDeploy( self, Airplane, From, Event, To, Coordinate, Speed, DeployZone )
self.Relocating = false
end end
end end
--- On after PickedUp event. All cargo is inside the carrier and ready to be transported.
-- @param #AI_CARGO_AIRPLANE self
-- @param Wrapper.Group#GROUP Airplane Cargo transport plane.
-- @param #string From From state.
-- @param #string Event Event.
-- @param #string To To state.
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
function AI_CARGO_AIRPLANE:onafterPickedUp( Airplane, From, Event, To, PickupZone )
self:F( { AirplaneGroup, From, Event, To } )
if Airplane and Airplane:IsAlive() then
self.Transporting = true -- This will only be executed when there is no cargo boarded anymore. The dispatcher will then kick-off the deploy cycle!
end
end
--- On after Unload event. Cargo is beeing unloaded, i.e. the unboarding process is started. --- On after Unload event. Cargo is beeing unloaded, i.e. the unboarding process is started.
-- @param #AI_CARGO_AIRPLANE self -- @param #AI_CARGO_AIRPLANE self
-- @param Wrapper.Group#GROUP Airplane Cargo transport plane. -- @param Wrapper.Group#GROUP Airplane Cargo transport plane.
@ -422,22 +387,6 @@ end
--- On after Deployed event.
-- @param #AI_CARGO_AIRPLANE self
-- @param Wrapper.Group#GROUP Airplane Cargo transport plane.
-- @param #string From From state.
-- @param #string Event Event.
-- @param #string To To state.
-- @param Cargo.Cargo#CARGO Cargo
function AI_CARGO_AIRPLANE:onafterDeployed( Airplane, From, Event, To, DeployZone )
if Airplane and Airplane:IsAlive() then
self.Transporting = false -- This will only be executed when there is no cargo onboard anymore. The dispatcher will then kick-off the pickup cycle!
end
end
--- Route the airplane from one airport or it's current position to another airbase. --- Route the airplane from one airport or it's current position to another airbase.
-- @param #AI_CARGO_AIRPLANE self -- @param #AI_CARGO_AIRPLANE self
@ -510,3 +459,29 @@ function AI_CARGO_AIRPLANE:Route( Airplane, Airbase, Speed, Uncontrolled )
end end
end end
end end
--- On after Home event. Aircraft will be routed to their home base.
-- @param #AI_CARGO_AIRPLANE self
-- @param Wrapper.Group#GROUP Airplane The cargo plane.
-- @param From From state.
-- @param Event Event.
-- @param To To State.
-- @param Core.Point#COORDINATE Coordinate Home place (not used).
-- @param #number Speed Speed in km/h to fly to the home airbase (zone). Default is 80% of max possible speed the unit can go.
-- @param Core.Zone#ZONE_AIRBASE HomeZone The home airbase (zone) where the plane should return to.
function AI_CARGO_AIRPLANE:onafterHome(Airplane, From, Event, To, Coordinate, Speed, HomeZone )
if Airplane and Airplane:IsAlive() then
-- We are going home!
self.RouteHome = true
-- Home Base.
local HomeBase=HomeZone:GetAirbase()
self.Airbase=HomeBase
-- Now route the airplane home
self:Route(Airplane, HomeBase, Speed)
end
end

View File

@ -13,7 +13,8 @@
-- --
-- @module AI.AI_Cargo_Dispatcher_Airplane -- @module AI.AI_Cargo_Dispatcher_Airplane
-- @image AI_Cargo_Dispatching_For_Airplanes.JPG -- @image AI_Cargo_Dispatching_For_Airplanes.JPG
--
--- @type AI_CARGO_DISPATCHER_AIRPLANE --- @type AI_CARGO_DISPATCHER_AIRPLANE
-- @extends AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER -- @extends AI.AI_Cargo_Dispatcher#AI_CARGO_DISPATCHER
@ -62,8 +63,8 @@ function AI_CARGO_DISPATCHER_AIRPLANE:New( AirplaneSet, CargoSet, PickupZoneSet,
local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:NewWithZones( AirplaneSet, CargoSet, PickupZoneSet, DeployZoneSet ) ) -- #AI_CARGO_DISPATCHER_AIRPLANE local self = BASE:Inherit( self, AI_CARGO_DISPATCHER:NewWithZones( AirplaneSet, CargoSet, PickupZoneSet, DeployZoneSet ) ) -- #AI_CARGO_DISPATCHER_AIRPLANE
self:SetDeploySpeed( 200, 150 ) self:SetDeploySpeed( 1200, 600 )
self:SetPickupSpeed( 200, 150 ) self:SetPickupSpeed( 1200, 600 )
self:SetPickupRadius( 0, 0 ) self:SetPickupRadius( 0, 0 )
self:SetDeployRadius( 0, 0 ) self:SetDeployRadius( 0, 0 )

View File

@ -176,16 +176,6 @@ function AI_CARGO_HELICOPTER:New( Helicopter, CargoSet )
return self return self
end end
function AI_CARGO_HELICOPTER:IsTransporting()
return self.Transporting == true
end
function AI_CARGO_HELICOPTER:IsRelocating()
return self.Relocating == true
end
--- Set the Carrier. --- Set the Carrier.
-- @param #AI_CARGO_HELICOPTER self -- @param #AI_CARGO_HELICOPTER self
@ -392,33 +382,6 @@ end
--- On after PickedUp event, raised when all cargo has been loaded into the CarrierGroup.
-- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter
-- @param #string From From state.
-- @param #string Event Event.
-- @param #string To To state.
-- @param Cargo.Cargo#CARGO Cargo Cargo object.
-- @return #boolean Cargo is loaded.
-- @param Core.Zone#ZONE PickupZone (optional) The zone where the cargo will be picked up. The PickupZone can be nil, if there wasn't any PickupZoneSet provided.
function AI_CARGO_HELICOPTER:onafterPickedUp( Helicopter, From, Event, To, PickupZone )
self:F( { Helicopter, From, Event, To } )
local HasCargo = false
if Helicopter and Helicopter:IsAlive() then
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
HasCargo = true
break
end
self.Relocating = false
if HasCargo then
self.Transporting = true
end
end
end
--- On after Deployed event. --- On after Deployed event.
-- @param #AI_CARGO_HELICOPTER self -- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter -- @param Wrapper.Group#GROUP Helicopter
@ -440,7 +403,8 @@ function AI_CARGO_HELICOPTER:onafterDeployed( Helicopter, From, Event, To, Deplo
end, Helicopter end, Helicopter
) )
self.Transporting = false self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeployed( self, Helicopter, From, Event, To, DeployZone )
end end
@ -506,8 +470,8 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin
self.PickupZone = PickupZone self.PickupZone = PickupZone
self.Relocating = true self:GetParent( self, AI_CARGO_HELICOPTER ).onafterPickup( self, Helicopter, From, Event, To, Coordinate, Speed, PickupZone )
self.Transporting = false
end end
end end
@ -584,8 +548,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin
-- Now route the helicopter -- Now route the helicopter
Helicopter:Route( Route, 0 ) Helicopter:Route( Route, 0 )
self.Relocating = false self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeploy( self, Helicopter, From, Event, To, Coordinate, Speed, DeployZone )
self.Transporting = true
end end
end end