# Conflicts:

#	Moose Development/Moose/AI/AI_Cargo_APC.lua
#	Moose Development/Moose/Wrapper/Controllable.lua
This commit is contained in:
FlightControl_Master 2018-05-06 07:36:58 +02:00
parent 810d900d7e
commit 19b3dcec21
3 changed files with 90 additions and 27 deletions

View File

@ -395,7 +395,7 @@ function AI_CARGO_APC:onbeforeLoad( APC, From, Event, To )
local APCUnit = APCUnit -- Wrapper.Unit#UNIT local APCUnit = APCUnit -- Wrapper.Unit#UNIT
for _, Cargo in pairs( self.CargoSet:GetSet() ) do for _, Cargo in pairs( self.CargoSet:GetSet() ) do
local Cargo = Cargo -- Cargo.Cargo#CARGO local Cargo = Cargo -- Cargo.Cargo#CARGO
self:F( { IsUnLoaded = Cargo:IsUnLoaded() } ) self:F( { IsUnLoaded = Cargo:IsUnLoaded(), Cargo:GetName(), APC:GetName() } )
if Cargo:IsUnLoaded() then if Cargo:IsUnLoaded() then
if Cargo:IsInLoadRadius( APCUnit:GetCoordinate() ) then if Cargo:IsInLoadRadius( APCUnit:GetCoordinate() ) then
self:F( { "In radius", APCUnit:GetName() } ) self:F( { "In radius", APCUnit:GetName() } )
@ -420,12 +420,12 @@ function AI_CARGO_APC:onbeforeLoad( APC, From, Event, To )
end end
--- @param #AI_CARGO_APC self --- @param #AI_CARGO_APC self
-- @param Wrapper.Group#GROUP Carrier -- @param Wrapper.Group#GROUP APC
function AI_CARGO_APC:onafterBoard( Carrier, From, Event, To, Cargo ) function AI_CARGO_APC:onafterBoard( APC, From, Event, To, Cargo )
self:F( { Carrier, From, Event, To, Cargo } ) self:F( { APC, From, Event, To, Cargo } )
if Carrier and Carrier:IsAlive() then if APC and APC:IsAlive() then
self:F({ IsLoaded = Cargo:IsLoaded() } ) self:F({ IsLoaded = Cargo:IsLoaded(), Cargo:GetName(), APC:GetName() } )
if not Cargo:IsLoaded() then if not Cargo:IsLoaded() then
self:__Board( 10, Cargo ) self:__Board( 10, Cargo )
else else
@ -445,7 +445,7 @@ function AI_CARGO_APC:onbeforeLoaded( APC, From, Event, To )
if APC and APC:IsAlive() then if APC and APC:IsAlive() then
for APCUnit, Cargo in pairs( self.APC_Cargo ) do for APCUnit, Cargo in pairs( self.APC_Cargo ) do
local Cargo = Cargo -- Cargo.Cargo#CARGO local Cargo = Cargo -- Cargo.Cargo#CARGO
self:F( { IsLoaded = Cargo:IsLoaded(), IsDestroyed = Cargo:IsDestroyed() } ) self:F( { IsLoaded = Cargo:IsLoaded(), IsDestroyed = Cargo:IsDestroyed(), Cargo:GetName(), APC:GetName() } )
if not Cargo:IsLoaded() and not Cargo:IsDestroyed() then if not Cargo:IsLoaded() and not Cargo:IsDestroyed() then
Loaded = false Loaded = false
end end
@ -505,8 +505,9 @@ function AI_CARGO_APC:onbeforeUnloaded( APC, From, Event, To, Cargo )
--Cargo:Regroup() --Cargo:Regroup()
if APC and APC:IsAlive() then if APC and APC:IsAlive() then
for _, CargoCheck in pairs( self.CargoSet:GetSet() ) do for _, APCUnit in pairs( APC:GetUnits() ) do
local CargoCheck = CargoCheck -- Cargo.Cargo#CARGO local APCUnit = APCUnit -- Wrapper.Unit#UNIT
local CargoCheck = self.APC_Cargo[APCUnit]
self:F( { CargoCheck:GetName(), IsUnLoaded = CargoCheck:IsUnLoaded() } ) self:F( { CargoCheck:GetName(), IsUnLoaded = CargoCheck:IsUnLoaded() } )
if CargoCheck:IsUnLoaded() == false then if CargoCheck:IsUnLoaded() == false then
AllUnloaded = false AllUnloaded = false
@ -580,14 +581,15 @@ end
-- @param To -- @param To
-- @param Core.Point#COORDINATE Coordinate -- @param Core.Point#COORDINATE Coordinate
-- @param #number Speed -- @param #number Speed
function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed ) -- @param #string EndPointFormation The formation at the end point of the action.
function AI_CARGO_APC:onafterPickup( APC, From, Event, To, Coordinate, Speed, EndPointFormation )
if APC and APC:IsAlive() then if APC and APC:IsAlive() then
if Coordinate then if Coordinate then
self.RoutePickup = true self.RoutePickup = true
local Waypoints = APC:TaskGroundOnRoad( Coordinate, Speed ) local Waypoints = APC:TaskGroundOnRoad( Coordinate, Speed, EndPointFormation )
local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Pickup", self ) local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Pickup", self )
@ -611,13 +613,14 @@ end
-- @param To -- @param To
-- @param Core.Point#COORDINATE Coordinate -- @param Core.Point#COORDINATE Coordinate
-- @param #number Speed -- @param #number Speed
function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed ) -- @param #string EndPointFormation The formation at the end point of the action.
function AI_CARGO_APC:onafterDeploy( APC, From, Event, To, Coordinate, Speed, EndPointFormation )
if APC and APC:IsAlive() then if APC and APC:IsAlive() then
self.RouteDeploy = true self.RouteDeploy = true
local Waypoints = APC:TaskGroundOnRoad( Coordinate, Speed ) local Waypoints = APC:TaskGroundOnRoad( Coordinate, Speed, EndPointFormation )
local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Deploy", self ) local TaskFunction = APC:TaskFunction( "AI_CARGO_APC._Deploy", self )

View File

@ -333,20 +333,42 @@ end
--- @param #AI_CARGO_HELICOPTER self --- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter -- @param Wrapper.Group#GROUP Helicopter
function AI_CARGO_HELICOPTER:onafterLoad( Helicopter, From, Event, To, Coordinate ) function AI_CARGO_HELICOPTER:onbeforeLoad( Helicopter, From, Event, To, Coordinate )
local Boarding = false
if Helicopter and Helicopter:IsAlive() then if Helicopter and Helicopter:IsAlive() then
for _, Cargo in pairs( self.CargoSet:GetSet() ) do self.BoardingCount = 0
if Cargo:IsInLoadRadius( Coordinate ) then
self:__Board( 5 ) if Helicopter and Helicopter:IsAlive() then
Cargo:Board( Helicopter:GetUnit(1), 25 ) self.Helicopter_Cargo = {}
self.Cargo = Cargo for _, HelicopterUnit in pairs( Helicopter:GetUnits() ) do
break local HelicopterUnit = HelicopterUnit -- Wrapper.Unit#UNIT
for _, Cargo in pairs( self.CargoSet:GetSet() ) do
local Cargo = Cargo -- Cargo.Cargo#CARGO
self:F( { IsUnLoaded = Cargo:IsUnLoaded() } )
if Cargo:IsUnLoaded() then
if Cargo:IsInLoadRadius( HelicopterUnit:GetCoordinate() ) then
self:F( { "In radius", HelicopterUnit:GetName() } )
--Cargo:Ungroup()
Cargo:Board( HelicopterUnit, 25 )
self:__Board( 1, Cargo )
Boarding = true
-- So now this APCUnit has Cargo that is being loaded.
-- This will be used further in the logic to follow and to check cargo status.
self.Helicopter_Cargo[HelicopterUnit] = Cargo
break
end
end
end
end end
end end
end end
return Boarding
end end
--- @param #AI_CARGO_HELICOPTER self --- @param #AI_CARGO_HELICOPTER self
@ -366,11 +388,23 @@ end
--- @param #AI_CARGO_HELICOPTER self --- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter -- @param Wrapper.Group#GROUP Helicopter
function AI_CARGO_HELICOPTER:onafterLoaded( Helicopter, From, Event, To ) function AI_CARGO_HELICOPTER:onbeforeLoaded( Helicopter, From, Event, To )
local Loaded = true
if Helicopter and Helicopter:IsAlive() then if Helicopter and Helicopter:IsAlive() then
for HelicopterUnit, Cargo in pairs( self.APC_Cargo ) do
local Cargo = Cargo -- Cargo.Cargo#CARGO
self:F( { IsLoaded = Cargo:IsLoaded(), IsDestroyed = Cargo:IsDestroyed() } )
if not Cargo:IsLoaded() and not Cargo:IsDestroyed() then
Loaded = false
end
end
end end
return Loaded
end end
@ -379,10 +413,16 @@ end
function AI_CARGO_HELICOPTER:onafterUnload( Helicopter, From, Event, To ) function AI_CARGO_HELICOPTER:onafterUnload( Helicopter, From, Event, To )
if Helicopter and Helicopter:IsAlive() then if Helicopter and Helicopter:IsAlive() then
self.Cargo:UnBoard() for _, HelicopterUnit in pairs( Helicopter:GetUnits() ) do
self:__Unboard( 10 ) local HelicopterUnit = HelicopterUnit -- Wrapper.Unit#UNIT
for _, Cargo in pairs( HelicopterUnit:GetCargo() ) do
Cargo:UnBoard()
self:__Unboard( 10, Cargo )
end
end
end end
end end
--- @param #AI_CARGO_HELICOPTER self --- @param #AI_CARGO_HELICOPTER self
@ -401,12 +441,31 @@ end
--- @param #AI_CARGO_HELICOPTER self --- @param #AI_CARGO_HELICOPTER self
-- @param Wrapper.Group#GROUP Helicopter -- @param Wrapper.Group#GROUP Helicopter
function AI_CARGO_HELICOPTER:onafterUnloaded( Helicopter, From, Event, To ) function AI_CARGO_HELICOPTER:onbeforeUnloaded( Helicopter, From, Event, To )
local AllUnloaded = true
--Cargo:Regroup()
if Helicopter and Helicopter:IsAlive() then if Helicopter and Helicopter:IsAlive() then
self.Helicopter = Helicopter for _, CargoCheck in pairs( self.CargoSet:GetSet() ) do
local CargoCheck = CargoCheck -- Cargo.Cargo#CARGO
self:F( { CargoCheck:GetName(), IsUnLoaded = CargoCheck:IsUnLoaded() } )
if CargoCheck:IsUnLoaded() == false then
AllUnloaded = false
break
end
end
if AllUnloaded == true then
self.Helicopter = Helicopter
self.Helicopter_Cargo = {}
end
end end
self:F( { AllUnloaded = AllUnloaded } )
return AllUnloaded
end end

View File

@ -1974,8 +1974,9 @@ do -- Route methods
-- @param #CONTROLLABLE self -- @param #CONTROLLABLE self
-- @param Core.Point#COORDINATE ToCoordinate A Coordinate to drive to. -- @param Core.Point#COORDINATE ToCoordinate A Coordinate to drive to.
-- @param #number Speed (optional) Speed in km/h. The default speed is 999 km/h. -- @param #number Speed (optional) Speed in km/h. The default speed is 999 km/h.
-- @param #string EndPointFormation The formation to achieve at the end point.
-- @return Task -- @return Task
function CONTROLLABLE:TaskGroundOnRoad( ToCoordinate, Speed ) function CONTROLLABLE:TaskGroundOnRoad( ToCoordinate, Speed, EndPointFormation )
-- Current coordinate. -- Current coordinate.
local FromCoordinate = self:GetCoordinate() local FromCoordinate = self:GetCoordinate()
@ -1998,7 +1999,7 @@ do -- Route methods
-- Add the final coordinate because the final coordinate in path is last point on road. -- Add the final coordinate because the final coordinate in path is last point on road.
local dist=ToCoordinate:Get2DDistance(path[#path]) local dist=ToCoordinate:Get2DDistance(path[#path])
if dist>10 then if dist>10 then
table.insert( Route, ToCoordinate:WaypointGround( Speed, "Vee" ) ) table.insert( Route, ToCoordinate:WaypointGround( Speed, EndPointFormation ) )
end end
return Route return Route