
#pragma once
#ifndef AI_CONDITION_HPP
#define AI_CONDITION_HPP

#include "AI_Fuzzy.hpp"
#include "AI_TacticInterface.hpp"
#include "aiutils.hpp"



namespace MW4AI
{
	namespace Conditions
	{
		Fuzzy ProjectileApproaching(TacticInterface& i, Stuff::Scalar min_distance = 0);
		Fuzzy HittingSomethingElse(TacticInterface& i);
		Fuzzy AnyWeaponReady(TacticInterface& i);
		Fuzzy Fired(TacticInterface& i, Stuff::Scalar within_when = 5.0f);
		Fuzzy TargetedByEnemy(TacticInterface& i, Stuff::Scalar duration = 0.8f);
		Fuzzy Rammed(TacticInterface& i, Stuff::Scalar duration = 5.0f);

		Fuzzy InsideRadiusOfTarget(TacticInterface& i,
								   Stuff::Scalar radius);
		Fuzzy InsideRadiusOfTarget(TacticInterface&i,
								   Stuff::Scalar radius,
								   Stuff::Scalar when);
		Fuzzy InsideRadiusOfRamTarget(TacticInterface& i,
									  Stuff::Scalar radius);
		Fuzzy InsideWeaponsRadiusOfTarget(TacticInterface& i,
										  TacticInterface::WR_WHO who,
										  TacticInterface::WR_QUALIFIER type,
										  Stuff::Scalar multiplier = 1.0f);
		Fuzzy InsidePercentileRangeOf(TacticInterface& i,
									  Stuff::Scalar percentile_range,
									  bool nearest_enemy = false);
		Fuzzy PlayerWillHitMe(TacticInterface& i,
							  Stuff::Scalar seconds,
							  Stuff::Scalar threshold);
		Fuzzy VehicleCrouching(TacticInterface& i);
		Fuzzy VehicleMoving(TacticInterface& i);
		Fuzzy ClusterFuckingSomeone(TacticInterface& i,
									Stuff::Scalar radius = 10.0f);
		Fuzzy FacingTarget(TacticInterface& i);
		Fuzzy InFrontOfTarget(TacticInterface& i, bool fUseTorso = false);
		Fuzzy JumpedWithin(TacticInterface& i, Stuff::Scalar duration);
		bool Jumping(TacticInterface& i);
		Fuzzy CanBeSeenByTarget(TacticInterface& i, Stuff::Scalar within_distance = 600.0f);
		Fuzzy IsHighOffGround(TacticInterface& i);

		Fuzzy EliteLevelBetween(TacticInterface& i, UserConstants::ID min, UserConstants::ID max);
		Fuzzy AttackThrottleBetween(TacticInterface& i, Stuff::Scalar min, Stuff::Scalar max);
	};
};




#endif // AI_CONDITION_HPP
