vphysics_jolt/vphysics_jolt/vjolt_surfaceprops.h

61 lines
1.9 KiB
C++

#pragma once
struct JoltSurfaceProp
{
surfacedata_t data;
};
class JoltPhysicsMaterialIndexSaveOps : public CDefSaveRestoreOps
{
public:
void Save( const SaveRestoreFieldInfo_t &fieldInfo, ISave *pSave ) override;
void Restore( const SaveRestoreFieldInfo_t& fieldInfo, IRestore* pRestore ) override;
bool IsEmpty( const SaveRestoreFieldInfo_t &fieldInfo ) override;
void MakeEmpty( const SaveRestoreFieldInfo_t &fieldInfo ) override;
static JoltPhysicsMaterialIndexSaveOps& GetInstance() { return s_Instance; }
private:
static JoltPhysicsMaterialIndexSaveOps s_Instance;
};
class JoltPhysicsSurfaceProps final : public IPhysicsSurfaceProps
{
public:
JoltPhysicsSurfaceProps();
int ParseSurfaceData( const char *pFilename, const char *pTextfile ) override;
int SurfacePropCount( void ) const override;
int GetSurfaceIndex( const char *pSurfacePropName ) const override;
void GetPhysicsProperties( int surfaceDataIndex, float *density, float *thickness, float *friction, float *elasticity ) const override;
surfacedata_t *GetSurfaceData( int surfaceDataIndex ) override;
const char *GetString( unsigned short stringTableIndex ) const override;
const char *GetPropName( int surfaceDataIndex ) const override;
void SetWorldMaterialIndexTable( int *pMapArray, int mapSize ) override;
void GetPhysicsParameters( int surfaceDataIndex, surfacephysicsparams_t *pParamsOut ) const override;
ISaveRestoreOps *GetMaterialIndexDataOps() const override_portal2;
public:
static JoltPhysicsSurfaceProps& GetInstance() { return s_PhysicsSurfaceProps; }
unsigned short RegisterSound( const char *pName );
private:
static JoltPhysicsSurfaceProps s_PhysicsSurfaceProps;
CUtlStringMap< JoltSurfaceProp > m_SurfaceProps;
CUtlSymbolTable m_SoundStrings;
static constexpr UtlSymId_t BaseMaterialIdx = UtlSymId_t( 0 );
KeyValues *SurfacePropsToKeyValues( const char *pszBuffer );
};