Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef EXPRESSIONSAMPLE_H
#define EXPRESSIONSAMPLE_H
#ifdef _WIN32
#pragma once
#endif
#include "interpolatortypes.h"
class CUtlBuffer; class ISceneTokenProcessor; class IChoreoStringPool;
#pragma pack(1)
struct EdgeInfo_t { EdgeInfo_t() : m_bActive( false ), m_CurveType( CURVE_DEFAULT ), m_flZeroPos( 0.0f ) { }
bool m_bActive; unsigned short m_CurveType; float m_flZeroPos; };
struct CExpressionSample { CExpressionSample() : value( 0.0f ), time( 0.0f ) { selected = 0; m_curvetype = CURVE_DEFAULT; }
void SetCurveType( int curveType ) { m_curvetype = curveType; }
int GetCurveType() const { return m_curvetype; }
// Height
float value; // time from start of event
float time;
unsigned short selected : 1; private: unsigned short m_curvetype : 15; }; #pragma pack()
//-----------------------------------------------------------------------------
// Purpose: Provides generic access to scene or event ramp data
//-----------------------------------------------------------------------------
class ICurveDataAccessor { public: virtual ~ICurveDataAccessor(){} virtual float GetDuration() = 0; virtual bool CurveHasEndTime() = 0; // only matters for events
virtual int GetDefaultCurveType() = 0; };
//-----------------------------------------------------------------------------
// Purpose: The generic curve data
//-----------------------------------------------------------------------------
class CCurveData { public: int GetCount( void ); CExpressionSample *Get( int index ); CExpressionSample *Add( float time, float value, bool selected ); void Delete( int index ); void Clear( void ); void Resort( ICurveDataAccessor *data );
EdgeInfo_t *GetEdgeInfo( int idx );
void SetEdgeInfo( bool leftEdge, int curveType, float zero ); void GetEdgeInfo( bool leftEdge, int& curveType, float& zero ) const; void SetEdgeActive( bool leftEdge, bool state ); bool IsEdgeActive( bool leftEdge ) const; int GetEdgeCurveType( bool leftEdge ) const; float GetEdgeZeroValue( bool leftEdge ) const; void RemoveOutOfRangeSamples( ICurveDataAccessor *data );
void SaveToBuffer( CUtlBuffer& buf, IChoreoStringPool *pStringPool ); bool RestoreFromBuffer( CUtlBuffer& buf, IChoreoStringPool *pStringPool );
void Parse( ISceneTokenProcessor *tokenizer, ICurveDataAccessor *data ); void FileSave( CUtlBuffer& buf, int level, const char *name );
float GetIntensity( ICurveDataAccessor *data, float time ); CExpressionSample *GetBoundedSample( ICurveDataAccessor *data, int number, bool& bClamped );
CCurveData & operator = (const CCurveData &src) { // Copy ramp over
m_Ramp.RemoveAll(); int i; for ( i = 0; i < src.m_Ramp.Count(); i++ ) { CExpressionSample sample = src.m_Ramp[ i ]; CExpressionSample *newSample = Add( sample.time, sample.value, sample.selected ); newSample->SetCurveType( sample.GetCurveType() ); } m_RampEdgeInfo[ 0 ] = src.m_RampEdgeInfo[ 0 ]; m_RampEdgeInfo[ 1 ] = src.m_RampEdgeInfo[ 1 ];
return *this;
};
private: CUtlVector< CExpressionSample > m_Ramp; EdgeInfo_t m_RampEdgeInfo[ 2 ];
public: float GetIntensityArea( ICurveDataAccessor *data, float time );
private: void UpdateIntensityArea( ICurveDataAccessor *data ); CUtlVector< float > m_RampAccumulator; };
#endif // EXPRESSIONSAMPLE_H
|