summaryrefslogtreecommitdiff
path: root/cheat/gmod/IPhysicsSurfaceProps.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'cheat/gmod/IPhysicsSurfaceProps.hpp')
-rw-r--r--cheat/gmod/IPhysicsSurfaceProps.hpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/cheat/gmod/IPhysicsSurfaceProps.hpp b/cheat/gmod/IPhysicsSurfaceProps.hpp
new file mode 100644
index 0000000..d7003f2
--- /dev/null
+++ b/cheat/gmod/IPhysicsSurfaceProps.hpp
@@ -0,0 +1,79 @@
+#pragma once
+
+struct surfacephysicsparams_t {
+ // vphysics physical properties
+ float friction;
+ float elasticity; // collision elasticity - used to compute coefficient of restitution
+ float density; // physical density (in kg / m^3)
+ float thickness; // material thickness if not solid (sheet materials) in inches
+ float dampening;
+};
+
+struct surfaceaudioparams_t {
+ float reflectivity; // like elasticity, but how much sound should be reflected by this surface
+ float hardnessFactor; // like elasticity, but only affects impact sound choices
+ float roughnessFactor; // like friction, but only affects scrape sound choices
+ float roughThreshold; // surface roughness > this causes "rough" scrapes, < this causes "smooth" scrapes
+ float hardThreshold; // surface hardness > this causes "hard" impacts, < this causes "soft" impacts
+ float hardVelocityThreshold; // collision velocity > this causes "hard" impacts, < this causes "soft" impacts
+ float highPitchOcclusion; //a value betweeen 0 and 100 where 0 is not occluded at all and 100 is silent (except for any additional reflected sound)
+ float midPitchOcclusion;
+ float lowPitchOcclusion;
+};
+
+struct surfacesoundnames_t {
+ unsigned short walkStepLeft;
+ unsigned short walkStepRight;
+ unsigned short runStepLeft;
+ unsigned short runStepRight;
+ unsigned short impactSoft;
+ unsigned short impactHard;
+ unsigned short scrapeSmooth;
+ unsigned short scrapeRough;
+ unsigned short bulletImpact;
+ unsigned short rolling;
+ unsigned short breakSound;
+ unsigned short strainSound;
+};
+
+struct surfacegameprops_t {
+ float maxspeedfactor;
+ float jumpfactor;
+ float penetrationmodifier;
+ float damagemodifier;
+ uint16_t material;
+ uint8_t climbable;
+};
+
+struct surfacedata_t {
+ surfacephysicsparams_t physics; // physics parameters
+ surfaceaudioparams_t audio; // audio parameters
+ surfacesoundnames_t sounds; // names of linked sounds
+ surfacegameprops_t game; // Game data / properties
+};
+
+class IPhysicsSurfaceProps
+{
+public:
+ virtual ~IPhysicsSurfaceProps( void ) {}
+
+ // parses a text file containing surface prop keys
+ virtual int ParseSurfaceData( const char* pFilename, const char* pTextfile ) = 0;
+ // current number of entries in the database
+ virtual int SurfacePropCount( void ) const = 0;
+
+ virtual int GetSurfaceIndex( const char* pSurfacePropName ) const = 0;
+ virtual void GetPhysicsProperties( int surfaceDataIndex, float* density, float* thickness, float* friction, float* elasticity ) const = 0;
+
+ virtual surfacedata_t* GetSurfaceData( int surfaceDataIndex ) = 0;
+ virtual const char* GetString( unsigned short stringTableIndex ) const = 0;
+
+ virtual const char* GetPropName( int surfaceDataIndex ) const = 0;
+
+ // sets the global index table for world materials
+ // UNDONE: Make this per-CPhysCollide
+ virtual void SetWorldMaterialIndexTable( int* pMapArray, int mapSize ) = 0;
+
+ // NOTE: Same as GetPhysicsProperties, but maybe more convenient
+ //virtual void GetPhysicsParameters(int surfaceDataIndex, surfacephysicsparams_t* pParamsOut) const = 0;
+}; \ No newline at end of file