diff --git a/Moose Development/Moose/AI/AI_Cargo.lua b/Moose Development/Moose/AI/AI_Cargo.lua index 9b743d555..bdc33396a 100644 --- a/Moose Development/Moose/AI/AI_Cargo.lua +++ b/Moose Development/Moose/AI/AI_Cargo.lua @@ -354,8 +354,18 @@ function AI_CARGO:onafterPickedUp( Carrier, From, Event, To, PickupZone ) 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.Transporting = true + if HasCargo then + self.Transporting = true + end end @@ -466,8 +476,6 @@ end function AI_CARGO:onafterDeployed( Carrier, From, Event, To, DeployZone ) self:F( { Carrier, From, Event, To, DeployZone = DeployZone } ) - self:__Guard( 0.1 ) - self.Transporting = false end diff --git a/Moose Development/Moose/AI/AI_Cargo_APC.lua b/Moose Development/Moose/AI/AI_Cargo_APC.lua index f1e19b2d5..0ee079672 100644 --- a/Moose Development/Moose/AI/AI_Cargo_APC.lua +++ b/Moose Development/Moose/AI/AI_Cargo_APC.lua @@ -439,6 +439,21 @@ function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, De 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. diff --git a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua index 8081a88de..408fa515c 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua @@ -145,18 +145,6 @@ function AI_CARGO_AIRPLANE:New( Airplane, CargoSet ) 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. -- @param #AI_CARGO_AIRPLANE self -- @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 env.info("FF load airplane "..Airplane:GetName()) self:Load( self.PickupZone ) - self.RoutePickup = false - self.Relocating = true end -- Aircraft was send to this airbase to deploy troops. Initiate unloading. if self.RouteDeploy == true then self:Unload() self.RouteDeploy = false - self.Transporting = false - self.Relocating = false end end @@ -326,8 +310,7 @@ function AI_CARGO_AIRPLANE:onafterPickup( Airplane, From, Event, To, Coordinate, end - self.Transporting = false - self.Relocating = true + self:GetParent( self, AI_CARGO_AIRPLANE ).onafterPickup( self, Airplane, From, Event, To, Coordinate, Speed, PickupZone ) else env.info("FF onafterpick aircraft not alive") end @@ -364,30 +347,12 @@ function AI_CARGO_AIRPLANE:onafterDeploy( Airplane, From, Event, To, Coordinate, -- Set destination airbase for next :Route() command. self.Airbase = Airbase - self.Transporting = true - self.Relocating = false + self:GetParent( self, AI_CARGO_AIRPLANE ).onafterDeploy( self, Airplane, From, Event, To, Coordinate, Speed, DeployZone ) 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. -- @param #AI_CARGO_AIRPLANE self -- @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. -- @param #AI_CARGO_AIRPLANE self @@ -510,3 +459,29 @@ function AI_CARGO_AIRPLANE:Route( Airplane, Airbase, Speed, Uncontrolled ) 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 \ No newline at end of file diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua index 1df08d56f..6193c1bc1 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher_Airplane.lua @@ -13,7 +13,8 @@ -- -- @module AI.AI_Cargo_Dispatcher_Airplane -- @image AI_Cargo_Dispatching_For_Airplanes.JPG --- + + --- @type AI_CARGO_DISPATCHER_AIRPLANE -- @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 - self:SetDeploySpeed( 200, 150 ) - self:SetPickupSpeed( 200, 150 ) + self:SetDeploySpeed( 1200, 600 ) + self:SetPickupSpeed( 1200, 600 ) self:SetPickupRadius( 0, 0 ) self:SetDeployRadius( 0, 0 ) diff --git a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua index 284000275..0a71e9250 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Helicopter.lua @@ -176,16 +176,6 @@ function AI_CARGO_HELICOPTER:New( Helicopter, CargoSet ) return self end -function AI_CARGO_HELICOPTER:IsTransporting() - - return self.Transporting == true -end - -function AI_CARGO_HELICOPTER:IsRelocating() - - return self.Relocating == true -end - --- Set the Carrier. -- @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. -- @param #AI_CARGO_HELICOPTER self -- @param Wrapper.Group#GROUP Helicopter @@ -440,7 +403,8 @@ function AI_CARGO_HELICOPTER:onafterDeployed( Helicopter, From, Event, To, Deplo end, Helicopter ) - self.Transporting = false + self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeployed( self, Helicopter, From, Event, To, DeployZone ) + end @@ -506,8 +470,8 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin self.PickupZone = PickupZone - self.Relocating = true - self.Transporting = false + self:GetParent( self, AI_CARGO_HELICOPTER ).onafterPickup( self, Helicopter, From, Event, To, Coordinate, Speed, PickupZone ) + end end @@ -584,8 +548,7 @@ function AI_CARGO_HELICOPTER:onafterDeploy( Helicopter, From, Event, To, Coordin -- Now route the helicopter Helicopter:Route( Route, 0 ) - self.Relocating = false - self.Transporting = true + self:GetParent( self, AI_CARGO_HELICOPTER ).onafterDeploy( self, Helicopter, From, Event, To, Coordinate, Speed, DeployZone ) end end