
#pragma once
#ifndef AI_FINDOBJECT_HPP
#define AI_FINDOBJECT_HPP

namespace MechWarrior4 { class Sensor; class MWObject; }

namespace MW4AI
{
	namespace FindObject
	{
		enum Type				// These must match the constants in MWCONST.ABI
		{
			FT_VEHICLE		= 1,	// if specified, include vehicles
			FT_MECH			= 2,	// if specified, include 'Mechs
			FT_AIRPLANE		= 4,	// if specified, include airplanes + helicopters
			FT_BOAT			= 8,	// if specified, include boats
			FT_MFB			= 16,	// if specified, include MFBs
			FT_TURRET		= 32,	// if specified, include turrets

			// the default:
			FT_DEFAULT		= 63,	// include any units: = FT_VEHICLE + FT_MECH + FT_AIRPLANE + FT_BOAT + FT_MFB + FT_HOVER + FT_HELI + FT_BUILDING

			// extras not included in the default
			FT_BUILDING		= 64,	// if specified, take buildings into account
			FT_UNARMED		= 128	// if specified, include unarmed units (such as APCs)
		};

		enum Alignment				// These must match the constants in MWCONST.ABI
		{
			FA_FRIENDLY		= 1,
			FA_ENEMY		= 2,
			FA_NEUTRAL		= 4,
			FA_ANY	= FA_FRIENDLY + FA_ENEMY + FA_NEUTRAL
		};

		enum Criteria				// These must match the constants in MWCONST.ABI
		{
			FC_BEST_TARGET		= 1001,	// change FC_FIRST if you change this
			FC_GREATEST_THREAT	= 1002,
			FC_LEAST_THREAT		= 1003,
			FC_MOST_DAMAGED		= 1004,
			FC_NEAREST			= 1005	// change FC_LAST if you change this
		};

		enum
		{
			FC_FIRST = FC_BEST_TARGET,
			FC_LAST = FC_NEAREST
		};

		enum Flags				// These must match the constants in MWCONST.ABI
		{
			FF_WHO_SHOT		= 1,
			FF_SEEPLAYER	= 2,
			FF_LOOK_EVERYWHERE = 4,
			FF_TARGETLOS	=8
		};

		enum
		{
			DISTANCE_LIMIT = 2000
		};

		long Find(MechWarrior4::MWObject& src,
				  int fa_alignment,
				  int ft_type,
				  int fc_criteria,
				  int ff_flags,
				  Stuff::Scalar distance_limit = (Stuff::Scalar)DISTANCE_LIMIT,
				  const Adept::ObjectID* except_object = 0);
	};
};

#endif AI_FINDOBJECT_HPP
