mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2026-08-22 16:05:25 +00:00
Okay, fixed the problem with the crashing at the deploy zone.
Also added methods to set and/or randomize the pickup speed, pickup radius, deploy speed, deploy radius.
This commit is contained in:
@@ -22,7 +22,7 @@ AI_CARGO_HELICOPTER = {
|
||||
Coordinate = nil -- Core.Point#COORDINATE,
|
||||
}
|
||||
|
||||
AI_CARGO_HELICOPTER_QUEUE = {}
|
||||
AI_CARGO_QUEUE = {}
|
||||
|
||||
--- Creates a new AI_CARGO_HELICOPTER object.
|
||||
-- @param #AI_CARGO_HELICOPTER self
|
||||
@@ -225,43 +225,31 @@ function AI_CARGO_HELICOPTER:onafterQueue( Helicopter, From, Event, To, Coordina
|
||||
|
||||
local HelicopterInZone = false
|
||||
|
||||
--- @param Wrapper.Unit#UNIT ZoneUnit
|
||||
local function EvaluateZone( ZoneUnit )
|
||||
|
||||
if ZoneUnit:IsAlive() then
|
||||
local ZoneUnitCategory = ZoneUnit:GetDesc().category
|
||||
local ZoneGroup = ZoneUnit:GetGroup()
|
||||
if ZoneUnitCategory == Unit.Category.HELICOPTER then
|
||||
local State = ZoneGroup:GetState( ZoneGroup, "Landing" )
|
||||
self:F({ZoneUnit=ZoneUnit:GetName(), State=State, UnitCategory = Unit.Category.HELICOPTER } )
|
||||
if State == true then
|
||||
HelicopterInZone = true
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
if Helicopter and Helicopter:IsAlive() then
|
||||
|
||||
local Distance = Coordinate:DistanceFromPointVec2( Helicopter:GetCoordinate() )
|
||||
|
||||
if Distance > 300 then
|
||||
if Distance > 500 then
|
||||
self:__Queue( -10, Coordinate )
|
||||
else
|
||||
|
||||
-- This will search the zone and will call the local function "EvaluateZone", which passes a UNIT object.
|
||||
local Zone = ZONE_RADIUS:New( "Deploy", Coordinate:GetVec2(), 300 )
|
||||
Zone:SearchZone( EvaluateZone )
|
||||
local ZoneFree = true
|
||||
|
||||
for Helicopter, ZoneQueue in pairs( AI_CARGO_QUEUE ) do
|
||||
local ZoneQueue = ZoneQueue -- Core.Zone#ZONE_RADIUS
|
||||
if ZoneQueue:IsCoordinateInZone( Coordinate ) then
|
||||
ZoneFree = false
|
||||
end
|
||||
end
|
||||
|
||||
self:F({HelicopterInZone=HelicopterInZone})
|
||||
self:F({ZoneFree=ZoneFree})
|
||||
|
||||
if HelicopterInZone == false then
|
||||
if ZoneFree == true then
|
||||
|
||||
Helicopter:SetState( Helicopter, "Landing", true )
|
||||
|
||||
local ZoneQueue = ZONE_RADIUS:New( Helicopter:GetName(), Coordinate:GetVec2(), 100 )
|
||||
|
||||
AI_CARGO_QUEUE[Helicopter] = ZoneQueue
|
||||
|
||||
local Route = {}
|
||||
|
||||
-- local CoordinateFrom = Helicopter:GetCoordinate()
|
||||
@@ -310,8 +298,6 @@ function AI_CARGO_HELICOPTER:onafterOrbit( Helicopter, From, Event, To, Coordina
|
||||
|
||||
if Helicopter and Helicopter:IsAlive() then
|
||||
|
||||
Helicopter:ClearState( Helicopter, "Landing" )
|
||||
|
||||
if not self:IsTransporting() then
|
||||
local Route = {}
|
||||
|
||||
@@ -436,6 +422,7 @@ function AI_CARGO_HELICOPTER:onafterUnload( Helicopter, From, Event, To, Deploye
|
||||
local HelicopterUnit = HelicopterUnit -- Wrapper.Unit#UNIT
|
||||
for _, Cargo in pairs( HelicopterUnit:GetCargo() ) do
|
||||
Cargo:UnBoard()
|
||||
Cargo:SetDeployed( true )
|
||||
self:__Unboard( 10, Cargo, Deployed )
|
||||
end
|
||||
end
|
||||
@@ -483,7 +470,6 @@ function AI_CARGO_HELICOPTER:onbeforeUnloaded( Helicopter, From, Event, To, Carg
|
||||
if Deployed == true then
|
||||
for HelicopterUnit, Cargo in pairs( self.Helicopter_Cargo ) do
|
||||
local Cargo = Cargo -- Cargo.Cargo#CARGO
|
||||
Cargo:SetDeployed( true )
|
||||
end
|
||||
self.Helicopter_Cargo = {}
|
||||
end
|
||||
@@ -500,7 +486,9 @@ end
|
||||
-- @param Wrapper.Group#GROUP Helicopter
|
||||
function AI_CARGO_HELICOPTER:onafterUnloaded( Helicopter, From, Event, To, Cargo, Deployed )
|
||||
|
||||
self:Orbit( Helicopter:GetCoordinate(), 50 )
|
||||
self:Orbit( Helicopter:GetCoordinate(), 50 )
|
||||
|
||||
AI_CARGO_QUEUE[Helicopter] = nil
|
||||
|
||||
end
|
||||
|
||||
@@ -515,7 +503,6 @@ function AI_CARGO_HELICOPTER:onafterPickup( Helicopter, From, Event, To, Coordin
|
||||
|
||||
if Helicopter and Helicopter:IsAlive() ~= nil then
|
||||
|
||||
self:ScheduleOnce( 10, Helicopter.ClearState, Helicopter, Helicopter, "Landing" )
|
||||
Helicopter:Activate()
|
||||
|
||||
self.RoutePickup = true
|
||||
@@ -690,7 +677,7 @@ function AI_CARGO_HELICOPTER:onafterHome( Helicopter, From, Event, To, Coordinat
|
||||
Route[#Route+1] = WaypointTo
|
||||
|
||||
-- Now route the helicopter
|
||||
Helicopter:Route( Route, 1 )
|
||||
Helicopter:Route( Route, 0 )
|
||||
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user