class AIDriveCommandsDelegate extends ScriptBehaviorDelegate
{
	private var useKinematic : Bool;
	private var needDriver : Bool;
	private var splineRef : NodeRef;
	private var secureTimeOut : Float;
	private var forcedStartSpeed : Float;
	private var stopAtPathEnd : Bool;
	private var driveBackwards : Bool;
	private var reverseSpline : Bool;
	private var startFromClosest : Bool;
	private var keepDistanceBool : Bool;
	private var keepDistanceCompanion : weak< GameObject >;
	private var keepDistanceDistance : Float;
	private var rubberBandingBool : Bool;
	private var rubberBandingTargetRef : weak< GameObject >;
	private var rubberBandingTargetForwardOffset : Float;
	private var rubberBandingMinDistance : Float;
	private var rubberBandingMaxDistance : Float;
	private var rubberBandingStopAndWait : Bool;
	private var rubberBandingTeleportToCatchUp : Bool;
	private var rubberBandingStayInFront : Bool;
	private var audioCurvesParam : vehicleAudioCurvesParam;
	private var allowSimplifiedMovement : Bool;
	private var ignoreTickets : Bool;
	private var disabeStuckDetection : Bool;
	private var aggressiveRammingEnabled : Bool;
	private var useSpeedBasedLookupRange : Bool;
	private var tryDriveAwayFromPlayer : Bool;
	private var targetPosition : Vector3;
	private var maxSpeed : Float;
	private var minSpeed : Float;
	private var clearTrafficOnPath : Bool;
	private var minimumDistanceToTarget : Float;
	private var emergencyPatrol : Bool;
	private var numPatrolLoops : Uint32;
	private var driveDownTheRoadIndefinitely : Bool;
	private var ignoreChaseVehiclesLimit : Bool;
	private var boostDrivingStats : Bool;
	private var m_driveOnSplineCommand : AIVehicleOnSplineCommand;

	public export function DoStartDriveOnSpline( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleOnSplineCommand;
		cmd = m_driveOnSplineCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		splineRef = cmd.splineRef;
		secureTimeOut = cmd.secureTimeOut;
		forcedStartSpeed = cmd.forcedStartSpeed;
		stopAtPathEnd = cmd.stopAtPathEnd;
		driveBackwards = cmd.driveBackwards;
		reverseSpline = cmd.reverseSpline;
		startFromClosest = cmd.startFromClosest;
		keepDistanceBool = cmd.keepDistanceBool;
		keepDistanceCompanion = cmd.keepDistanceCompanion;
		keepDistanceDistance = cmd.keepDistanceDistance;
		rubberBandingBool = cmd.rubberBandingBool;
		rubberBandingTargetRef = cmd.rubberBandingTargetRef;
		rubberBandingTargetForwardOffset = cmd.rubberBandingTargetForwardOffset;
		rubberBandingMinDistance = cmd.rubberBandingMinDistance;
		rubberBandingMaxDistance = cmd.rubberBandingMaxDistance;
		rubberBandingStopAndWait = cmd.rubberBandingStopAndWait;
		rubberBandingTeleportToCatchUp = cmd.rubberBandingTeleportToCatchUp;
		rubberBandingStayInFront = cmd.rubberBandingStayInFront;
		audioCurvesParam = cmd.audioCurvesParam;
		return true;
	}

	public constexpr function DoEndDriveOnSpline() : Bool
	{
		return true;
	}


	private var useTraffic : Bool;
	private var speedInTraffic : Float;
	private var target : weak< GameObject >;
	private var distanceMin : Float;
	private var distanceMax : Float;
	private var stopWhenTargetReached : Bool;
	private var trafficTryNeighborsForStart : Bool;
	private var trafficTryNeighborsForEnd : Bool;
	private var ignoreNoAIDrivingLanes : Bool;
	private var m_driveFollowCommand : AIVehicleFollowCommand;

	public export function DoStartDriveFollow( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleFollowCommand;
		cmd = m_driveFollowCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		target = cmd.target;
		secureTimeOut = cmd.secureTimeOut;
		distanceMin = cmd.distanceMin;
		distanceMax = cmd.distanceMax;
		stopWhenTargetReached = cmd.stopWhenTargetReached;
		useTraffic = cmd.useTraffic;
		trafficTryNeighborsForStart = cmd.trafficTryNeighborsForStart;
		trafficTryNeighborsForEnd = cmd.trafficTryNeighborsForEnd;
		return true;
	}

	public export function DoUpdateDriveFollow( context : ScriptExecutionContext ) : Bool
	{
		if( !( m_driveFollowCommand ) || ( m_driveFollowCommand.target != target ) )
		{
			return false;
		}
		return true;
	}

	public constexpr export function DoEndDriveFollow( context : ScriptExecutionContext ) : Bool
	{
		return true;
	}

	public function DoStopDriveFollow( context : ScriptExecutionContext ) : Bool
	{
		if( m_driveFollowCommand )
		{
			m_driveFollowCommand = NULL;
		}
		return true;
	}


	private var m_driveChaseCommand : AIVehicleChaseCommand;

	public function DoStartDriveChase( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleChaseCommand;
		cmd = m_driveChaseCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		target = cmd.target;
		distanceMin = cmd.distanceMin;
		distanceMax = cmd.distanceMax;
		forcedStartSpeed = cmd.forcedStartSpeed;
		aggressiveRammingEnabled = cmd.aggressiveRamming;
		ignoreChaseVehiclesLimit = cmd.ignoreChaseVehiclesLimit;
		boostDrivingStats = cmd.boostDrivingStats;
		return true;
	}

	public function DoUpdateDriveChase( context : ScriptExecutionContext ) : Bool
	{
		if( !( m_driveChaseCommand ) || ( m_driveChaseCommand.target != target ) )
		{
			return false;
		}
		return true;
	}

	public constexpr static function DoEndDriveChase( context : ScriptExecutionContext ) : Bool
	{
		return true;
	}

	public function DoStopDriveChase( context : ScriptExecutionContext ) : Bool
	{
		if( m_driveChaseCommand )
		{
			m_driveChaseCommand = NULL;
		}
		return true;
	}


	private var m_drivePanicCommand : AIVehiclePanicCommand;

	public function DoStartDrivePanic( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehiclePanicCommand;
		cmd = m_drivePanicCommand;
		allowSimplifiedMovement = cmd.allowSimplifiedMovement;
		ignoreTickets = cmd.ignoreTickets;
		disabeStuckDetection = cmd.disableStuckDetection;
		useSpeedBasedLookupRange = cmd.useSpeedBasedLookupRange;
		tryDriveAwayFromPlayer = cmd.tryDriveAwayFromPlayer;
		needDriver = cmd.needDriver;
		return true;
	}

	public function DoUpdateDrivePanic( context : ScriptExecutionContext ) : Bool
	{
		if( !( m_drivePanicCommand ) )
		{
			return false;
		}
		return true;
	}

	public constexpr static function DoEndDrivePanic( context : ScriptExecutionContext ) : Bool
	{
		return true;
	}

	public function DoStopDrivePanic( context : ScriptExecutionContext ) : Bool
	{
		if( m_drivePanicCommand )
		{
			m_drivePanicCommand = NULL;
		}
		return true;
	}


	private var m_driveToPointAutonomousCommand : AIVehicleDriveToPointAutonomousCommand;

	public function DoStartDriveToPointAutonomous( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleDriveToPointAutonomousCommand;
		cmd = m_driveToPointAutonomousCommand;
		targetPosition = cmd.targetPosition;
		maxSpeed = cmd.maxSpeed;
		minSpeed = cmd.minSpeed;
		clearTrafficOnPath = cmd.clearTrafficOnPath;
		minimumDistanceToTarget = cmd.minimumDistanceToTarget;
		forcedStartSpeed = cmd.forcedStartSpeed;
		driveDownTheRoadIndefinitely = cmd.driveDownTheRoadIndefinitely;
		return true;
	}

	public function DoUpdateDriveToPointAutonomous( context : ScriptExecutionContext ) : Bool
	{
		if( !( m_driveToPointAutonomousCommand ) )
		{
			return false;
		}
		return true;
	}

	public constexpr static function DoEndDriveToPointAutonomous( context : ScriptExecutionContext ) : Bool
	{
		return true;
	}

	public function DoStopDriveToPointAutonomous( context : ScriptExecutionContext ) : Bool
	{
		if( m_driveToPointAutonomousCommand )
		{
			m_driveToPointAutonomousCommand = NULL;
		}
		return true;
	}


	private var m_drivePatrolCommand : AIVehicleDrivePatrolCommand;

	public function DoStartDrivePatrol( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleDrivePatrolCommand;
		cmd = m_drivePatrolCommand;
		maxSpeed = cmd.maxSpeed;
		minSpeed = cmd.minSpeed;
		clearTrafficOnPath = cmd.clearTrafficOnPath;
		emergencyPatrol = cmd.emergencyPatrol;
		numPatrolLoops = cmd.numPatrolLoops;
		forcedStartSpeed = cmd.forcedStartSpeed;
		return true;
	}

	public function DoUpdateDrivePatrol( context : ScriptExecutionContext ) : Bool
	{
		if( !( m_drivePatrolCommand ) )
		{
			return false;
		}
		return true;
	}

	public constexpr static function DoEndDrivePatrol( context : ScriptExecutionContext ) : Bool
	{
		return true;
	}

	public function DoStopDrivePatrol( context : ScriptExecutionContext ) : Bool
	{
		if( m_drivePatrolCommand )
		{
			m_drivePatrolCommand = NULL;
		}
		return true;
	}


	private var nodeRef : NodeRef;
	private var isPlayer : Bool;
	private var forceGreenLights : Bool;
	private var portals : vehiclePortalsList;
	private var m_driveToNodeCommand : AIVehicleToNodeCommand;

	public export function DoStartDriveToNode( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleToNodeCommand;
		cmd = m_driveToNodeCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		nodeRef = cmd.nodeRef;
		stopAtPathEnd = cmd.stopAtPathEnd;
		secureTimeOut = cmd.secureTimeOut;
		isPlayer = cmd.isPlayer;
		useTraffic = cmd.useTraffic;
		speedInTraffic = cmd.speedInTraffic;
		forceGreenLights = cmd.forceGreenLights;
		portals = cmd.portals;
		trafficTryNeighborsForStart = cmd.trafficTryNeighborsForStart;
		trafficTryNeighborsForEnd = cmd.trafficTryNeighborsForEnd;
		ignoreNoAIDrivingLanes = cmd.ignoreNoAIDrivingLanes;
		return true;
	}

	public constexpr export function DoEndDriveToNode() : Bool
	{
		return true;
	}


	private var m_driveRacingCommand : AIVehicleRacingCommand;

	public function DoStartDriveRacing( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleRacingCommand;
		cmd = m_driveRacingCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		splineRef = cmd.splineRef;
		secureTimeOut = cmd.secureTimeOut;
		driveBackwards = cmd.driveBackwards;
		reverseSpline = cmd.reverseSpline;
		startFromClosest = cmd.startFromClosest;
		rubberBandingBool = cmd.rubberBandingBool;
		rubberBandingTargetRef = cmd.rubberBandingTargetRef;
		rubberBandingTargetForwardOffset = cmd.rubberBandingTargetForwardOffset;
		rubberBandingMinDistance = cmd.rubberBandingMinDistance;
		rubberBandingMaxDistance = cmd.rubberBandingMaxDistance;
		rubberBandingStopAndWait = cmd.rubberBandingStopAndWait;
		rubberBandingTeleportToCatchUp = cmd.rubberBandingTeleportToCatchUp;
		rubberBandingStayInFront = cmd.rubberBandingStayInFront;
		return true;
	}

	public constexpr function DoEndDriveRacing() : Bool
	{
		return true;
	}


	private var m_driveJoinTrafficCommand : AIVehicleJoinTrafficCommand;

	public function DoStartDriveJoinTraffic( context : ScriptExecutionContext ) : Bool
	{
		var cmd : AIVehicleJoinTrafficCommand;
		cmd = m_driveJoinTrafficCommand;
		useKinematic = cmd.useKinematic;
		needDriver = cmd.needDriver;
		return true;
	}

	public constexpr function DoEndDriveJoinTraffic() : Bool
	{
		return true;
	}

}

class AIDriveOnSplineCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outUseKinematic : AIArgumentMapping;
	protected editable inlined var m_outNeedDriver : AIArgumentMapping;
	protected editable inlined var m_outSpline : AIArgumentMapping;
	protected editable inlined var m_outSecureTimeOut : AIArgumentMapping;
	protected editable inlined var m_outDriveBackwards : AIArgumentMapping;
	protected editable inlined var m_outReverseSpline : AIArgumentMapping;
	protected editable inlined var m_outStartFromClosest : AIArgumentMapping;
	protected editable inlined var m_outForcedStartSpeed : AIArgumentMapping;
	protected editable inlined var m_outStopAtPathEnd : AIArgumentMapping;
	protected editable inlined var m_outKeepDistanceBool : AIArgumentMapping;
	protected editable inlined var m_outKeepDistanceCompanion : AIArgumentMapping;
	protected editable inlined var m_outKeepDistanceDistance : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingBool : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTargetRef : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTargetForwardOffset : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingMinDistance : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingMaxDistance : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingStopAndWait : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTeleportToCatchUp : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingStayInFront : AIArgumentMapping;
	protected editable inlined var m_outAudioCurvesParam : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehicleOnSplineCommand;
		typedCommand = ( ( AIVehicleOnSplineCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outUseKinematic, typedCommand.useKinematic );
		ScriptExecutionContext.SetMappingValue( context, m_outNeedDriver, typedCommand.needDriver );
		ScriptExecutionContext.SetMappingValue( context, m_outSpline, typedCommand.splineRef );
		ScriptExecutionContext.SetMappingValue( context, m_outSecureTimeOut, typedCommand.secureTimeOut );
		ScriptExecutionContext.SetMappingValue( context, m_outDriveBackwards, typedCommand.driveBackwards );
		ScriptExecutionContext.SetMappingValue( context, m_outReverseSpline, typedCommand.reverseSpline );
		ScriptExecutionContext.SetMappingValue( context, m_outStartFromClosest, typedCommand.startFromClosest );
		ScriptExecutionContext.SetMappingValue( context, m_outForcedStartSpeed, typedCommand.forcedStartSpeed );
		ScriptExecutionContext.SetMappingValue( context, m_outStopAtPathEnd, typedCommand.stopAtPathEnd );
		ScriptExecutionContext.SetMappingValue( context, m_outKeepDistanceBool, typedCommand.keepDistanceBool );
		ScriptExecutionContext.SetMappingValue( context, m_outKeepDistanceCompanion, typedCommand.keepDistanceCompanion );
		ScriptExecutionContext.SetMappingValue( context, m_outKeepDistanceDistance, typedCommand.keepDistanceDistance );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingBool, typedCommand.rubberBandingBool );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTargetRef, typedCommand.rubberBandingTargetRef );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTargetForwardOffset, typedCommand.rubberBandingTargetForwardOffset );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingMinDistance, typedCommand.rubberBandingMinDistance );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingMaxDistance, typedCommand.rubberBandingMaxDistance );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingStopAndWait, typedCommand.rubberBandingStopAndWait );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTeleportToCatchUp, typedCommand.rubberBandingTeleportToCatchUp );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingStayInFront, typedCommand.rubberBandingStayInFront );
		ScriptExecutionContext.SetMappingValue( context, m_outAudioCurvesParam, typedCommand.audioCurvesParam );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

class AIDriveFollowCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outUseKinematic : AIArgumentMapping;
	protected editable inlined var m_outNeedDriver : AIArgumentMapping;
	protected editable inlined var m_outTarget : AIArgumentMapping;
	protected editable inlined var m_outSecureTimeOut : AIArgumentMapping;
	protected editable inlined var m_outDistanceMin : AIArgumentMapping;
	protected editable inlined var m_outDistanceMax : AIArgumentMapping;
	protected editable inlined var m_outStopWhenTargetReached : AIArgumentMapping;
	protected editable inlined var m_outUseTraffic : AIArgumentMapping;
	protected editable inlined var m_outTrafficTryNeighborsForStart : AIArgumentMapping;
	protected editable inlined var m_outTrafficTryNeighborsForEnd : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehicleFollowCommand;
		typedCommand = ( ( AIVehicleFollowCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outUseKinematic, typedCommand.useKinematic );
		ScriptExecutionContext.SetMappingValue( context, m_outNeedDriver, typedCommand.needDriver );
		ScriptExecutionContext.SetMappingValue( context, m_outTarget, typedCommand.target );
		ScriptExecutionContext.SetMappingValue( context, m_outSecureTimeOut, typedCommand.secureTimeOut );
		ScriptExecutionContext.SetMappingValue( context, m_outDistanceMin, typedCommand.distanceMin );
		ScriptExecutionContext.SetMappingValue( context, m_outDistanceMax, typedCommand.distanceMax );
		ScriptExecutionContext.SetMappingValue( context, m_outStopWhenTargetReached, typedCommand.stopWhenTargetReached );
		ScriptExecutionContext.SetMappingValue( context, m_outUseTraffic, typedCommand.useTraffic );
		ScriptExecutionContext.SetMappingValue( context, m_outTrafficTryNeighborsForStart, typedCommand.trafficTryNeighborsForStart );
		ScriptExecutionContext.SetMappingValue( context, m_outTrafficTryNeighborsForEnd, typedCommand.trafficTryNeighborsForEnd );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

class AIDriveToNodeCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outUseKinematic : AIArgumentMapping;
	protected editable inlined var m_outNeedDriver : AIArgumentMapping;
	protected editable inlined var m_outNodeRef : AIArgumentMapping;
	protected editable inlined var m_outSecureTimeOut : AIArgumentMapping;
	protected editable inlined var m_outIsPlayer : AIArgumentMapping;
	protected editable inlined var m_outUseTraffic : AIArgumentMapping;
	protected editable inlined var m_forceGreenLights : AIArgumentMapping;
	protected editable inlined var m_portals : AIArgumentMapping;
	protected editable inlined var m_outTrafficTryNeighborsForStart : AIArgumentMapping;
	protected editable inlined var m_outTrafficTryNeighborsForEnd : AIArgumentMapping;
	protected editable inlined var m_outIgnoreNoAIDrivingLanes : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehicleToNodeCommand;
		typedCommand = ( ( AIVehicleToNodeCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outUseKinematic, typedCommand.useKinematic );
		ScriptExecutionContext.SetMappingValue( context, m_outNeedDriver, typedCommand.needDriver );
		ScriptExecutionContext.SetMappingValue( context, m_outNodeRef, typedCommand.nodeRef );
		ScriptExecutionContext.SetMappingValue( context, m_outSecureTimeOut, typedCommand.secureTimeOut );
		ScriptExecutionContext.SetMappingValue( context, m_outIsPlayer, typedCommand.isPlayer );
		ScriptExecutionContext.SetMappingValue( context, m_outUseTraffic, typedCommand.useTraffic );
		ScriptExecutionContext.SetMappingValue( context, m_forceGreenLights, typedCommand.forceGreenLights );
		ScriptExecutionContext.SetMappingValue( context, m_portals, typedCommand.portals );
		ScriptExecutionContext.SetMappingValue( context, m_outTrafficTryNeighborsForStart, typedCommand.trafficTryNeighborsForStart );
		ScriptExecutionContext.SetMappingValue( context, m_outTrafficTryNeighborsForEnd, typedCommand.trafficTryNeighborsForEnd );
		ScriptExecutionContext.SetMappingValue( context, m_outIgnoreNoAIDrivingLanes, typedCommand.ignoreNoAIDrivingLanes );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

class AIDriveRacingCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outUseKinematic : AIArgumentMapping;
	protected editable inlined var m_outNeedDriver : AIArgumentMapping;
	protected editable inlined var m_outSpline : AIArgumentMapping;
	protected editable inlined var m_outSecureTimeOut : AIArgumentMapping;
	protected editable inlined var m_outDriveBackwards : AIArgumentMapping;
	protected editable inlined var m_outReverseSpline : AIArgumentMapping;
	protected editable inlined var m_outStartFromClosest : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingBool : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTargetRef : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTargetForwardOffset : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingMinDistance : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingMaxDistance : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingStopAndWait : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingTeleportToCatchUp : AIArgumentMapping;
	protected editable inlined var m_outRubberBandingStayInFront : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehicleRacingCommand;
		typedCommand = ( ( AIVehicleRacingCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outUseKinematic, typedCommand.useKinematic );
		ScriptExecutionContext.SetMappingValue( context, m_outNeedDriver, typedCommand.needDriver );
		ScriptExecutionContext.SetMappingValue( context, m_outSpline, typedCommand.splineRef );
		ScriptExecutionContext.SetMappingValue( context, m_outSecureTimeOut, typedCommand.secureTimeOut );
		ScriptExecutionContext.SetMappingValue( context, m_outDriveBackwards, typedCommand.driveBackwards );
		ScriptExecutionContext.SetMappingValue( context, m_outReverseSpline, typedCommand.reverseSpline );
		ScriptExecutionContext.SetMappingValue( context, m_outStartFromClosest, typedCommand.startFromClosest );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingBool, typedCommand.rubberBandingBool );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTargetRef, typedCommand.rubberBandingTargetRef );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTargetForwardOffset, typedCommand.rubberBandingTargetForwardOffset );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingMinDistance, typedCommand.rubberBandingMinDistance );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingMaxDistance, typedCommand.rubberBandingMaxDistance );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingStopAndWait, typedCommand.rubberBandingStopAndWait );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingTeleportToCatchUp, typedCommand.rubberBandingTeleportToCatchUp );
		ScriptExecutionContext.SetMappingValue( context, m_outRubberBandingStayInFront, typedCommand.rubberBandingStayInFront );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

class AIDrivePanicCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outAllowSimplifiedMovement : AIArgumentMapping;
	protected editable inlined var m_outIgnoreTickets : AIArgumentMapping;
	protected editable inlined var m_outDisableStuckDetection : AIArgumentMapping;
	protected editable inlined var m_outUseSpeedBasedLookupRange : AIArgumentMapping;
	protected editable inlined var m_outTryDriveAwayFromPlayer : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehiclePanicCommand;
		typedCommand = ( ( AIVehiclePanicCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outAllowSimplifiedMovement, typedCommand.allowSimplifiedMovement );
		ScriptExecutionContext.SetMappingValue( context, m_outIgnoreTickets, typedCommand.ignoreTickets );
		ScriptExecutionContext.SetMappingValue( context, m_outDisableStuckDetection, typedCommand.disableStuckDetection );
		ScriptExecutionContext.SetMappingValue( context, m_outUseSpeedBasedLookupRange, typedCommand.useSpeedBasedLookupRange );
		ScriptExecutionContext.SetMappingValue( context, m_outTryDriveAwayFromPlayer, typedCommand.tryDriveAwayFromPlayer );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

class AIDriveJoinTrafficCommandHandler extends AICommandHandlerBase
{
	protected editable inlined var m_outUseKinematic : AIArgumentMapping;
	protected editable inlined var m_outNeedDriver : AIArgumentMapping;

	protected override function UpdateCommand( context : ScriptExecutionContext, command : AICommand ) : AIbehaviorUpdateOutcome
	{
		var typedCommand : AIVehicleJoinTrafficCommand;
		typedCommand = ( ( AIVehicleJoinTrafficCommand )( command ) );
		if( !( typedCommand ) )
		{
			return AIbehaviorUpdateOutcome.FAILURE;
		}
		ScriptExecutionContext.SetMappingValue( context, m_outUseKinematic, typedCommand.useKinematic );
		ScriptExecutionContext.SetMappingValue( context, m_outNeedDriver, typedCommand.needDriver );
		return AIbehaviorUpdateOutcome.SUCCESS;
	}

}

