#pragma once #ifndef AI_TACTICINTERFACE_HPP #define AI_TACTICINTERFACE_HPP #include #include #include "AI_FireStyle.hpp" #include "AI_Moods.hpp" #include "AI_FireData.hpp" namespace MechWarrior4 { class MWObject; }; #define INTERFACE_TacticInterface(post) \ public: \ virtual void MoveTo(const Point3D& point, bool move_forward = true, bool throttle_override = false, MWObject* ram_target = 0) ##post \ virtual bool PointIsValid(const Point3D& point, bool ignore_mission_bounds = false, bool ignore_squads = false) const ##post \ virtual bool HasPath() const ##post \ virtual bool Moving() const ##post \ virtual void Stop() ##post \ virtual void ClearMoveOrder() ##post \ virtual Stuff::Point3D GetAimPoint() const ##post \ virtual void TrackTo(const Stuff::Point3D& point) ##post \ virtual void TurnTo(const Stuff::Point3D& point, bool must_be_torso_twisted = true) ##post \ virtual void PitchTo(const Stuff::Point3D& point) ##post \ virtual Stuff::Scalar WeaponRange(WR_WHO who, WR_QUALIFIER qualifier) const ##post \ virtual void Fire(FireStyles::FireStyleID style = FireStyles::FIRE_MAXIMUM) ##post \ virtual MechWarrior4::MWObject& GetSelf() const ##post \ virtual MechWarrior4::Vehicle* GetSelf_AsVehicle() const ##post \ virtual MechWarrior4::MWObject& GetTarget() const ##post \ virtual MechWarrior4::Vehicle* GetTarget_AsVehicle() const ##post \ virtual MechWarrior4::MWObject* GetNearest(bool fMustBeEnemy = false) ##post \ virtual Stuff::Scalar GetDistanceFromTargetSquared() const ##post \ virtual Stuff::Scalar GetDistanceFromDestinationSquared() const ##post \ virtual Moods::ID GetMood() const ##post \ virtual bool ProjectileApproaching(Stuff::Scalar interval = 4.0f) ##post \ virtual const Stuff::Point3D& GetProjectileOrigin() ##post \ virtual void Stand() ##post \ virtual void Crouch() ##post \ virtual bool Crouching() const ##post \ virtual FireData::HIT_RESULT GetLastHitResult() const ##post \ virtual void ThrottleOverride(Stuff::Scalar duration, bool force = false) ##post \ virtual bool GetLastMoveDest(Stuff::Point3D& dest, bool ignore_movement = false) const ##post \ virtual bool ShotWithin(Stuff::Scalar lastvalid) const ##post \ virtual bool FiredWithin(Stuff::Scalar lastvalid) const ##post \ virtual void Jump(Stuff::Scalar duration) ##post \ virtual void Jump() ##post \ virtual void StopJumping() ##post \ virtual bool GetUnableToFireDuration(Stuff::Scalar duration) const ##post \ virtual bool ShouldForceDestinationRecalc() const ##post \ virtual int GetEliteLevel() const ##post \ virtual Stuff::Scalar GetTimeTargetedByEnemy() const ##post \ virtual Stuff::Scalar GetAttackThrottle() const ##post \ virtual void ForceDestinationRecalc() ##post \ virtual Stuff::Point3D GetMoveDest() const ##post \ virtual Stuff::Scalar GetLastTimeRammedTarget() const ##post \ virtual Stuff::Scalar GetLastTimeJumped() const ##post \ virtual Stuff::LinearMatrix4D GetAttackOrderPosition() const ##post \ virtual Stuff::LinearMatrix4D GetLastMoveOrderPosition() const ##post \ virtual bool GetEscapeRegionFocusIfAvailable(Stuff::Point3D& focus) const ##post \ virtual void SurrenderPose() ##post \ virtual void SetSpeed(Stuff::Scalar speed) ##post \ virtual bool SuicideIsOK() const ##post \ virtual unsigned int NumLegsDestroyed() const ##post \ virtual Stuff::Scalar GetMovementScore() const ##post \ virtual void SetMovementScore(Stuff::Scalar score) ##post \ virtual bool PointIsInBadNeighborhood(const Stuff::Point3D& point) const ##post \ virtual bool ShouldRun() const ##post \ virtual Stuff::Scalar GetCombatRadiusForRange(Stuff::Scalar percentile_range) ##post \ virtual Stuff::Scalar GetNormalizedJumpJetFuel() ##post \ virtual bool CanRetreat() const ##post \ virtual Stuff::Scalar GetCurrentVulnerableComponent() ##post \ virtual bool CanJump() const ##post \ virtual bool CanCrouch() const ##post \ virtual void FloatToPoint(const Stuff::Point3D& point) ##post \ virtual bool IsShootOnlyAI() const ##post \ virtual void SetFallDampingEnabled(bool enabled) ##post \ virtual Adept::ObjectID GetObjectID() const ##post \ virtual Stuff::Scalar GetMaxFireCheatAngle() const ##post \ virtual bool LineMightHitFriendlyUnits(const Stuff::Line3D& line) const ##post \ virtual bool MovedWithin(Stuff::Scalar duration) const ##post \ virtual void ContinuousFlyBy(const Stuff::Point3D& loc) ##post \ virtual bool RecentPathsFailed() const ##post \ virtual bool CanMove() const ##post \ virtual bool MoveRequestPending() const ##post \ virtual bool CanTrack() const ##post \ virtual bool CanTurn() const ##post \ virtual Stuff::Scalar DamageTakenSinceAttackOrder() const ##post \ virtual Stuff::Point3D GetLeashCenter() const ##post \ virtual Stuff::Scalar GetLeashRadius() const ##post #define PURE_TacticInterface INTERFACE_TacticInterface(=0;) #define DERIVED_TacticInterface INTERFACE_TacticInterface(;) namespace MechWarrior4 { class Vehicle; }; namespace MW4AI { class TacticInterface { protected: TacticInterface() {}; virtual ~TacticInterface() {}; public: enum WR_WHO { SELF, TARGET }; enum WR_QUALIFIER { MIN, MAX }; PURE_TacticInterface; }; }; #endif // AI_TACTICINTERFACE_HPP