diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/shared/point_posecontroller.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/shared/point_posecontroller.h')
| -rw-r--r-- | mp/src/game/shared/point_posecontroller.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/mp/src/game/shared/point_posecontroller.h b/mp/src/game/shared/point_posecontroller.h new file mode 100644 index 00000000..593b0a17 --- /dev/null +++ b/mp/src/game/shared/point_posecontroller.h @@ -0,0 +1,150 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Controls the pose parameters of a model
+//
+//===========================================================================//
+
+
+#define MAX_POSE_CONTROLLED_PROPS 4 // Number of entities by the same name that can be controlled
+
+
+// Type of frequency modulations
+enum PoseController_FModType_t
+{
+ POSECONTROLLER_FMODTYPE_NONE = 0,
+ POSECONTROLLER_FMODTYPE_SINE,
+ POSECONTROLLER_FMODTYPE_SQUARE,
+ POSECONTROLLER_FMODTYPE_TRIANGLE,
+ POSECONTROLLER_FMODTYPE_SAWTOOTH,
+ POSECONTROLLER_FMODTYPE_NOISE,
+
+ POSECONTROLLER_FMODTYPE_TOTAL,
+};
+
+
+#ifndef CLIENT_DLL
+//-----------------------------------------------------------------------------
+// SERVER CLASS
+//-----------------------------------------------------------------------------
+
+#include "baseentity.h"
+
+
+class CPoseController : public CBaseEntity
+{
+public:
+ DECLARE_CLASS( CPoseController, CBaseEntity );
+ DECLARE_SERVERCLASS();
+ DECLARE_DATADESC();
+
+ virtual void Spawn( void );
+
+ void Think( void );
+
+ void BuildPropList( void );
+ void BuildPoseIndexList( void );
+ void SetPoseIndex( int i, int iValue );
+ void SetCurrentPose( float fCurrentPoseValue );
+
+ float GetPoseValue( void );
+
+ void SetProp( CBaseAnimating *pProp );
+ void SetPropName( const char *pName );
+ void SetPoseParameterName( const char *pName );
+ void SetPoseValue( float fValue );
+ void SetInterpolationTime( float fValue );
+ void SetInterpolationWrap( bool bWrap );
+ void SetCycleFrequency( float fValue );
+ void SetFModType( int nType );
+ void SetFModTimeOffset( float fValue );
+ void SetFModRate( float fValue );
+ void SetFModAmplitude( float fValue );
+ void RandomizeFMod( float fExtremeness );
+
+ // Input handlers
+ void InputSetPoseParameterName( inputdata_t &inputdata );
+ void InputSetPoseValue( inputdata_t &inputdata );
+ void InputSetInterpolationTime( inputdata_t &inputdata );
+ void InputSetCycleFrequency( inputdata_t &inputdata );
+ void InputSetFModType( inputdata_t &inputdata );
+ void InputSetFModTimeOffset( inputdata_t &inputdata );
+ void InputSetFModRate( inputdata_t &inputdata );
+ void InputSetFModAmplitude( inputdata_t &inputdata );
+ void InputRandomizeFMod( inputdata_t &inputdata );
+ void InputGetFMod( inputdata_t &inputdata );
+
+private:
+
+ CNetworkArray( EHANDLE, m_hProps, MAX_POSE_CONTROLLED_PROPS ); // Handles to controlled models
+ CNetworkArray( unsigned char, m_chPoseIndex, MAX_POSE_CONTROLLED_PROPS ); // Pose parameter indices for each model
+
+ bool m_bDisablePropLookup;
+
+ CNetworkVar( bool, m_bPoseValueParity );
+
+ string_t m_iszPropName; // Targetname of the models to control
+ string_t m_iszPoseParameterName; // Pose parameter name to control
+
+ CNetworkVar( float, m_fPoseValue ); // Normalized pose parameter value (maps to each pose parameter's min and max range)
+ CNetworkVar( float, m_fInterpolationTime ); // Interpolation speed for client matching absolute pose values
+ CNetworkVar( bool, m_bInterpolationWrap ); // Interpolation for the client wraps 0 to 1.
+
+ CNetworkVar( float, m_fCycleFrequency ); // Cycles per second
+
+ // Frequency modulation variables
+ CNetworkVar( PoseController_FModType_t, m_nFModType );
+ CNetworkVar( float, m_fFModTimeOffset );
+ CNetworkVar( float, m_fFModRate );
+ CNetworkVar( float, m_fFModAmplitude );
+};
+
+
+#else //#ifndef CLIENT_DLL
+//-----------------------------------------------------------------------------
+// CLIENT CLASS
+//-----------------------------------------------------------------------------
+
+#include "c_baseentity.h"
+#include "fx_interpvalue.h"
+
+
+class C_PoseController : public C_BaseEntity
+{
+public:
+ DECLARE_CLASS( C_PoseController, C_BaseEntity );
+ DECLARE_CLIENTCLASS();
+
+ virtual void Spawn( void );
+ virtual void OnDataChanged( DataUpdateType_t updateType );
+
+ virtual void ClientThink( void );
+
+private:
+
+ void UpdateModulation( void );
+ void UpdatePoseCycle( float fCycleAmount );
+ void SetCurrentPose( float fCurrentPoseValue );
+
+
+ // Networked variables
+ EHANDLE m_hProps[MAX_POSE_CONTROLLED_PROPS];
+ unsigned char m_chPoseIndex[MAX_POSE_CONTROLLED_PROPS];
+ bool m_bPoseValueParity;
+ float m_fPoseValue;
+ float m_fInterpolationTime;
+ bool m_bInterpolationWrap;
+ float m_fCycleFrequency;
+ PoseController_FModType_t m_nFModType;
+ float m_fFModTimeOffset;
+ float m_fFModRate;
+ float m_fFModAmplitude;
+ bool m_bOldPoseValueParity;
+
+ float m_fCurrentPoseValue; // Actual pose value cycled by the frequency and modulation
+ float m_fCurrentFMod; // The current fequency modulation amount (stored for noise walk)
+
+ CInterpolatedValue m_PoseTransitionValue;
+};
+
+
+#endif //#ifndef CLIENT_DLL
\ No newline at end of file |