mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
# Conflicts:
# Moose Development/Moose/AI/AI_Cargo_APC.lua # Moose Development/Moose/Wrapper/Controllable.lua
This commit is contained in:
parent
810d900d7e
commit
19b3dcec21
@ -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 )
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user