Files
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

134 lines
3.4 KiB
C++

// Filename : TaskNMDrunk.h
// Description: Code version of original script drunk routine.
#ifndef INC_TASKNMDRUNK_H_
#define INC_TASKNMDRUNK_H_
// --- Include Files ------------------------------------------------------------
// Game headers
#include "Task/System/Task.h"
#include "Task\System\TaskTypes.h"
#include "Task/System/Tuning.h"
#include "Task/Physics/TaskNM.h"
#if ENABLE_DRUNK
// ------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CTaskNMDrunk //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CTaskNMDrunk : public CTaskNMBehaviour
{
public:
struct Tunables : CTuning
{
Tunables();
float m_fMinHeadingDeltaToFixTurn;
float m_fHeadingRandomizationRange;
s32 m_iHeadingRandomizationTimeMin;
s32 m_iHeadingRandomizationTimeMax;
float m_fForceLeanInDirectionAmountMax;
float m_fForceLeanInDirectionAmountMin;
float m_fForceRampMinSpeed;
float m_fForceRampMaxSpeed;
float m_fHeadLookHeadingRandomizationRange;
float m_fHeadLookPitchRandomizationRange;
s32 m_iHeadLookRandomizationTimeMin;
s32 m_iHeadlookRandomizationTimeMax;
float m_fMinHeadingDeltaToIdleTurn;
s32 m_iRunningTimeForVelocityBasedStayupright;
float m_fStayUprightForceNonVelocityBased;
float m_fStayUprightForceMoving;
float m_fStayUprightForceIdle;
float m_fFallingSpeedForHighFall;
bool m_bDrawIdleHeadLookTarget;
bool m_bUseStayUpright;
CNmTuningSet m_Start;
CNmTuningSet m_Base;
CNmTuningSet m_Moving;
CNmTuningSet m_Idle;
PAR_PARSABLE;
};
CTaskNMDrunk(u32 nMinTime, u32 nMaxTime);
~CTaskNMDrunk();
////////////////////////
// CTaskSimple functions
#if !__FINAL
virtual atString GetName() const {return m_strTaskName;}
#endif
virtual aiTask* Copy() const {return rage_new CTaskNMDrunk(m_nMinTime, m_nMaxTime);}
virtual int GetTaskTypeInternal() const {return CTaskTypes::TASK_NM_DRUNK;}
///////////////////////////
// CTaskNMBehaviour functions
virtual void BehaviourFailure(CPed* pPed, ARTFeedbackInterfaceGta* pFeedbackInterface);
protected:
virtual void StartBehaviour(CPed* pPed);
virtual void ControlBehaviour(CPed* pPed);
virtual bool FinishConditions(CPed* pPed);
////////////////////////
// CTaskFSMClone functions
virtual CTaskInfo* CreateQueriableState() const
{
taskAssertf(false, "[CTaskNMDrunk::CreateQueriableState() const] This task has not been networked yet.");
return NULL;
}
//////////////////////////
// Local functions and data
private:
enum eStates // for internal state machine.
{
STANDING,
STAGGERING,
TEETERING,
FALLING,
ON_GROUND
};
eStates m_eState;
// Tunable parameters: /////////////////
#if __BANK
public:
#else // __BANK
private:
#endif // __BANK
bool m_bBalanceFailed;
bool m_bWasInFixedTurnRange;
bool m_bFixedTurnRight;
// variables for slightly randomising the target sent to nm.
u32 m_iNextChangeTime;
float m_fExtraHeading;
float m_fExtraPitch;
#if !__FINAL
// For debugging the internal state machine.
atString m_strTaskName;
#endif // !__FINAL
static Tunables sm_Tunables;
};
#endif // ENABLE_DRUNK
#endif // ! INC_TASKNMDRUNK_H_