From 4d7812b368eaf7453c951a7a4a8bfb5fe7bdd891 Mon Sep 17 00:00:00 2001 From: FlightControl Date: Mon, 13 Aug 2018 21:42:44 +0200 Subject: [PATCH] Working version for airplanes, now need to debug to make it also happen for helicopters and apcs --- .../Moose/AI/AI_Cargo_Airplane.lua | 35 ++++++++++++++++--- .../Moose/AI/AI_Cargo_Dispatcher.lua | 2 +- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua index 75f3f2873..8cacb48ea 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Airplane.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Airplane.lua @@ -42,7 +42,7 @@ function AI_CARGO_AIRPLANE:New( Airplane, CargoSet ) self:AddTransition( "Boarding", "Loaded", "Loaded" ) self:AddTransition( "Loaded", "Unload", "Unboarding" ) self:AddTransition( "Unboarding", "Unboard", "Unboarding" ) - self:AddTransition( "Unboarding", "Unloaded", "Unloaded" ) + self:AddTransition( "Unboarding" , "Unloaded", "Unloaded" ) self:AddTransition( "*", "Landed", "*" ) self:AddTransition( "*", "Home" , "*" ) @@ -469,7 +469,15 @@ function AI_CARGO_AIRPLANE:onafterUnload( Airplane, From, Event, To ) if Airplane and Airplane:IsAlive() then local Cargos = Airplane:GetCargo() for CargoID, Cargo in pairs( Cargos ) do - Cargo:UnBoard() + + local Angle = 180 + local CargoCarrierHeading = Airplane:GetHeading() -- Get Heading of object in degrees. + local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle ) + self:T( { CargoCarrierHeading, CargoDeployHeading } ) + local CargoDeployCoordinate = Airplane:GetPointVec2():Translate( 150, CargoDeployHeading ) + + Cargo:UnBoard( CargoDeployCoordinate ) + Cargo:SetDeployed( true ) self:__Unboard( 10, Cargo ) end end @@ -484,14 +492,30 @@ end -- @param #string To To state. function AI_CARGO_AIRPLANE:onafterUnboard( Airplane, From, Event, To, Cargo ) + self:E( { "Unboard", Cargo } ) + if Airplane and Airplane:IsAlive() then if not Cargo:IsUnLoaded() then self:__Unboard( 10, Cargo ) else + local Cargos = Airplane:GetCargo() + for CargoID, Cargo in pairs( Cargos ) do + if Cargo:IsLoaded() then + local Angle = 180 + local CargoCarrierHeading = Airplane:GetHeading() -- Get Heading of object in degrees. + local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle ) + self:T( { CargoCarrierHeading, CargoDeployHeading } ) + local CargoDeployCoordinate = Airplane:GetPointVec2():Translate( 150, CargoDeployHeading ) + Cargo:UnBoard( CargoDeployCoordinate ) + Cargo:SetDeployed( true ) + + self:__Unboard( 10, Cargo ) + return + end + end self:__Unloaded( 1, Cargo ) end end - end --- On after Unloaded event. Cargo has been unloaded, i.e. the unboarding process is finished. @@ -500,12 +524,15 @@ end -- @param #string From From state. -- @param #string Event Event. -- @param #string To To state. +-- @param Cargo.Cargo#CARGO Cargo function AI_CARGO_AIRPLANE:onafterUnloaded( Airplane, From, Event, To, Cargo ) + self:E( { "Unloaded", Cargo } ) + if Airplane and Airplane:IsAlive() then self.Airplane = Airplane + 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. diff --git a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua index c7a0ea4b9..c19d760a8 100644 --- a/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua +++ b/Moose Development/Moose/AI/AI_Cargo_Dispatcher.lua @@ -414,7 +414,7 @@ function AI_CARGO_DISPATCHER:onafterMonitor() for CargoName, Cargo in pairs( self.SetCargo:GetSet() ) do local Cargo = Cargo -- Cargo.Cargo#CARGO self:F( { Cargo = Cargo:GetName(), UnLoaded = Cargo:IsUnLoaded(), Deployed = Cargo:IsDeployed(), PickupCargo = self.PickupCargo[Carrier] ~= nil } ) - if Cargo:IsUnLoaded() and not Cargo:IsDeployed() then + if Cargo:IsUnLoaded() == true and Cargo:IsDeployed() == false then local CargoCoordinate = Cargo:GetCoordinate() local CoordinateFree = true for CarrierPickup, Coordinate in pairs( self.PickupCargo ) do