Files
GTASource/game/Peds/PedDebugVisualiser.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

856 lines
25 KiB
C++

#ifndef PED_DEBUG_VISUALISER_H
#define PED_DEBUG_VISUALISER_H
#include "grcore/debugdraw.h"
#define PEDDEBUGVISUALISER DEBUG_DRAW
#if PEDDEBUGVISUALISER
#define PEDDEBUGVISUALISER_ONLY(x) x
#else
#define PEDDEBUGVISUALISER_ONLY(x)
#endif
#if PEDDEBUGVISUALISER
// rage headers
#include "atl/array.h"
#include "atl/string.h"
#include "bank/bank.h"
#include "bank/bkmgr.h"
#include "crmotiontree/nodefactory.h"
#include "vector/vector3.h"
// game headers
#include "animation/debug/AnimDebug.h"
#include "Streaming/streamingrequest.h"
#include "Task/Physics/TaskNM.h"
namespace rage {
class fwPtrList;
}
class CPed;
#include <string>
class CEntity;
class CObject;
class CTask;
class CDynamicEntity;
class CVehicle;
class CClipDebugIterator : public crmtIterator
{
public:
CClipDebugIterator( const Vector3& worldCoords, crmtNode* referenceNode = NULL)
{
(void)referenceNode;
m_worldCoords = worldCoords;
m_noOfTexts = 0;
};
~CClipDebugIterator() {};
// PURPOSE: Iterator visit override
virtual void Visit(crmtNode&);
static atString GetClipDebugInfo(const crClip* pClip, float Time, float weight, bool& addedContent);
s32 GetNoOfLines() const { return m_noOfTexts; }
protected:
float CalcVisibleWeight(crmtNode& node);
Vector3 m_worldCoords;
int m_noOfTexts;
};
#if !__FINAL
class CPedDebugVisualiser
{
friend class CPedDebugVisualiserMenu;
friend class CDamageDebugInfo;
public:
enum ePedDebugVisMode
{
eOff,
eTasksFullDebugging,
eTasksNoText,
eVehicleEntryDebug,
ePedNames,
eModelInformation,
eAnimationDebugging,
eFacialDebugging,
eVisibilityDebugging,
eGestureDebugging,
eIKDebugging,
eCombatDebugging,
eRelationshipDebugging,
ePedGroupDebugging,
eMovementDebugging,
eRagdollDebugging,
eRagdollTypeDebugging,
eQueriableStateDebugging,
ePedAmbientAnimations,
ePedDragging,
ePedLookAboutScoring,
eScanners,
eAvoidance,
eScriptHistory,
eAudioContexts,
eTaskHistory,
eCurrentEvents,
eEventHistory,
eMissionStatus,
eNavigation,
eStealth,
eAssistedMovement,
eAttachment,
eLOD,
eMotivation,
eWanted,
eOrder,
ePersonalities,
ePedFlags,
eDamage,
eCombatDirector,
eTargeting,
eFocusAiPedTargeting,
ePopulationInfo,
eArrestInfo,
eVehLockInfo,
ePlayerCoverSearchInfo,
ePlayerInfo,
eParachuteInfo,
eMelee,
eSimpleCombat, // please keep this last in the list
eNumModes
};
enum ePedDebugNMDebugMode
{
eNMOff,
eNMInteractiveShooter,
eNMInteractiveGrabber,
eNumNMDebugModes
};
static ePedDebugVisMode eDisplayDebugInfo;
static ePedDebugNMDebugMode eDebugNMMode;
static float ms_fDefaultVisualiseRange; // initialised to DEFAULT_VISUALISE_RANGE
static float ms_fVisualiseRange; // initialised to ms_fDefaultVisualiseRange each frame
CPedDebugVisualiser() { }
~CPedDebugVisualiser() { }
#if !__FINAL
void VisualiseAll();
#endif
void VisualisePedsNearPlayer();
void VisualisePlayer();
void VisualiseDamage(const CPed& ped, const bool bOnlyDamageRecords = false) const;
static ePedDebugVisMode GetDebugDisplay() { return eDisplayDebugInfo; }
static void SetDebugDisplay(ePedDebugVisMode mode) { eDisplayDebugInfo = mode; }
static void SetDetailedDamageDisplay(const bool Val) { ms_bDetailedDamageDisplay = Val; }
static bool GetDetailedDamageDisplay() { return ms_bDetailedDamageDisplay; }
static void DisplayPedDamageRecords(const bool bDisplay, const bool bDetailed = false);
private:
void VisualiseStateHistoryForTask(const CTask& task, const Vector3& WorldCoors, s32 iAlpha, s32& iNoOfTexts, char* tmp) const;
void VisualiseText(const CPed& ped) const;
void VisualiseBoundingVolumes(CPed& ped) const;
void VisualiseHitSidesToPlayer(CPed& ped) const;
void VisualiseTasks(const CPed& ped) const;
void VisualiseVehicleEntryDebug(const CPed& ped) const;
void VisualisePosition(const CPed& ped) const;
void VisualiseFOV(const CPed& ped) const;
bool VisualiseCombatText(const CPed& ped) const;
bool VisualiseSimpleCombatText(const CPed& ped) const;
bool VisualiseRelationshipText(const CPed& ped) const;
bool VisualisePedGroupText(const CPed& ped) const;
bool VisualiseAnimation(const CDynamicEntity& dynamicEntity) const;
bool VisualiseFacial(const CDynamicEntity& dynamicEntity) const;
bool VisualiseGesture(const CPed& ped) const;
bool VisualiseVisibility(const CDynamicEntity& dynamicEntity) const;
bool VisualiseIK(const CPed& ped) const;
bool VisualiseQueriableState(const CPed& ped) const;
bool VisualiseMovement(const CPed& ped) const;
bool VisualiseRagdoll(const CPed& ped) const;
bool VisualiseRagdollType(const CPed& ped) const;
bool VisualiseAmbientAnimations(const CPed& ped) const;
bool VisualiseModelInformation(const CPed& ped) const;
bool VisualisePedNames(const CPed& ped) const;
// Visualise the player ped's scoring, unless there is a focus ped then visualise that ped's scoring.
bool VisualiseLookAbout(const CEntity& entity) const;
void VisualiseScanners(const CPed& ped) const;
void VisualiseAvoidance(const CPed& ped) const;
void VisualiseNavigation(const CPed& ped) const;
void VisualiseScriptHistory(const CPed& ped) const;
void VisualiseAudioContexts(const CPed& ped) const;
void VisualiseTaskHistory(const CPed& ped) const;
void VisualiseCurrentEvents(const CPed& ped) const;
void VisualiseEventHistory(const CPed& ped) const;
void VisualiseMissionStatus(const CPed& ped) const;
void VisualiseStealth(const CPed& ped) const;
void VisualiseAssistedMovement(const CPed& ped) const;
void VisualiseAttachments(const CPed& ped) const;
void VisualiseLOD(const CPed& ped) const;
void VisualiseMotivation(const CPed& ped)const;
void VisualiseWanted(const CPed& ped)const;
void VisualiseOrder(const CPed& ped)const;
void VisualisePersonalities(const CPed& ped)const;
void VisualisePedFlags(const CPed& ped)const;
void VisualiseCombatDirector(const CPed& ped)const;
void VisualiseTargeting(const CPed& ped)const;
void VisualiseFocusAiPedTargeting(const CPed& ped)const;
void VisualisePopulationInfo(const CPed& ped) const;
void VisualiseArrestInfo(const CPed& ped) const;
void VisualiseVehicleLockInfo(const CPed& ped) const;
void VisualisePlayerCoverSearchInfo(const CPed& ped) const;
void VisualisePlayerInfo(const CPed& ped) const;
void VisualiseParachuteInfo(const CPed& ped) const;
void VisualiseMelee(const CPed& ped) const;
void VisualisePed(const CPed& ped) const;
void VisualiseVehicle(const CVehicle& vehicle) const;
void VisualiseObject(const CObject& object) const;
void VisualiseNearbyVehicles(const CPed& ped) const;
void VisualiseOneVehicle(const CPed& ped, const CVehicle& vehicle) const;
void VisualiseTextViaMenu(const CPed& ped) const;
void VisualiseRelationships(const CPed& ped) const;
void VisualiseEntityName(const CEntity& entity, const char* strName) const;
void DebugJacking();
class CTextDisplayFlags
{
public:
bool m_bDisplayAnimList;
bool m_bDisplayTasks;
bool m_bDisplayPersonality;
CTextDisplayFlags();
~CTextDisplayFlags() {}
};
static CTextDisplayFlags m_textDisplayFlags;
static bool ms_bDetailedDamageDisplay;
};
#endif // !__FINAL
#if !__FINAL
struct TNavMeshRouteDebugToggles
{
public:
TNavMeshRouteDebugToggles()
{
m_bUseFreeSpaceRefVal = false;
m_bFavourFreeSpaceGreaterThanRefVal = false;
m_bUseDirectionalCover = false;
m_iFreeSpaceRefVal = 0;
m_vThreatOrigin = Vector2(0.0f, 0.0f);
m_bGoToPointAnyMeans = false;
}
bool m_bUseFreeSpaceRefVal;
bool m_bFavourFreeSpaceGreaterThanRefVal;
int m_iFreeSpaceRefVal;
bool m_bUseDirectionalCover;
Vector2 m_vThreatOrigin;
bool m_bGoToPointAnyMeans;
};
class CPedDebugVisualiserMenu
{
private:
enum eSearchType
{
CLOSEST,
LEFT,
RIGHT
};
class CMenuFlags
{
public:
bool m_bDisplayAddresses;
bool m_bDisplayTasks;
bool m_bDisplayTaskHierarchy;
bool m_bDisplayEvents;
bool m_bDisplayHitSides;
bool m_bDisplayBoundingVolumes;
bool m_bDisplayGroupInfo;
bool m_bDisplayAnimatedCol;
bool m_bDisplayCombatDirectorAnimStreaming;
bool m_bDisplayPrimaryTaskStateHistory;
bool m_bDisplayMovementTaskStateHistory;
bool m_bDisplayMotionTaskStateHistory;
bool m_bDisplaySecondaryTaskStateHistory;
bool m_bVisualisePedsInVehicles;
bool m_bOnlyDisplayForFocus;
bool m_bFocusPedDisplayIn2D;
bool m_bOnlyDisplayForPlayers;
bool m_bDontDisplayForMounts;
bool m_bDontDisplayForDeadPeds;
bool m_bDontDisplayForPlayer;
bool m_bDontDisplayForRiders;
bool m_bDisplayDebugShooting;
bool m_bVisualiseRelationships;
bool m_bVisualiseDefensiveAreas;
bool m_bDisableVisualiseDefensiveAreasForDeadPeds;
bool m_bVisualiseSecondaryDefensiveAreas;
bool m_bVisualiseAttackWindowForFocusPed;
bool m_bVisualiseNearbyLadders;
bool m_bDisplayPedBravery;
bool m_bDisplayCoverSearch;
bool m_bDisplayCoverLineTests;
bool m_bDisplayPedGroups;
bool m_bDisableEvasiveDives;
bool m_bDisableFlinchReactions;
bool m_bLogPedSpeech;
bool m_bDisplayDebugAccuracy;
bool m_bDisplayScriptTaskHistoryCodeTasks;
bool m_bDisplayPedSpatialArray;
bool m_bDisplayVehicleSpatialArray;
bool m_bLogAIEvents;
bool m_bDisplayDamageRecords;
bool m_bRenderInitialSpawnPoint;
CMenuFlags();
~CMenuFlags() {}
};
private:
static CPedDebugVisualiser m_debugVis;
public:
static void Initialise();
static void Shutdown();
#if __BANK
static void InitBank();
static void CreateBank();
static void ShutdownBank();
// Pointer to the main RAG bank
static bkBank* ms_pBank;
static bkButton* ms_pCreateButton;
#endif
static void Process();
static void Render();
// Registered with CDebugScene, called any time the focus entity is changed
static void OnChangeFocusPedCB(CEntity * pEntity);
static void InitMovementGroupWidget(bkBank & bank);
static bool IsDisplayingOnlyForFocus() { return (ms_menuFlags.m_bOnlyDisplayForFocus); }
static bool IsFocusPedDisplayIn2D() { return (ms_menuFlags.m_bFocusPedDisplayIn2D); }
static bool IsDisplayingOnlyForPlayers() { return (ms_menuFlags.m_bOnlyDisplayForPlayers); }
static void SetDisplayingOnlyForPlayers(bool b) { ms_menuFlags.m_bOnlyDisplayForPlayers = b; }
static bool IsDisplayingForPlayer() { return (!ms_menuFlags.m_bDontDisplayForPlayer); }
static bool GetDisplayDebugShooting() { return (ms_menuFlags.m_bDisplayDebugShooting); }
static bool IsVisualisingRelationships() { return (ms_menuFlags.m_bVisualiseRelationships); }
static bool IsVisualisingDefensiveAreas() { return (ms_menuFlags.m_bVisualiseDefensiveAreas); }
static bool DisableVisualisingDefensiveAreasForDeadPeds() { return (ms_menuFlags.m_bDisableVisualiseDefensiveAreasForDeadPeds); }
static bool IsVisualisingSecondaryDefensiveAreas() { return (ms_menuFlags.m_bVisualiseSecondaryDefensiveAreas); }
static bool IsVisualisingAttackWindowForFocusPed() { return (ms_menuFlags.m_bVisualiseAttackWindowForFocusPed); }
static bool GetDisplayDebugAccuracy() {return (ms_menuFlags.m_bDisplayDebugAccuracy);}
static bool IsDebugPedDraggingActivated(void);
static void UpdatePedDragging(void);
static bool IsNMInteractiveShooterActivated(void);
static void UpdateNMInteractiveShooter(void);
static bool IsNMInteractiveGrabberActivated(void);
static void UpdateNMInteractiveGrabber(void);
static bool IsDebugDefensiveAreaDraggingActivated(void);
static bool IsDebugDefensiveAreaSecondary();
static void UpdateDefensiveAreaDragging(void);
static float GetCopSearchRadius(void);
static bool GetForceAllCops(void);
static void SetForceAllCops(bool bForce);
static bool ShouldDisableEvasiveDives() { return (ms_menuFlags.m_bDisableEvasiveDives); }
static bool ShouldDisableFlinchReactions() { return (ms_menuFlags.m_bDisableFlinchReactions); }
static bool ShouldLogPedSpeech() { return (ms_menuFlags.m_bLogPedSpeech); }
static void PrintTestHarnessParamsCB();
static void TestHarnessCB();
static void WarpToStartCB();
static void StopThreatResponse();
static void ChangeFocusToPlayer();
static void SetSelectedConfigFlagsOnFocusPed();
static void ClearSelectedConfigFlagsOnFocusPed();
static void SetSelectedPostPhysicsResetFlagsOnFocusPed();
static void ClearSelectedPostPhysicsResetFlagsOnFocusPed();
static void SpewRelationShipGroupsToTTY();
static void AddRelationShipGroup();
static void RemoveRelationShipGroup();
static void SetRelationShipGroup();
static void SetBlipPedsInRelationshipGroup();
static void SetRelationshipBetweenGroups();
static void GetRelationshipBetweenGroups();
static void ToggleFriendlyFire();
#if __BANK
static s32 GetModelOverrideScenario();
#endif
static u32 ms_FlushLogTime;
static CMenuFlags ms_menuFlags;
static int ms_nRagdollDebugDrawBone;
static float ms_fRagdollApplyForceFactor;
static float ms_fNMInteractiveShooterShotForce;
static float ms_fNMInteractiveGrabLeanAmount;
static bool ms_bUseHandCuffs;
static bool ms_bUseAnkleCuffs;
static bool ms_bFreezeRelativeWristPositions;
static bool ms_bAnimPoseArms;
static float ms_bHandCuffLength;
static bool ms_bUseLeftArmIK;
static bool ms_bUseRightArmIK;
static Vector3 ms_vTargetLeftArmIK;
static Vector3 ms_vTargetRightArmIK;
static float ms_fArmIKBlendInTime;
static float ms_fArmIKBlendOutTime;
static float ms_fArmIKBlendInRange;
static float ms_fArmIKBlendOutRange;
static bool ms_bUseOriginalPosAsTarget;
static bool ms_bUseBoneAndOffset;
static bool ms_bTargetInWorldSpace;
static bool ms_bTargetWRTHand;
static bool ms_bTargetWRTPointHelper;
static bool ms_bTargetWRTIKHelper;
static bool ms_bUseAnimAllowTags;
static bool ms_bUseAnimBlockTags;
static bool ms_bHeadIKEnable;
static Vector3 ms_vHeadIKTarget;
static bool ms_bHeadIKUseWorldSpace;
static float ms_fHeadIKBlendInTime;
static float ms_fHeadIKBlendOutTime;
static float ms_fHeadIKTime;
static bool ms_bSlowTurnRate;
static bool ms_bFastTurnRate;
static bool ms_bWideYawLimit;
static bool ms_bWidestYawLimit;
static bool ms_bWidePitchLimit;
static bool ms_bWidestPitchLimit;
static bool ms_bNarrowYawLimit;
static bool ms_bNarrowestYawLimit;
static bool ms_bNarrowPitchLimit;
static bool ms_bNarrowestPitchLimit;
static bool ms_bWhileNotInFOV;
static bool ms_bUseEyesOnly;
static Vector3 ms_vLookIKTarget;
static bool ms_bLookIKEnable;
static bool ms_bLookIKUseWorldSpace;
static bool ms_bLookIKUseCamPos;
static bool ms_bLookIkUsePlayerPos;
static bool ms_bLookIKUpdateTarget;
static bool ms_bLookIkUseTags;
static bool ms_bLookIkUseTagsFromAnimViewer;
static bool ms_bLookIkUseAnimAllowTags;
static bool ms_bLookIkUseAnimBlockTags;
static u8 ms_uRefDirTorso;
static u8 ms_uRefDirNeck;
static u8 ms_uRefDirHead;
static u8 ms_uRefDirEye;
static u8 ms_uRotLimTorso[2];
static u8 ms_uRotLimNeck[2];
static u8 ms_uRotLimHead[2];
static u8 ms_uTurnRate;
static u8 ms_auBlendRate[2];
static u8 ms_uHeadAttitude;
static u8 ms_auArmComp[2];
static bool ms_bRouteRoundCarTest;
static ePedConfigFlagsBitSet ms_DebugPedConfigFlagsBitSet;
static ePedResetFlagsBitSet ms_DebugPedPostPhysicsResetFlagsBitSet;
static bool ms_bDebugPostPhysicsResetFlagActive;
static TNavMeshRouteDebugToggles ms_NavmeshRouteDebugToggles;
enum eFocusPedTasks
{
eNoTask=0,
eFollowEntityOffset,
eStandStill,
eFacePlayer,
eAddToPlayerGroup,
eRemoveFromPlayerGroup,
eWander,
eCarDriveWander,
eUnalerted,
eFlyingWander,
eSwimmingWander,
eGoToPointToCameraPos,
eFlyToPointToCameraPos,
eFollowNavmeshToMeasuringToolStopExactly,
eFollowNavMeshToCameraPos,
eGenericMoveToCameraPos,
eFollowNavMeshToCameraPosWithSlide,
eFollowNavMeshAndSlideInSequence,
eSlideToCoordToCameraPos,
eSetMoveTaskTargetToCameraPos,
eSetDesiredHeadingToFaceCamera,
eWalkAlongsideClosestPed,
eTaskDie,
eTestSequencePlayer,
eTestMelee,
eSeekCover,
eUseMobilePhone,
eHandsUp,
eEvasiveStep,
eAvoidanceTest,
eGetOffBoat,
eDefendCurrentPosition,
eEnterNearestCar,
eShuffleBetweenSeats,
eExitNearestCar,
eClearCharTasks,
eFlushCharTasks,
eDriveToLocator,
eGoDirectlyIntoCover,
eMobileChat,
eMobileChat2Way,
eShootAtPoint,
eGoToPointShooting,
eGoToPointShootingPlayer,
eUseNearestScenario,
eUseNearestScenarioWarp,
eFallAndGetup,
eClimbUp,
eClimbVault,
eReactToCarCollision,
eNavMeshAndTurnToFacePedInSequence,
eNMRelax,
eNMPose,
#if __DEV
eNMBindPose,
#endif // __DEV
eNMShootingWhileAttached,
eNMBrace,
eNMBuoyancy,
eNMShot,
eNMMeleeHit,
eNMHighFall,
eNMBalance,
eNMBalanceGrab,
eNMDrunk,
//eNMStumble,
eNMExplosion,
eNMOnFire,
eNMFlinch,
eNMRollUp,
eNMFallOverWall,
eNMRiverRapids,
eTreatAccident,
eDropOverEdge,
eDragInjuredToSafety,
eVariedAimPose,
eCombat,
eCowerCrouched,
eCowerStanding,
eShellShocked,
eReachArm,
eMoveFaceTarget,
eShockingBackAway,
eShockingHurryAway,
eShockingReact,
eSharkAttack,
eSharkCircleForever,
eCallPolice,
eBeastJump,
eNumFocusPedTasks
};
enum eFocusPedEvents
{
eNoEvent = 0,
eCarUndriveable,
eClimbNavMeshOnRoute,
eGunshot,
ePotentialGetRunOver,
eRanOverPed,
eScriptCommand,
eShockingCarCrash,
eShockingBicycleCrash,
eShockingDrivingOnPavement,
eShockingDeadBody,
eShockingRunningPed,
eShockingGunShotFired,
eShockingWeaponThreat,
eShockingCarStolen,
eShockingInjuredPed,
eShockingGunfight1,
eShockingGunfight2,
eShockingSeenPedKilled,
eNumFocusPedEvents
};
#if __BANK
static bkCombo * m_pRelationshipsCombo;
static bkCombo * m_pTasksCombo;
static bkCombo * m_pEventsCombo;
static bkCombo * m_pFormationCombo;
#endif
static s32 m_iRelationshipsComboIndex;
static atArray<const char*> m_scenarioNames;
static atArray<s32> m_ScenarioComboTypes;
static s32 m_iScenarioComboIndex;
static atArray<eFocusPedTasks> m_TaskComboTypes;
static s32 m_iTaskComboIndex;
static atArray<eFocusPedEvents> m_EventComboTypes;
static s32 m_iEventComboIndex;
static atArray<u32> m_MovementGroupComboIDs;
static s32 m_iMovementGroupComboIndex;
static atArray<u32> m_FormationComboIDs;
static s32 m_iFormationComboIndex;
static float m_fFormationSpacing;
static float m_fFormationAccelDist;
static float m_fFormationDecelDist;
static u32 m_iFormationSpacingScriptId;
static bool ms_bDebugSearchPositions;
static bool ms_bRagdollContinuousTestCode;
static bool ms_bRenderRagdollTypeText;
static bool ms_bRenderRagdollTypeSpheres;
#if __DEV
static bkToggle * m_pToggleAssertIfFocusPedFailsToFindNavmeshRoute;
static bool m_bAssertIfFocusPedFailsToFindNavmeshRoute;
static void OnAssertIfFocusPedFailsToFindNavmeshRoute();
#endif
#if __BANK
static bool ms_bUseNewLocomotionTask;
static char ms_onFootClipSetText[60];
static CDebugClipSelector m_alternateAnimSelector;
static float m_alternateAnimBlendDuration;
static bool m_alternateAnimLooped;
static bool m_actionModeRun;
// Start params
static Matrix34 m_StartMat;
static bool m_bUseStartPos;
// Vehicle debug options
//
static s32 m_Mission;
static RegdEnt m_TargetEnt;
static Vector3 m_TargetPos;
static s32 m_DrivingFlags;
static float m_StraightLineDistance;
static float m_TargetReachedDistance;
static float m_CruiseSpeed;
static float m_fHeliOrientation;
static s32 m_iFlightHeight;
static s32 m_iMinHeightAboveTerrain;
static bool m_abDrivingFlags[32];
//Plane testing
static bool ms_bTestPlaneAttackPlayer;
static bool ms_bTestPlanePlayerControl;
static s32 ms_iTestPlaneNumToSpawn;
static Vector3 m_goToTarget;
static s32 ms_iTestPlaneType;
// Relationship groups
static bool ms_BlipPedsInRelGroup;
static char ms_addRemoveSetRelGroupText[60];
static char ms_RelGroup1Text[60];
static char ms_RelGroup2Text[60];
// Event History options
static bool ms_bShowRemovedEvents;
static bool ms_bHideFocusedPedsEventHistoryText;
static bool ms_bShowFocusedPedsEventPositions;
static bool ms_bShowFocusedPedsEventPositionsStateInfo;
#endif //__BANK
private:
#if __BANK
static void StartAlternateWalkAnimSelectedPed();
static void EndAlternateWalkAnimSelectedPed();
static void ToggleActionMode();
static void ToggleMovementModeOverride();
#endif // __BANK
static void ToggleDisplayAddresses(void);
static void ToggleVisualisePedsInVehicles(void);
static void ToggleDisplayGroupInfo(void);
static void ToggleDisplayAnims(void);
static void ToggleDisplayTaskHeirarchies(void);
static void ToggleDisplayEvents(void);
static void ToggleDisplayPersonality(void);
static void ToggleDisplayAttractors(void);
static void ToggleDisplayAnimatedCol(void);
static void TogglePlayerInvincibility();
static void TogglePlayerInvincibilityRestoreHealth();
static void ChangeFormationSpacing();
static void ToggleDisplayCoverPoints(void);
static void DisplayNearbyPedIDs();
static void DisplayGroupInfo();
static void DisplayPedInfo(const CPed& ped);
static void DisplayPedID(const CPed& ped);
static void DisplayDamageRecords();
static void RenderInitialSpawnPointOfSelectedPed();
// Displays the relationships by drawing lines between the focus peds and all other related peds
static void ChangeFocusToClosestToPlayer();
static void ChangeFocusForwards();
static void ChangeFocusBack();
static void ChangeFocus(int iDir);
// IK
static void UpdateHeadBoneLimits();
static void IKHeadTest1();
static void IKHeadTest2();
static void IKHeadTest3();
static void IKHeadTest4();
static void IKHeadTest5();
static void IKHeadTest6();
static void IKHeadTest7();
static void ProcessHeadIK();
static void ProcessLookIK();
static void ProcessArmIK();
static void IKArmTest1();
static void IKArmTest2();
static void IKArmTest3();
static void IKArmTest4();
static void IKArmTest5();
static void IKLegTest1();
static void IKLegTest2();
static void IKLegTest3();
static void IKLegTest4();
static void IKLegTest5();
static void ProcessRouteRoundCarTest();
static void AddTaskStandStill();
static void AddOrRemovePedFromGroup(CPed * pLeaderPed, CPed * pFollower, bool bAdd);
static void AddTaskGotoPlayer();
static void MoveFollowEntityOffset();
static void AttackPlayersCar();
static void DropPedAtCameraPos();
public:
static void IncreaseWantedLevel();
static void DecreaseWantedLevel();
static void TriggerArrest();
static void ForceSpawnInArea();
static void MakePedFollowNavMeshToCoord(CPed * pPed, const Vector3 & vPos);
static void AssistedMovement_DesertTest(int iTestArea);
static void ToggleAllowLegInterpenetration(void);
static void SpewRagdollTaskInfo(void);
static void PrintRagdollUsageData(void);
static void ToggleNaturalMotionAnimPose(void);
static void ToggleNaturalMotionHandCuffs(void);
static void ToggleNaturalMotionAnkleCuffs(void);
static void ToggleNaturalMotionFlagDebug(void);
static void ToggleNaturalMotionAPILog(void);
static void ToggleDistributedTasksEnabled(void);
static void ReloadTaskParameters(void);
static void ReloadBlendFromNmSets(void);
static void UpdateBlendFromNmSetsWidgets(void);
static void ReloadWeaponTargetSequences(void);
static void SwitchPedToNMBehaviour(CTask* TaskNM);
static void SwitchPedToRagdollCB(void);
static void SwitchPedToNMBalanceCB(void) {SwitchPedToNMBehaviour(NULL);}
static void SwitchPedToAnimatedCB(void);
static void SwitchPedToDrivenRagdollCB(void);
static void ForcePedToAnimatedCB(void);
static void SwitchToStaticFrameCB(void);
static void ClearAllBehavioursCB(void);
static void SetRelaxMessageCB(void);
static void UnlockPedRagdollCB(void);
static void FixPedPhysicsCB(void);
static void TriggerRagdollTestCodeCB(void);
static void RagdollContinuousDebugCode(void);
static CPed* GetFocusPed(void);
static void CreatePolicePursuitCB(void);
static void CreateVehiclePolicePursuitCB(void);
static void CreateJetTest(void);
static void CreateHeliTest(void);
static void SendNMFallOverInstructionToFocusEntity(void);
static void ApplyOnFootClipSetToSelectedPed(void);
private:
static void WantedLevelAlwaysZero();
static void SwitchPlayerToFocusPed();
// Force the game to run special logic dealing with the player trying to leave the map.
static void TriggerWorldExtentsProtection();
// Test shark spawning.
static void TriggerSharkSpawnToCamera();
static void KillFocusPed(void);
static void ReviveFocusPed(void);
static void JamesDebugTest(void);
static void OnSelectTaskCombo(void);
static void OnSelectEventCombo(void);
static void OnSelectFormationCombo();
#if __BANK
static void SetVehicleMissionTargetEntity(void);
static void ClearVehicleMissionTargetEntity(void);
static void SetStartPosToMeasuringTool(void);
static void SetStartPosToDebugCam(void);
static void SetStartPosToFocusPos(void);
static void SetVehicleMissionTargetPosToMeasuringTool(void);
static void SetVehicleMissionTargetPosToDebugCam(void);
static void SetVehicleMissionTargetPosToFocusPos(void);
static void SetVehicleMissionTargetPosToRandomRoadPos(void);
static void SetVehicleDrivingFlags(void);
#endif
static void DropWeaponCB(void);
static CPed* FindPed(const CPed* pPed, const Vector3& vCurrentDirectoin, eSearchType searchType);
static void MakeFocusPedMoveScenarioToCamera();
};
#endif // !__FINAL
#endif // PEDDEBUGVISUALISER
#endif // PED_DEBUG_VISUALISER_H