Module Cargo

Management of logical cargo objects, that can be transported from and to transportation carriers.


Cargo can be of various forms, always are composed out of ONE object ( one unit or one static or one slingload crate ):

  • CARGO_UNIT, represented by a Unit in a Group: Cargo can be represented by a Unit in a Group. Destruction of the Unit will mean that the cargo is lost.

  • CARGO_STATIC, represented by a Static: Cargo can be represented by a Static. Destruction of the Static will mean that the cargo is lost.

  • CARGO_PACKAGE, contained in a Unit of a Group: Cargo can be contained within a Unit of a Group. The cargo can be delivered by the Unit. If the Unit is destroyed, the cargo will be destroyed also.

  • CARGO_PACKAGE, Contained in a Static: Cargo can be contained within a Static. The cargo can be collected from the @Static. If the Static is destroyed, the cargo will be destroyed.

  • CARGO_SLINGLOAD, represented by a Cargo that is transportable: Cargo can be represented by a Cargo object that is transportable. Destruction of the Cargo will mean that the cargo is lost.

  • CARGOGROUPED, represented by a Group of CARGOUNITs.

1) Cargo#CARGO_BASE class, extends StateMachine#STATEMACHINE_PROCESS

The #CARGO_BASE class defines the core functions that defines a cargo object within MOOSE. A cargo is a logical object defined that is available for transport, and has a life status within a simulation.

The CARGOBASE is a state machine: it manages the different events and states of the cargo. All derived classes from CARGOBASE follow the same state machine, expose the same cargo event functions, and provide the same cargo states.

1.2.1) CARBO_BASE Events:

  • CARBO_BASE.Board( ToCarrier ): Boards the cargo to a carrier.
  • CARBO_BASE.Load( ToCarrier ): Loads the cargo into a carrier, regardless of its position.
  • CARBO_BASE.UnBoard( ToPointVec2 ): UnBoard the cargo from a carrier. This will trigger a movement of the cargo to the option ToPointVec2.
  • CARBO_BASE.UnLoad( ToPointVec2 ): UnLoads the cargo from a carrier.
  • CARBO_BASE.Dead( Controllable ): The cargo is dead. The cargo process will be ended.

1.2.2) CARBO_BASE States:

  • UnLoaded: The cargo is unloaded from a carrier.
  • Boarding: The cargo is currently boarding (= running) into a carrier.
  • Loaded: The cargo is loaded into a carrier.
  • UnBoarding: The cargo is currently unboarding (=running) from a carrier.
  • Dead: The cargo is dead ...
  • End: The process has come to an end.

1.2.3) CARBO_BASE state transition functions:

State transition functions can be set by the mission designer customizing or improving the behaviour of the state. There are 2 moments when state transition functions will be called by the state machine:

  • Before the state transition. The state transition function needs to start with the name OnBefore + the name of the state. If the state transition function returns false, then the processing of the state transition will not be done! If you want to change the behaviour of the AIControllable at this event, return false, but then you'll need to specify your own logic using the AIControllable!

  • After the state transition. The state transition function needs to start with the name OnAfter + the name of the state. These state transition functions need to provide a return value, which is specified at the function description.

2) #CARGO_UNIT class

The CARGOUNIT 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 CARGOUNIT objects to and from carriers.

5) #CARGO_GROUPED class

The CARGOGROUPED class defines a cargo that is represented by a group of UNIT objects within the simulator, and can be transported by a carrier. Use the event functions as described above to Load, UnLoad, Board, UnBoard the CARGOUNIT objects to and from carriers.

This module is still under construction, but is described above works already, and will keep working ...

Global(s)

CARBO_BASE
CARGOS
CARGO_GROUP
CARGO_GROUPED
CARGO_PACKAGE
CARGO_REPRESENTABLE
CARGO_UNIT
FSMT

Type CARBO_BASE

CARBO_BASE:Board(ToCarrier)

Boards the cargo to a Carrier.

CARBO_BASE.CargoCarrier

The alive DCS object carrying the cargo. This value can be nil, meaning, that the cargo is not contained anywhere...

CARBO_BASE.CargoObject

The alive DCS object representing the cargo. This value can be nil, meaning, that the cargo is not represented anywhere...

CARBO_BASE.CargoScheduler
CARBO_BASE.ClassName
CARBO_BASE.Containable

This flag defines if the cargo can be contained within a DCS Unit.

CARBO_BASE:IsNear(PointVec2)

Check if CargoCarrier is near the Cargo to be Loaded.

CARBO_BASE:Load(ToCarrier)

Loads the cargo to a Carrier.

CARBO_BASE.Moveable

This flag defines if the cargo is moveable.

CARBO_BASE.Name

A string defining the name of the cargo. The name is the unique identifier of the cargo.

CARBO_BASE.NearRadius

(optional) A number defining the radius in meters when the cargo is near to a Carrier, so that it can be loaded.

CARBO_BASE:New(Type, Name, Weight, ReportRadius, NearRadius)

CARBO_BASE Constructor.

CARBO_BASE:OnAfterBoarding(Controllable)
CARBO_BASE:OnAfterLoaded(Controllable)
CARBO_BASE:OnAfterUnBoarding(Controllable)
CARBO_BASE:OnAfterUnLoaded(Controllable)
CARBO_BASE:OnBeforeBoarding(Controllable)
CARBO_BASE:OnBeforeLoaded(Controllable)
CARBO_BASE:OnBeforeUnBoarding(Controllable)
CARBO_BASE:OnBeforeUnLoaded(Controllable)
CARBO_BASE.ReportRadius

(optional) A number defining the radius in meters when the cargo is signalling or reporting to a Carrier.

CARBO_BASE.Representable

This flag defines if the cargo can be represented by a DCS Unit.

CARBO_BASE.Slingloadable

This flag defines if the cargo can be slingloaded.

CARBO_BASE:Spawn(PointVec2)

Template method to spawn a new representation of the CARBO_BASE in the simulator.

CARBO_BASE.Type

A string defining the type of the cargo. eg. Engineers, Equipment, Screwdrivers.

CARBO_BASE:UnBoard(ToPointVec2)

UnBoards the cargo to a Carrier.

CARBO_BASE:UnLoad(ToPointVec2)

UnLoads the cargo to a Carrier.

CARBO_BASE.Weight

A number defining the weight of the cargo. The weight is expressed in kg.

CARBO_BASE:__Board(DelaySeconds, ToCarrier)

Boards the cargo to a Carrier.

CARBO_BASE:__Load(DelaySeconds, ToCarrier)

Loads the cargo to a Carrier.

CARBO_BASE:__UnBoard(DelaySeconds, ToPointVec2)

UnBoards the cargo to a Carrier.

CARBO_BASE:__UnLoad(DelaySeconds, ToPointVec2)

UnLoads the cargo to a Carrier.

Type CARGO_GROUP

CARGO_GROUP.CargoSet

A set of cargo objects.

CARGO_GROUP.ClassName
CARGO_GROUP.Name

A string defining the name of the cargo group. The name is the unique identifier of the cargo.

CARGO_GROUP:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_GROUP constructor.

Type CARGO_GROUPED

CARGO_GROUPED.ClassName
CARGO_GROUPED:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_GROUPED constructor.

CARGO_GROUPED:onafterUnBoarding(ToPointVec2, Event, From, To)

UnBoard Event.

CARGO_GROUPED:onenterBoarding(CargoCarrier, Event, From, To)

Enter Boarding State.

CARGO_GROUPED:onenterLoaded(CargoCarrier, Event, From, To)

Enter Loaded State.

CARGO_GROUPED:onenterUnBoarding(ToPointVec2, Event, From, To)

Enter UnBoarding State.

CARGO_GROUPED:onenterUnLoaded(Point, Event, From, To, ToPointVec2)

Enter UnLoaded State.

CARGO_GROUPED:onleaveBoarding(CargoCarrier, Event, From, To)

Leave Boarding State.

CARGO_GROUPED:onleaveUnBoarding(ToPointVec2, Event, From, To)

Leave UnBoarding State.

Type CARGO_PACKAGE

CARGO_PACKAGE.CargoCarrier
CARGO_PACKAGE.CargoInAir
CARGO_PACKAGE.ClassName
CARGO_PACKAGE:IsNear(CargoCarrier)

Check if CargoCarrier is near the Cargo to be Loaded.

CARGO_PACKAGE:New(CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_PACKAGE Constructor.

CARGO_PACKAGE:onafterLoad(FsmP, Event, From, To, CargoCarrier, Speed, LoadDistance, Angle)

Load Event.

CARGO_PACKAGE:onafterOnBoard(FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, Angle, LoadDistance)

Board Event.

CARGO_PACKAGE:onafterOnBoarded(FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle)

Boarded Event.

CARGO_PACKAGE:onafterUnBoard(FsmP, Event, From, To, Speed, UnLoadDistance, UnBoardDistance, Radius, Angle, CargoCarrier)

UnBoard Event.

CARGO_PACKAGE:onafterUnBoarded(FsmP, Event, From, To, CargoCarrier, Speed)

UnBoarded Event.

CARGO_PACKAGE:onafterUnLoad(FsmP, Event, From, To, Distance, Angle, CargoCarrier, Speed)

UnLoad Event.

Type CARGO_REPRESENTABLE

CARGO_REPRESENTABLE.ClassName
CARGO_REPRESENTABLE:New(CargoObject, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_REPRESENTABLE Constructor.

CARGO_REPRESENTABLE:RouteTo(ToPointVec2, Speed)

Route a cargo unit to a PointVec2.

Type CARGO_UNIT

CARGO_UNIT.CargoCarrier
CARGO_UNIT.CargoInAir
CARGO_UNIT.CargoObject
CARGO_UNIT.ClassName
CARGO_UNIT:New(CargoUnit, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_UNIT Constructor.

CARGO_UNIT.OnUnLoadedCallBack
CARGO_UNIT:onafterBoard(Event, From, To, CargoCarrier)

Board Event.

CARGO_UNIT:onafterUnBoarding(ToPointVec2, Event, From, To)

UnBoard Event.

CARGO_UNIT:onenterBoarding(CargoCarrier, Event, From, To)

Enter Boarding State.

CARGO_UNIT:onenterLoaded(CargoCarrier, Event, From, To)

Loaded State.

CARGO_UNIT:onenterUnBoarding(ToPointVec2, Event, From, To)

Enter UnBoarding State.

CARGO_UNIT:onenterUnLoaded(Point, Event, From, To, ToPointVec2)

Enter UnLoaded State.

CARGO_UNIT:onleaveBoarding(CargoCarrier, Event, From, To)

Leave Boarding State.

CARGO_UNIT:onleaveUnBoarding(ToPointVec2, Event, From, To)

Leave UnBoarding State.

Global(s)

#CARBO_BASE CARBO_BASE
CARGOS
#CARGO_GROUP CARGO_GROUP
#CARGO_GROUPED CARGO_GROUPED
#CARGO_PACKAGE CARGO_PACKAGE
#CARGO_REPRESENTABLE CARGO_REPRESENTABLE
#CARGO_UNIT CARGO_UNIT
FSMT

Type Cargo

Type CARBO_BASE

Field(s)

CARBO_BASE:Board(ToCarrier)

Boards the cargo to a Carrier.

The event will create a movement (= running or driving) of the cargo to the Carrier. The cargo must be in the UnLoaded state.

Parameter

Controllable#CONTROLLABLE CARBO_BASE.CargoCarrier

The alive DCS object carrying the cargo. This value can be nil, meaning, that the cargo is not contained anywhere...

Controllable#CONTROLLABLE CARBO_BASE.CargoObject

The alive DCS object representing the cargo. This value can be nil, meaning, that the cargo is not represented anywhere...

CARBO_BASE.CargoScheduler
#string CARBO_BASE.ClassName
#boolean CARBO_BASE.Containable

This flag defines if the cargo can be contained within a DCS Unit.

CARBO_BASE:IsNear(PointVec2)

Check if CargoCarrier is near the Cargo to be Loaded.

Parameter

Return value

#boolean:

CARBO_BASE:Load(ToCarrier)

Loads the cargo to a Carrier.

The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. The cargo must be in the UnLoaded state.

Parameter

#boolean CARBO_BASE.Moveable

This flag defines if the cargo is moveable.

#string CARBO_BASE.Name

A string defining the name of the cargo. The name is the unique identifier of the cargo.

#number CARBO_BASE.NearRadius

(optional) A number defining the radius in meters when the cargo is near to a Carrier, so that it can be loaded.

CARBO_BASE:New(Type, Name, Weight, ReportRadius, NearRadius)

CARBO_BASE Constructor.

This class is an abstract class and should not be instantiated.

Parameters

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARBO_BASE:

CARBO_BASE:OnAfterBoarding(Controllable)

Parameter

CARBO_BASE:OnAfterLoaded(Controllable)

Parameter

CARBO_BASE:OnAfterUnBoarding(Controllable)

Parameter

CARBO_BASE:OnAfterUnLoaded(Controllable)

Parameter

CARBO_BASE:OnBeforeBoarding(Controllable)

Parameter

Return value

#boolean:

CARBO_BASE:OnBeforeLoaded(Controllable)

Parameter

Return value

#boolean:

CARBO_BASE:OnBeforeUnBoarding(Controllable)

Parameter

Return value

#boolean:

CARBO_BASE:OnBeforeUnLoaded(Controllable)

Parameter

Return value

#boolean:

#number CARBO_BASE.ReportRadius

(optional) A number defining the radius in meters when the cargo is signalling or reporting to a Carrier.

#boolean CARBO_BASE.Representable

This flag defines if the cargo can be represented by a DCS Unit.

#boolean CARBO_BASE.Slingloadable

This flag defines if the cargo can be slingloaded.

CARBO_BASE:Spawn(PointVec2)

Template method to spawn a new representation of the CARBO_BASE in the simulator.

Parameter

  • PointVec2 :

Return value

#CARBO_BASE:

#string CARBO_BASE.Type

A string defining the type of the cargo. eg. Engineers, Equipment, Screwdrivers.

CARBO_BASE:UnBoard(ToPointVec2)

UnBoards the cargo to a Carrier.

The event will create a movement (= running or driving) of the cargo from the Carrier. The cargo must be in the Loaded state.

Parameter

  • Point#POINT_VEC2 ToPointVec2 : (optional) @{Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location.

CARBO_BASE:UnLoad(ToPointVec2)

UnLoads the cargo to a Carrier.

The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. The cargo must be in the Loaded state.

Parameter

  • Point#POINT_VEC2 ToPointVec2 : (optional) @{Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location.

#number CARBO_BASE.Weight

A number defining the weight of the cargo. The weight is expressed in kg.

CARBO_BASE:__Board(DelaySeconds, ToCarrier)

Boards the cargo to a Carrier.

The event will create a movement (= running or driving) of the cargo to the Carrier. The cargo must be in the UnLoaded state.

Parameters

  • #number DelaySeconds : The amount of seconds to delay the action.

  • Controllable#CONTROLLABLE ToCarrier : The Carrier that will hold the cargo.

CARBO_BASE:__Load(DelaySeconds, ToCarrier)

Loads the cargo to a Carrier.

The event will load the cargo into the Carrier regardless of its position. There will be no movement simulated of the cargo loading. The cargo must be in the UnLoaded state.

Parameters

  • #number DelaySeconds : The amount of seconds to delay the action.

  • Controllable#CONTROLLABLE ToCarrier : The Carrier that will hold the cargo.

CARBO_BASE:__UnBoard(DelaySeconds, ToPointVec2)

UnBoards the cargo to a Carrier.

The event will create a movement (= running or driving) of the cargo from the Carrier. The cargo must be in the Loaded state.

Parameters

  • #number DelaySeconds : The amount of seconds to delay the action.

  • Point#POINT_VEC2 ToPointVec2 : (optional) @{Point#POINT_VEC2) to where the cargo should run after onboarding. If not provided, the cargo will run to 60 meters behind the Carrier location.

CARBO_BASE:__UnLoad(DelaySeconds, ToPointVec2)

UnLoads the cargo to a Carrier.

The event will unload the cargo from the Carrier. There will be no movement simulated of the cargo loading. The cargo must be in the Loaded state.

Parameters

  • #number DelaySeconds : The amount of seconds to delay the action.

  • Point#POINT_VEC2 ToPointVec2 : (optional) @{Point#POINT_VEC2) to where the cargo will be placed after unloading. If not provided, the cargo will be placed 60 meters behind the Carrier location.

Type CARBO_BASE.CargoObjects

Type CARGO_GROUP

Field(s)

Set#SET_BASE CARGO_GROUP.CargoSet

A set of cargo objects.

#string CARGO_GROUP.ClassName
#string CARGO_GROUP.Name

A string defining the name of the cargo group. The name is the unique identifier of the cargo.

CARGO_GROUP:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_GROUP constructor.

Parameters

  • Set#Set_BASE CargoSet :

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARGO_GROUP:

Type CARGO_GROUPED

Field(s)

#string CARGO_GROUPED.ClassName
CARGO_GROUPED:New(CargoSet, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_GROUPED constructor.

Parameters

  • Set#Set_BASE CargoSet :

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARGO_GROUPED:

CARGO_GROUPED:onafterUnBoarding(ToPointVec2, Event, From, To)

UnBoard Event.

Parameters

CARGO_GROUPED:onenterBoarding(CargoCarrier, Event, From, To)

Enter Boarding State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_GROUPED:onenterLoaded(CargoCarrier, Event, From, To)

Enter Loaded State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_GROUPED:onenterUnBoarding(ToPointVec2, Event, From, To)

Enter UnBoarding State.

Parameters

CARGO_GROUPED:onenterUnLoaded(Point, Event, From, To, ToPointVec2)

Enter UnLoaded State.

Parameters

  • Point : POINT_VEC2

  • #string Event :

  • #string From :

  • #string To :

  • ToPointVec2 :

CARGO_GROUPED:onleaveBoarding(CargoCarrier, Event, From, To)

Leave Boarding State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_GROUPED:onleaveUnBoarding(ToPointVec2, Event, From, To)

Leave UnBoarding State.

Parameters

Type CARGO_PACKAGE

Field(s)

CARGO_PACKAGE.CargoCarrier
CARGO_PACKAGE.CargoInAir
#string CARGO_PACKAGE.ClassName
CARGO_PACKAGE:IsNear(CargoCarrier)

Check if CargoCarrier is near the Cargo to be Loaded.

Parameter

Return value

#boolean:

CARGO_PACKAGE:New(CargoCarrier, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_PACKAGE Constructor.

Parameters

  • Unit#UNIT CargoCarrier : The UNIT carrying the package.

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARGO_PACKAGE:

CARGO_PACKAGE:onafterLoad(FsmP, Event, From, To, CargoCarrier, Speed, LoadDistance, Angle)

Load Event.

Parameters

CARGO_PACKAGE:onafterOnBoard(FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, Angle, LoadDistance)

Board Event.

Parameters

CARGO_PACKAGE:onafterOnBoarded(FsmP, Event, From, To, CargoCarrier, Speed, BoardDistance, LoadDistance, Angle)

Boarded Event.

Parameters

CARGO_PACKAGE:onafterUnBoard(FsmP, Event, From, To, Speed, UnLoadDistance, UnBoardDistance, Radius, Angle, CargoCarrier)

UnBoard Event.

Parameters

  • StateMachine#STATEMACHINE_PROCESS FsmP :

  • #string Event :

  • #string From :

  • #string To :

  • #number Speed :

  • #number UnLoadDistance :

  • #number UnBoardDistance :

  • #number Radius :

  • #number Angle :

  • CargoCarrier :

CARGO_PACKAGE:onafterUnBoarded(FsmP, Event, From, To, CargoCarrier, Speed)

UnBoarded Event.

Parameters

CARGO_PACKAGE:onafterUnLoad(FsmP, Event, From, To, Distance, Angle, CargoCarrier, Speed)

UnLoad Event.

Parameters

Type CARGO_REPRESENTABLE

Field(s)

#string CARGO_REPRESENTABLE.ClassName
CARGO_REPRESENTABLE:New(CargoObject, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_REPRESENTABLE Constructor.

Parameters

  • Controllable#Controllable CargoObject :

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARGO_REPRESENTABLE:

CARGO_REPRESENTABLE:RouteTo(ToPointVec2, Speed)

Route a cargo unit to a PointVec2.

Parameters

Return value

#CARGO_REPRESENTABLE:

Type CARGO_UNIT

Field(s)

CARGO_UNIT.CargoCarrier
CARGO_UNIT.CargoInAir
CARGO_UNIT.CargoObject
#string CARGO_UNIT.ClassName
CARGO_UNIT:New(CargoUnit, Type, Name, Weight, ReportRadius, NearRadius)

CARGO_UNIT Constructor.

Parameters

  • Unit#UNIT CargoUnit :

  • #string Type :

  • #string Name :

  • #number Weight :

  • #number ReportRadius : (optional)

  • #number NearRadius : (optional)

Return value

#CARGO_UNIT:

CARGO_UNIT.OnUnLoadedCallBack
CARGO_UNIT:onafterBoard(Event, From, To, CargoCarrier)

Board Event.

Parameters

  • #string Event :

  • #string From :

  • #string To :

  • CargoCarrier :

CARGO_UNIT:onafterUnBoarding(ToPointVec2, Event, From, To)

UnBoard Event.

Parameters

CARGO_UNIT:onenterBoarding(CargoCarrier, Event, From, To)

Enter Boarding State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_UNIT:onenterLoaded(CargoCarrier, Event, From, To)

Loaded State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_UNIT:onenterUnBoarding(ToPointVec2, Event, From, To)

Enter UnBoarding State.

Parameters

CARGO_UNIT:onenterUnLoaded(Point, Event, From, To, ToPointVec2)

Enter UnLoaded State.

Parameters

  • Point : POINT_VEC2

  • #string Event :

  • #string From :

  • #string To :

  • ToPointVec2 :

CARGO_UNIT:onleaveBoarding(CargoCarrier, Event, From, To)

Leave Boarding State.

Parameters

  • Unit#UNIT CargoCarrier :

  • #string Event :

  • #string From :

  • #string To :

CARGO_UNIT:onleaveUnBoarding(ToPointVec2, Event, From, To)

Leave UnBoarding State.

Parameters