mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-08-15 10:47:21 +00:00
APC defense ... optimized the unloading of infantry when enemies are nearby. Now the infantry is reloading into the APCs when the enemies are eliminated.
This commit is contained in:
parent
112945b3f6
commit
a8f42d61fa
@ -262,7 +262,6 @@ function AI_CARGO:onbeforeLoad( Carrier, From, Event, To, PickupZone )
|
|||||||
Carrier:RouteStop()
|
Carrier:RouteStop()
|
||||||
--Cargo:Ungroup()
|
--Cargo:Ungroup()
|
||||||
Cargo:__Board( -LoadDelay, CarrierUnit )
|
Cargo:__Board( -LoadDelay, CarrierUnit )
|
||||||
LoadDelay = LoadDelay + Cargo:GetCount() * LoadInterval
|
|
||||||
self:__Board( LoadDelay, Cargo, CarrierUnit, PickupZone )
|
self:__Board( LoadDelay, Cargo, CarrierUnit, PickupZone )
|
||||||
|
|
||||||
-- So now this CarrierUnit has Cargo that is being loaded.
|
-- So now this CarrierUnit has Cargo that is being loaded.
|
||||||
@ -279,6 +278,7 @@ function AI_CARGO:onbeforeLoad( Carrier, From, Event, To, PickupZone )
|
|||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
LoadDelay = LoadDelay + Cargo:GetCount() * LoadInterval
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -359,7 +359,7 @@ function AI_CARGO:onafterPickedUp( Carrier, From, Event, To, PickupZone )
|
|||||||
Carrier:RouteResume()
|
Carrier:RouteResume()
|
||||||
|
|
||||||
local HasCargo = false
|
local HasCargo = false
|
||||||
if Carrier and Carrier :IsAlive() then
|
if Carrier and Carrier:IsAlive() then
|
||||||
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
|
for Cargo, CarrierUnit in pairs( self.Carrier_Cargo ) do
|
||||||
HasCargo = true
|
HasCargo = true
|
||||||
break
|
break
|
||||||
@ -368,6 +368,7 @@ function AI_CARGO:onafterPickedUp( Carrier, From, Event, To, PickupZone )
|
|||||||
|
|
||||||
self.Relocating = false
|
self.Relocating = false
|
||||||
if HasCargo then
|
if HasCargo then
|
||||||
|
self:F( "Transporting" )
|
||||||
self.Transporting = true
|
self.Transporting = true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -383,11 +384,11 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @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.
|
-- @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:onafterUnload( Carrier, From, Event, To, DeployZone )
|
function AI_CARGO:onafterUnload( Carrier, From, Event, To, DeployZone, Defend )
|
||||||
self:F( { Carrier, From, Event, To, DeployZone } )
|
self:F( { Carrier, From, Event, To, DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
local UnboardInterval = 10
|
local UnboardInterval = 5
|
||||||
local UnboardDelay = 10
|
local UnboardDelay = 5
|
||||||
|
|
||||||
if Carrier and Carrier:IsAlive() then
|
if Carrier and Carrier:IsAlive() then
|
||||||
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
for _, CarrierUnit in pairs( Carrier:GetUnits() ) do
|
||||||
@ -398,8 +399,10 @@ function AI_CARGO:onafterUnload( Carrier, From, Event, To, DeployZone )
|
|||||||
if Cargo:IsLoaded() then
|
if Cargo:IsLoaded() then
|
||||||
Cargo:__UnBoard( UnboardDelay )
|
Cargo:__UnBoard( UnboardDelay )
|
||||||
UnboardDelay = UnboardDelay + Cargo:GetCount() * UnboardInterval
|
UnboardDelay = UnboardDelay + Cargo:GetCount() * UnboardInterval
|
||||||
Cargo:SetDeployed( true )
|
self:__Unboard( UnboardDelay, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
self:__Unboard( UnboardDelay, Cargo, CarrierUnit, DeployZone )
|
if not Defend == true then
|
||||||
|
Cargo:SetDeployed( true )
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -415,17 +418,17 @@ end
|
|||||||
-- @param #string To To state.
|
-- @param #string To To state.
|
||||||
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
||||||
-- @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.
|
-- @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:onafterUnboard( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone )
|
function AI_CARGO:onafterUnboard( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
self:F( { Carrier, From, Event, To, Cargo:GetName() } )
|
self:F( { Carrier, From, Event, To, Cargo:GetName(), DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
if Carrier and Carrier:IsAlive() then
|
if Carrier and Carrier:IsAlive() then
|
||||||
if not Cargo:IsUnLoaded() then
|
if not Cargo:IsUnLoaded() then
|
||||||
self:__Unboard( 10, Cargo, CarrierUnit, DeployZone )
|
self:__Unboard( 10, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
self:Unloaded( Cargo, CarrierUnit, DeployZone )
|
self:Unloaded( Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -438,8 +441,8 @@ end
|
|||||||
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
-- @param #string Cargo.Cargo#CARGO Cargo Cargo object.
|
||||||
-- @param #boolean Deployed Cargo is deployed.
|
-- @param #boolean Deployed Cargo is deployed.
|
||||||
-- @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.
|
-- @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:onafterUnloaded( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone )
|
function AI_CARGO:onafterUnloaded( Carrier, From, Event, To, Cargo, CarrierUnit, DeployZone, Defend )
|
||||||
self:F( { Carrier, From, Event, To, Cargo:GetName(), DeployZone = DeployZone } )
|
self:F( { Carrier, From, Event, To, Cargo:GetName(), DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
local AllUnloaded = true
|
local AllUnloaded = true
|
||||||
|
|
||||||
@ -465,7 +468,7 @@ function AI_CARGO:onafterUnloaded( Carrier, From, Event, To, Cargo, CarrierUnit,
|
|||||||
end
|
end
|
||||||
|
|
||||||
if AllUnloaded == true then
|
if AllUnloaded == true then
|
||||||
self:__Deployed( 5, DeployZone )
|
self:__Deployed( 5, DeployZone, Defend )
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
@ -477,10 +480,14 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @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.
|
-- @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:onafterDeployed( Carrier, From, Event, To, DeployZone )
|
function AI_CARGO:onafterDeployed( Carrier, From, Event, To, DeployZone, Defend )
|
||||||
self:F( { Carrier, From, Event, To, DeployZone = DeployZone } )
|
self:F( { Carrier, From, Event, To, DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
|
if not Defend == true then
|
||||||
self.Transporting = false
|
self.Transporting = false
|
||||||
|
else
|
||||||
|
self:F( "Defending" )
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -285,7 +285,7 @@ function AI_CARGO_APC:onafterMonitor( APC, From, Event, To )
|
|||||||
else
|
else
|
||||||
if self:Is( "Loaded" ) then
|
if self:Is( "Loaded" ) then
|
||||||
-- There are enemies within combat radius. Unload the CargoCarrier.
|
-- There are enemies within combat radius. Unload the CargoCarrier.
|
||||||
self:__Unload( 1 )
|
self:__Unload( 1, nil, true ) -- The 2nd parameter is true, which means that the unload is for defending the carrier, not to deploy!
|
||||||
else
|
else
|
||||||
if self:Is( "Unloaded" ) then
|
if self:Is( "Unloaded" ) then
|
||||||
self:Follow()
|
self:Follow()
|
||||||
@ -449,12 +449,12 @@ end
|
|||||||
-- @param #string Event Event.
|
-- @param #string Event Event.
|
||||||
-- @param #string To To state.
|
-- @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.
|
-- @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 )
|
function AI_CARGO_APC:onafterDeployed( APC, From, Event, To, DeployZone, Defend )
|
||||||
self:F( { APC, From, Event, To, DeployZone = DeployZone } )
|
self:F( { APC, From, Event, To, DeployZone = DeployZone, Defend = Defend } )
|
||||||
|
|
||||||
self:__Guard( 0.1 )
|
self:__Guard( 0.1 )
|
||||||
|
|
||||||
self:GetParent( self, AI_CARGO_APC ).onafterDeployed( self, APC, From, Event, To, DeployZone )
|
self:GetParent( self, AI_CARGO_APC ).onafterDeployed( self, APC, From, Event, To, DeployZone, Defend )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -231,7 +231,7 @@ do -- CARGO_UNIT
|
|||||||
local MaxSpeed = Desc.speedMaxOffRoad
|
local MaxSpeed = Desc.speedMaxOffRoad
|
||||||
local TypeName = Desc.typeName
|
local TypeName = Desc.typeName
|
||||||
|
|
||||||
self:T( self.CargoInAir )
|
--self:F({Unit=self.CargoObject:GetName()})
|
||||||
|
|
||||||
-- Only move the group to the carrier when the cargo is not in the air
|
-- Only move the group to the carrier when the cargo is not in the air
|
||||||
-- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea).
|
-- (eg. cargo can be on a oil derrick, moving the cargo on the oil derrick will drop the cargo on the sea).
|
||||||
@ -286,18 +286,19 @@ do -- CARGO_UNIT
|
|||||||
function CARGO_UNIT:onafterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
function CARGO_UNIT:onafterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
||||||
self:F( { From, Event, To, CargoCarrier:GetName(), NearRadius = NearRadius } )
|
self:F( { From, Event, To, CargoCarrier:GetName(), NearRadius = NearRadius } )
|
||||||
|
|
||||||
|
--self:F({Unit=self.CargoObject:GetName()})
|
||||||
|
|
||||||
if CargoCarrier and CargoCarrier:IsAlive() and self.CargoObject and self.CargoObject:IsAlive() then
|
if CargoCarrier and CargoCarrier:IsAlive() then -- and self.CargoObject and self.CargoObject:IsAlive() then
|
||||||
if (CargoCarrier:IsAir() and not CargoCarrier:InAir()) or true then
|
if (CargoCarrier:IsAir() and not CargoCarrier:InAir()) or true then
|
||||||
local NearRadius = NearRadius or CargoCarrier:GetBoundingRadius( NearRadius ) + 5
|
local NearRadius = NearRadius or CargoCarrier:GetBoundingRadius( NearRadius ) + 5
|
||||||
if self:IsNear( CargoCarrier:GetPointVec2(), NearRadius ) then
|
if self:IsNear( CargoCarrier:GetPointVec2(), NearRadius ) then
|
||||||
self:__Load( 1, CargoCarrier, ... )
|
self:__Load( 1, CargoCarrier, ... )
|
||||||
else
|
else
|
||||||
if self:IsNear( CargoCarrier:GetPointVec2(), 20 ) then
|
if self:IsNear( CargoCarrier:GetPointVec2(), 20 ) then
|
||||||
self:__Boarding( -1, CargoCarrier, NearRadius, ... )
|
self:__Boarding( 1, CargoCarrier, NearRadius, ... )
|
||||||
self.RunCount = self.RunCount + 1
|
self.RunCount = self.RunCount + 1
|
||||||
else
|
else
|
||||||
self:__Boarding( -2, CargoCarrier, NearRadius, ... )
|
self:__Boarding( 2, CargoCarrier, NearRadius, ... )
|
||||||
self.RunCount = self.RunCount + 2
|
self.RunCount = self.RunCount + 2
|
||||||
end
|
end
|
||||||
if self.RunCount >= 40 then
|
if self.RunCount >= 40 then
|
||||||
@ -306,6 +307,8 @@ do -- CARGO_UNIT
|
|||||||
local Angle = 180
|
local Angle = 180
|
||||||
local Distance = 0
|
local Distance = 0
|
||||||
|
|
||||||
|
--self:F({Unit=self.CargoObject:GetName()})
|
||||||
|
|
||||||
local CargoCarrierPointVec2 = CargoCarrier:GetPointVec2()
|
local CargoCarrierPointVec2 = CargoCarrier:GetPointVec2()
|
||||||
local CargoCarrierHeading = CargoCarrier:GetHeading() -- Get Heading of object in degrees.
|
local CargoCarrierHeading = CargoCarrier:GetHeading() -- Get Heading of object in degrees.
|
||||||
local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle )
|
local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle )
|
||||||
@ -368,10 +371,11 @@ do -- CARGO_UNIT
|
|||||||
|
|
||||||
self.CargoCarrier = CargoCarrier
|
self.CargoCarrier = CargoCarrier
|
||||||
|
|
||||||
-- Only destroy the CargoObject is if there is a CargoObject (packages don't have CargoObjects).
|
--self:F({Unit=self.CargoObject:GetName()})
|
||||||
|
|
||||||
|
-- Only destroy the CargoObject if there is a CargoObject (packages don't have CargoObjects).
|
||||||
if self.CargoObject then
|
if self.CargoObject then
|
||||||
self:T("Destroying")
|
self.CargoObject:Destroy( false )
|
||||||
self.CargoObject:Destroy()
|
|
||||||
--self.CargoObject:ReSpawnAt( COORDINATE:NewFromVec2( {x=0,y=0} ), 0 )
|
--self.CargoObject:ReSpawnAt( COORDINATE:NewFromVec2( {x=0,y=0} ), 0 )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -57,8 +57,6 @@ do -- UserFlag
|
|||||||
--
|
--
|
||||||
function USERFLAG:Set( Number ) --R2.3
|
function USERFLAG:Set( Number ) --R2.3
|
||||||
|
|
||||||
self:F( { Number = Number } )
|
|
||||||
|
|
||||||
trigger.action.setUserFlag( self.UserFlagName, Number )
|
trigger.action.setUserFlag( self.UserFlagName, Number )
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user