#pragma once #ifndef AI_ACTION_HPP #define AI_ACTION_HPP #include #include "AI_Fuzzy.hpp" #include "AI_TacticInterface.hpp" #include "aiutils.hpp" namespace MW4AI { namespace Actions { void Fire(TacticInterface& i, FireStyles::FireStyleID style); enum MoveType { MOVE_FORWARD, MOVE_BACKWARD, MOVE_TO_FACE_TARGET }; void ApproachTarget(TacticInterface& i, MoveType move_type); void ApproachTarget(TacticInterface& i, Stuff::Scalar when); void FleeTarget(TacticInterface& i); void Jump(TacticInterface& i); void Crouch(TacticInterface& i); void ThrottleOverride(TacticInterface& i); void FleeNearest(TacticInterface& i, Stuff::Scalar nearest); void Disengage(TacticInterface& i, Stuff::Scalar distance); void FindBetterLineOfFire(TacticInterface& i); void GoToDistanceFromTarget(TacticInterface& i, Stuff::Scalar distance, MoveType move_type); void GoToDistanceFromNearestEnemy(TacticInterface& i, Stuff::Scalar distance, MoveType move_type); void GoToOtherSideOfTarget(TacticInterface& i, Stuff::Scalar distance); void StopIfMoving(TacticInterface& i); void Dodge(TacticInterface& i, Stuff::Scalar distance, MoveType move_type); void Circle(TacticInterface& i, MoveType move_type, Stuff::Scalar distance = 0); void CircleRandomly(TacticInterface& i); void CircleFloat(TacticInterface& i, Stuff::Scalar distance); void CircleToBehindTarget(TacticInterface& i, Stuff::Scalar maximum); void CircleToFrontOfTarget(TacticInterface& i, Stuff::Scalar maximum); void MoveForward(TacticInterface& i, Stuff::Scalar distance); void CircleTargetNearEnemies(TacticInterface& i, Stuff::Scalar distance); void GoBehindTarget(TacticInterface& i, Stuff::Scalar min_distance); void GoInFrontOfTarget(TacticInterface& i, Stuff::Scalar min_distance); void ForceDestinationRecalc(TacticInterface& i); void RamTarget(TacticInterface& i, Stuff::Scalar recalc_tolerance = 8.0f); void PatrolWithinRadiusOfAttackOrderPosition(TacticInterface& i, Stuff::Scalar inner_radius, Stuff::Scalar outer_radius); void JumpToHeight(TacticInterface& i, Stuff::Scalar height); enum FastCircleMoveType { MOVE_CLOSER, MOVE_FARTHER, MOVE_RANDOM }; void DoFastCircle(TacticInterface& i, FastCircleMoveType move_type); enum TrackTarget { TO_TARGET, TO_NEAREST_ENEMY, TO_NEAREST_ENEMY_OR_TARGET }; void Track(TacticInterface& i, TrackTarget target, bool fTrack = true, bool fTurn = true, bool fPitch = false); bool ShouldMoveForwardToPoint(TacticInterface& i, const Stuff::Point3D& dest); extern bool g_HelicoptersIgnoreMissionBounds; }; }; #endif // AI_ACTION