import enum vehiclePoliceStrategy : Uint8
{
	None,
	DriveTowardsPlayer,
	DriveAwayFromPlayer,
	PatrolNearby,
	InterceptAtNextIntersection,
	GetToPlayerFromAnywhere,
	InitialSearch,
	SearchFromAnywhere,
	Count,
}

import class BaseStrategyRequest extends IScriptable
{
	private import var strategy : vehiclePoliceStrategy;
	import var distanceRange : Vector2;
	import var minDirectDistance : Float;

	public const function GetStrategy() : vehiclePoliceStrategy
	{
		return strategy;
	}

}

import class DriveTowardsPlayerStrategyRequest extends BaseStrategyRequest
{

	public static function Create( spawnDistanceRange : Vector2, minDirectDist : Float ) : DriveTowardsPlayerStrategyRequest
	{
		var request : DriveTowardsPlayerStrategyRequest;
		request = new DriveTowardsPlayerStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.minDirectDistance = minDirectDist;
		return request;
	}

}

import class DriveAwayFromPlayerStrategyRequest extends BaseStrategyRequest
{

	public static function Create( spawnDistanceRange : Vector2, minDirectDist : Float ) : DriveAwayFromPlayerStrategyRequest
	{
		var request : DriveAwayFromPlayerStrategyRequest;
		request = new DriveAwayFromPlayerStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.minDirectDistance = minDirectDist;
		return request;
	}

}

import class PatrolNearbyStrategyRequest extends BaseStrategyRequest
{
	import var angleRange : Vector2;

	public static function Create( spawnDistanceRange : Vector2, spawnAngleRange : Vector2 ) : PatrolNearbyStrategyRequest
	{
		var request : PatrolNearbyStrategyRequest;
		request = new PatrolNearbyStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.angleRange = spawnAngleRange;
		return request;
	}

}

import class InterceptAtNextIntersectionStrategyRequest extends BaseStrategyRequest
{
	import var distancesToIntersectionRatio : Float;

	public static function Create( spawnDistanceRange : Vector2, minDirectDist : Float ) : InterceptAtNextIntersectionStrategyRequest
	{
		var request : InterceptAtNextIntersectionStrategyRequest;
		request = new InterceptAtNextIntersectionStrategyRequest;
		request.distanceRange.X = 100.0;
		request.distanceRange.Y = 200.0;
		request.distancesToIntersectionRatio = 0.5;
		request.minDirectDistance = minDirectDist;
		return request;
	}

}

import class GetToPlayerFromAnywhereStrategyRequest extends BaseStrategyRequest
{

	public static function Create( spawnDistanceRange : Vector2, minDirectDist : Float ) : GetToPlayerFromAnywhereStrategyRequest
	{
		var request : GetToPlayerFromAnywhereStrategyRequest;
		request = new GetToPlayerFromAnywhereStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.minDirectDistance = minDirectDist;
		return request;
	}

}

import class InitialSearchStrategyRequest extends BaseStrategyRequest
{

	public static function Create( spawnDistanceRange : Vector2, minDirectDist : Float ) : InitialSearchStrategyRequest
	{
		var request : InitialSearchStrategyRequest;
		request = new InitialSearchStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.minDirectDistance = minDirectDist;
		return request;
	}

}

import class SearchFromAnywhereStrategyRequest extends BaseStrategyRequest
{
	import var angleRange : Vector2;

	public static function Create( spawnDistanceRange : Vector2, spawnAngleRange : Vector2 ) : SearchFromAnywhereStrategyRequest
	{
		var request : SearchFromAnywhereStrategyRequest;
		request = new SearchFromAnywhereStrategyRequest;
		request.distanceRange = spawnDistanceRange;
		request.angleRange = spawnAngleRange;
		return request;
	}

}

