|
|
|
@@ -529,7 +529,7 @@ do -- CARGO_REPRESENTABLE
|
|
|
|
|
-- @extends #CARGO
|
|
|
|
|
-- @field test
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
--- Models CARGO that is representable by a Unit.
|
|
|
|
|
-- @field #CARGO_REPRESENTABLE CARGO_REPRESENTABLE
|
|
|
|
|
CARGO_REPRESENTABLE = {
|
|
|
|
|
ClassName = "CARGO_REPRESENTABLE"
|
|
|
|
@@ -550,6 +550,18 @@ do -- CARGO_REPRESENTABLE
|
|
|
|
|
return self
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- CARGO_REPRESENTABLE Destructor.
|
|
|
|
|
-- @param #CARGO_REPRESENTABLE self
|
|
|
|
|
-- @return #CARGO_REPRESENTABLE
|
|
|
|
|
function CARGO_REPRESENTABLE:Destroy()
|
|
|
|
|
|
|
|
|
|
-- Cargo objects are deleted from the _DATABASE and SET_CARGO objects.
|
|
|
|
|
self:F( { CargoName = self:GetName() } )
|
|
|
|
|
_EVENTDISPATCHER:CreateEventDeleteCargo( self )
|
|
|
|
|
|
|
|
|
|
return self
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Route a cargo unit to a PointVec2.
|
|
|
|
|
-- @param #CARGO_REPRESENTABLE self
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
@@ -678,7 +690,7 @@ end
|
|
|
|
|
|
|
|
|
|
do -- CARGO_UNIT
|
|
|
|
|
|
|
|
|
|
--- Hello
|
|
|
|
|
--- Models CARGO in the form of units, which can be boarded, unboarded, loaded, unloaded.
|
|
|
|
|
-- @type CARGO_UNIT
|
|
|
|
|
-- @extends #CARGO_REPRESENTABLE
|
|
|
|
|
|
|
|
|
@@ -695,16 +707,16 @@ do -- CARGO_UNIT
|
|
|
|
|
ClassName = "CARGO_UNIT"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
--- CARGO_UNIT Constructor.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoUnit
|
|
|
|
|
-- @param #string Type
|
|
|
|
|
-- @param #string Name
|
|
|
|
|
-- @param #number Weight
|
|
|
|
|
-- @param #number ReportRadius (optional)
|
|
|
|
|
-- @param #number NearRadius (optional)
|
|
|
|
|
-- @return #CARGO_UNIT
|
|
|
|
|
function CARGO_UNIT:New( CargoUnit, Type, Name, Weight, NearRadius )
|
|
|
|
|
--- CARGO_UNIT Constructor.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoUnit
|
|
|
|
|
-- @param #string Type
|
|
|
|
|
-- @param #string Name
|
|
|
|
|
-- @param #number Weight
|
|
|
|
|
-- @param #number ReportRadius (optional)
|
|
|
|
|
-- @param #number NearRadius (optional)
|
|
|
|
|
-- @return #CARGO_UNIT
|
|
|
|
|
function CARGO_UNIT:New( CargoUnit, Type, Name, Weight, NearRadius )
|
|
|
|
|
local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( CargoUnit, Type, Name, Weight, NearRadius ) ) -- #CARGO_UNIT
|
|
|
|
|
self:F( { Type, Name, Weight, NearRadius } )
|
|
|
|
|
|
|
|
|
@@ -713,41 +725,18 @@ function CARGO_UNIT:New( CargoUnit, Type, Name, Weight, NearRadius )
|
|
|
|
|
|
|
|
|
|
self:T( self.ClassName )
|
|
|
|
|
|
|
|
|
|
-- self:HandleEvent( EVENTS.Dead,
|
|
|
|
|
-- --- @param #CARGO Cargo
|
|
|
|
|
-- -- @param Core.Event#EVENTDATA EventData
|
|
|
|
|
-- function( Cargo, EventData )
|
|
|
|
|
-- if Cargo:GetObjectName() == EventData.IniUnit:GetName() then
|
|
|
|
|
-- self:E( { "Cargo destroyed", Cargo } )
|
|
|
|
|
-- Cargo:Destroyed()
|
|
|
|
|
-- end
|
|
|
|
|
-- end
|
|
|
|
|
-- )
|
|
|
|
|
|
|
|
|
|
self:SetEventPriority( 5 )
|
|
|
|
|
|
|
|
|
|
return self
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- CARGO_UNIT Destructor.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @return #CARGO_UNIT
|
|
|
|
|
function CARGO_UNIT:Destroy()
|
|
|
|
|
|
|
|
|
|
-- Cargo objects are deleted from the _DATABASE and SET_CARGO objects.
|
|
|
|
|
self:F( { CargoName = self:GetName() } )
|
|
|
|
|
_EVENTDISPATCHER:CreateEventDeleteCargo( self )
|
|
|
|
|
|
|
|
|
|
return self
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Enter UnBoarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onenterUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
--- Enter UnBoarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onenterUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
self:F( { From, Event, To, ToPointVec2, NearRadius } )
|
|
|
|
|
|
|
|
|
|
NearRadius = NearRadius or 25
|
|
|
|
@@ -797,15 +786,15 @@ function CARGO_UNIT:onenterUnBoarding( From, Event, To, ToPointVec2, NearRadius
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Leave UnBoarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onleaveUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
--- Leave UnBoarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onleaveUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
self:F( { From, Event, To, ToPointVec2, NearRadius } )
|
|
|
|
|
|
|
|
|
|
NearRadius = NearRadius or 25
|
|
|
|
@@ -824,15 +813,15 @@ function CARGO_UNIT:onleaveUnBoarding( From, Event, To, ToPointVec2, NearRadius
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- UnBoard Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onafterUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
--- UnBoard Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2 ToPointVec2
|
|
|
|
|
function CARGO_UNIT:onafterUnBoarding( From, Event, To, ToPointVec2, NearRadius )
|
|
|
|
|
self:F( { From, Event, To, ToPointVec2, NearRadius } )
|
|
|
|
|
|
|
|
|
|
NearRadius = NearRadius or 25
|
|
|
|
@@ -849,17 +838,17 @@ function CARGO_UNIT:onafterUnBoarding( From, Event, To, ToPointVec2, NearRadius
|
|
|
|
|
|
|
|
|
|
self:__UnLoad( 1, ToPointVec2, NearRadius )
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- Enter UnLoaded State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2
|
|
|
|
|
function CARGO_UNIT:onenterUnLoaded( From, Event, To, ToPointVec2 )
|
|
|
|
|
--- Enter UnLoaded State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2
|
|
|
|
|
function CARGO_UNIT:onenterUnLoaded( From, Event, To, ToPointVec2 )
|
|
|
|
|
self:F( { ToPointVec2, From, Event, To } )
|
|
|
|
|
|
|
|
|
|
local Angle = 180
|
|
|
|
@@ -872,7 +861,7 @@ function CARGO_UNIT:onenterUnLoaded( From, Event, To, ToPointVec2 )
|
|
|
|
|
local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle )
|
|
|
|
|
local CargoDeployCoord = StartPointVec2:Translate( Distance, CargoDeployHeading )
|
|
|
|
|
|
|
|
|
|
ToPointVec2 = ToPointVec2 or POINT_VEC2:New( CargoDeployCoord.x, CargoDeployCoord.z )
|
|
|
|
|
ToPointVec2 = ToPointVec2 or COORDINATE:New( CargoDeployCoord.x, CargoDeployCoord.z )
|
|
|
|
|
|
|
|
|
|
-- Respawn the group...
|
|
|
|
|
if self.CargoObject then
|
|
|
|
@@ -887,14 +876,14 @@ function CARGO_UNIT:onenterUnLoaded( From, Event, To, ToPointVec2 )
|
|
|
|
|
self.OnUnLoadedCallBack = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Board Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
function CARGO_UNIT:onafterBoard( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
--- Board Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
function CARGO_UNIT:onafterBoard( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
self:F( { From, Event, To, CargoCarrier, NearRadius } )
|
|
|
|
|
|
|
|
|
|
local NearRadius = NearRadius or 25
|
|
|
|
@@ -934,17 +923,17 @@ function CARGO_UNIT:onafterBoard( From, Event, To, CargoCarrier, NearRadius, ...
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- Boarding Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
-- @param #number NearRadius
|
|
|
|
|
function CARGO_UNIT:onafterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
--- Boarding Event.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
-- @param #number NearRadius
|
|
|
|
|
function CARGO_UNIT:onafterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
self:F( { From, Event, To, CargoCarrier.UnitName, NearRadius } )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -988,16 +977,16 @@ function CARGO_UNIT:onafterBoarding( From, Event, To, CargoCarrier, NearRadius,
|
|
|
|
|
self:E("Something is wrong")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- Enter Boarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
function CARGO_UNIT:onenterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
--- Enter Boarding State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
function CARGO_UNIT:onenterBoarding( From, Event, To, CargoCarrier, NearRadius, ... )
|
|
|
|
|
self:F( { From, Event, To, CargoCarrier.UnitName, NearRadius } )
|
|
|
|
|
|
|
|
|
|
local Speed = 90
|
|
|
|
@@ -1010,15 +999,15 @@ function CARGO_UNIT:onenterBoarding( From, Event, To, CargoCarrier, NearRadius,
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
--- Loaded State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
function CARGO_UNIT:onenterLoaded( From, Event, To, CargoCarrier )
|
|
|
|
|
--- Loaded State.
|
|
|
|
|
-- @param #CARGO_UNIT self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
function CARGO_UNIT:onenterLoaded( From, Event, To, CargoCarrier )
|
|
|
|
|
self:F( { From, Event, To, CargoCarrier } )
|
|
|
|
|
|
|
|
|
|
self.CargoCarrier = CargoCarrier
|
|
|
|
@@ -1028,13 +1017,115 @@ function CARGO_UNIT:onenterLoaded( From, Event, To, CargoCarrier )
|
|
|
|
|
self:T("Destroying")
|
|
|
|
|
self.CargoObject:Destroy()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end -- CARGO_UNIT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
do -- CARGO_CRATE
|
|
|
|
|
|
|
|
|
|
--- Models the behaviour of cargo crates, which can be slingloaded and boarded on helicopters using the DCS menus.
|
|
|
|
|
-- @type CARGO_CRATE
|
|
|
|
|
-- @extends #CARGO_REPRESENTABLE
|
|
|
|
|
|
|
|
|
|
--- # CARGO\_CRATE class, extends @{#CARGO_REPRESENTABLE}
|
|
|
|
|
--
|
|
|
|
|
-- The CARGO\_CRATE class defines a cargo that is represented by a UNIT object within the simulator, and can be transported by a carrier.
|
|
|
|
|
-- Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGO\_CRATE objects to and from carriers.
|
|
|
|
|
--
|
|
|
|
|
-- ===
|
|
|
|
|
--
|
|
|
|
|
-- @field #CARGO_CRATE
|
|
|
|
|
CARGO_CRATE = {
|
|
|
|
|
ClassName = "CARGO_CRATE"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
--- CARGO_CRATE Constructor.
|
|
|
|
|
-- @param #CARGO_CRATE self
|
|
|
|
|
-- @param #string CrateName
|
|
|
|
|
-- @param #string Type
|
|
|
|
|
-- @param #string Name
|
|
|
|
|
-- @param #number Weight
|
|
|
|
|
-- @param #number ReportRadius (optional)
|
|
|
|
|
-- @param #number NearRadius (optional)
|
|
|
|
|
-- @return #CARGO_CRATE
|
|
|
|
|
function CARGO_CRATE:New( CargoCrateName, Type, Name, NearRadius )
|
|
|
|
|
local self = BASE:Inherit( self, CARGO_REPRESENTABLE:New( CargoCrateName, Type, Name, nil, NearRadius ) ) -- #CARGO_CRATE
|
|
|
|
|
self:F( { Type, Name, NearRadius } )
|
|
|
|
|
|
|
|
|
|
self:T( CargoCrateName )
|
|
|
|
|
_DATABASE:AddStatic( CargoCrateName )
|
|
|
|
|
|
|
|
|
|
self.CargoObject = STATIC:FindByName( CargoCrateName )
|
|
|
|
|
|
|
|
|
|
self:T( self.ClassName )
|
|
|
|
|
|
|
|
|
|
self:SetEventPriority( 5 )
|
|
|
|
|
|
|
|
|
|
return self
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- Enter UnLoaded State.
|
|
|
|
|
-- @param #CARGO_CRATE self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Core.Point#POINT_VEC2
|
|
|
|
|
function CARGO_CRATE:onenterUnLoaded( From, Event, To, ToPointVec2 )
|
|
|
|
|
self:F( { ToPointVec2, From, Event, To } )
|
|
|
|
|
|
|
|
|
|
local Angle = 180
|
|
|
|
|
local Speed = 10
|
|
|
|
|
local Distance = 10
|
|
|
|
|
|
|
|
|
|
if From == "Loaded" then
|
|
|
|
|
local StartCoordinate = self.CargoCarrier:GetCoordinate()
|
|
|
|
|
local CargoCarrierHeading = self.CargoCarrier:GetHeading() -- Get Heading of object in degrees.
|
|
|
|
|
local CargoDeployHeading = ( ( CargoCarrierHeading + Angle ) >= 360 ) and ( CargoCarrierHeading + Angle - 360 ) or ( CargoCarrierHeading + Angle )
|
|
|
|
|
local CargoDeployCoord = StartCoordinate:Translate( Distance, CargoDeployHeading )
|
|
|
|
|
|
|
|
|
|
ToPointVec2 = ToPointVec2 or COORDINATE:NewFromVec2( { x= CargoDeployCoord.x, y = CargoDeployCoord.z } )
|
|
|
|
|
|
|
|
|
|
-- Respawn the group...
|
|
|
|
|
if self.CargoObject then
|
|
|
|
|
self.CargoObject:ReSpawn( ToPointVec2, 0 )
|
|
|
|
|
self.CargoCarrier = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.OnUnLoadedCallBack then
|
|
|
|
|
self.OnUnLoadedCallBack( self, unpack( self.OnUnLoadedParameters ) )
|
|
|
|
|
self.OnUnLoadedCallBack = nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--- Loaded State.
|
|
|
|
|
-- @param #CARGO_CRATE self
|
|
|
|
|
-- @param #string Event
|
|
|
|
|
-- @param #string From
|
|
|
|
|
-- @param #string To
|
|
|
|
|
-- @param Wrapper.Unit#UNIT CargoCarrier
|
|
|
|
|
function CARGO_CRATE:onenterLoaded( From, Event, To, CargoCarrier )
|
|
|
|
|
self:F( { From, Event, To, CargoCarrier } )
|
|
|
|
|
|
|
|
|
|
self.CargoCarrier = CargoCarrier
|
|
|
|
|
|
|
|
|
|
-- Only destroy the CargoObject is if there is a CargoObject (packages don't have CargoObjects).
|
|
|
|
|
if self.CargoObject then
|
|
|
|
|
self:T("Destroying")
|
|
|
|
|
self.CargoObject:Destroy()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
do -- CARGO_GROUP
|
|
|
|
|
|
|
|
|
|
--- @type CARGO_GROUP
|
|
|
|
|