diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/game/shared/sheetsimulator.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/game/shared/sheetsimulator.h')
| -rw-r--r-- | sp/src/game/shared/sheetsimulator.h | 426 |
1 files changed, 213 insertions, 213 deletions
diff --git a/sp/src/game/shared/sheetsimulator.h b/sp/src/game/shared/sheetsimulator.h index 76db74ab..aac523ef 100644 --- a/sp/src/game/shared/sheetsimulator.h +++ b/sp/src/game/shared/sheetsimulator.h @@ -1,213 +1,213 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef SHEETSIMULATOR_H
-#define SHEETSIMULATOR_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "mathlib/mathlib.h"
-#include "mathlib/vector.h"
-#include "utlvector.h"
-
-
-// Uncomment this for client-side simulation
-//#define CLIENT_SIDE_SIMULATION 1
-
-//-----------------------------------------------------------------------------
-// Simulates a sheet
-//-----------------------------------------------------------------------------
-
-class CGameTrace;
-typedef CGameTrace trace_t;
-//struct trace_t;
-typedef void (*TraceLineFunc_t)(const Vector &vecStart, const Vector &vecEnd,
- unsigned int mask, int collisionGroup, trace_t *ptr);
-typedef void (*TraceHullFunc_t)(const Vector &vecStart, const Vector &vecEnd,
- const Vector &hullMin, const Vector &hullMax,
- unsigned int mask, int collisionGroup, trace_t *ptr);
-
-
-class CSheetSimulator
-{
-public:
- CSheetSimulator( TraceLineFunc_t traceline, TraceHullFunc_t traceHull );
- ~CSheetSimulator();
-
- void Init( int w, int h, int fixedPointCount );
-
- // orientation
- void SetPosition( const Vector& origin, const QAngle& angles );
-
- // Makes a spring
- void AddSpring( int p1, int p2, float restLength );
- void AddFixedPointSpring( int fixedPoint, int p, float restLength );
-
- // spring constants....
- void SetPointSpringConstant( float constant );
- void SetFixedSpringConstant( float constant );
-
- // Used for both kinds of springs
- void SetSpringDampConstant( float damp );
- void SetViscousDrag( float drag );
-
- // Sets the collision group
- void SetCollisionGroup( int group );
-
- // Sets the bounding box used for collision vs world
- void SetBoundingBox( Vector& mins, Vector& maxs );
-
- // Computes the bounding box
- void ComputeBounds( Vector& mins, Vector& maxs );
-
- // simulation
- void Simulate( float dt );
- void Simulate( float dt, int steps );
-
- // get at the points
- int NumHorizontal() const;
- int NumVertical() const;
- int PointCount() const;
-
- // Fixed points
- Vector& GetFixedPoint( int i );
-
- // Point masses
- const Vector& GetPoint( int x, int y ) const;
- const Vector& GetPoint( int i ) const;
-
- // For iterative collision detection
- void DetectCollision( int i, float flOffset );
- void InitPosition( int i );
-
- // For offseting the control points
- void SetControlPointOffset( const Vector& offset );
-
- // Gravity
- void SetGravityConstant( float g );
- void AddGravityForce( int particle );
-
-protected:
- struct Particle_t
- {
- float m_Mass;
- Vector m_Position;
- Vector m_Velocity;
- Vector m_Force;
- int m_Collided;
- int m_CollisionPlane;
- float m_CollisionDist;
- };
-
- struct Spring_t
- {
- int m_Particle1;
- int m_Particle2;
- float m_RestLength;
- };
-
- inline int NumParticles() const
- {
- return m_HorizontalCount * m_VerticalCount;
- }
-
- // simulator
- void EulerStep( float dt );
- void ComputeControlPoints();
- void ClearForces();
- void ComputeForces();
- void TestVertAgainstPlane( int vert, int plane, bool bFarTest = true );
- void SatisfyCollisionConstraints();
- void DetermineBestCollisionPlane( bool bFarTest = true );
- void ClampPointsToCollisionPlanes();
-
- // How many particles horiz + vert?
- int m_HorizontalCount;
- int m_VerticalCount;
-
- // The particles
- Particle_t* m_Particle;
-
- // Output position after simulation
- Vector* m_OutputPosition;
-
- // fixed points
- int m_FixedPointCount;
- Vector* m_pFixedPoint;
- Vector* m_ControlPoints;
-
- CUtlVector<Spring_t> m_Springs;
- CUtlVector<int> m_Gravity;
-
- // raycasting methods
- TraceLineFunc_t m_TraceLine;
- TraceHullFunc_t m_TraceHull;
-
- // Spring constants
- float m_FixedSpringConstant;
- float m_PointSpringConstant;
- float m_DampConstant;
- float m_ViscousDrag;
-
- // Collision group
- int m_CollisionGroup;
-
- // position + orientation
- Vector m_Origin;
- QAngle m_Angles;
-
- // collision box
- Vector m_FrustumBoxMin;
- Vector m_FrustumBoxMax;
-
- // Collision planes
- cplane_t* m_pCollisionPlanes;
- bool* m_pValidCollisionPlane;
-
- // Control point offset
- Vector m_ControlPointOffset;
-
- // Gravity
- float m_GravityConstant;
-};
-
-
-//-----------------------------------------------------------------------------
-// Class to help dealing with the iterative computation
-//-----------------------------------------------------------------------------
-
-class CIterativeSheetSimulator : public CSheetSimulator
-{
-public:
- CIterativeSheetSimulator( TraceLineFunc_t traceline, TraceHullFunc_t traceHull );
-
- void BeginSimulation( float dt, int steps, int substeps, int collisionCount );
-
- // Returns true if it just did a simulation step
- bool Think( );
- bool IsDone() const { return m_SimulationSteps == 0; }
-
- int StepsRemaining( ) const { return m_SimulationSteps; }
-
-private:
- CIterativeSheetSimulator( const CIterativeSheetSimulator & ); // not defined, not accessible
-
- // Iterative collision detection
- void DetectCollisions( void );
-
- float m_TimeStep;
- float m_SubSteps;
- char m_TotalSteps;
- char m_SimulationSteps;
- char m_CollisionCount;
- char m_CurrentCollisionPt;
- bool m_InitialPass;
-};
-
-
-#endif // TF_SHIELD_SHARED_H
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef SHEETSIMULATOR_H +#define SHEETSIMULATOR_H +#ifdef _WIN32 +#pragma once +#endif + +#include "mathlib/mathlib.h" +#include "mathlib/vector.h" +#include "utlvector.h" + + +// Uncomment this for client-side simulation +//#define CLIENT_SIDE_SIMULATION 1 + +//----------------------------------------------------------------------------- +// Simulates a sheet +//----------------------------------------------------------------------------- + +class CGameTrace; +typedef CGameTrace trace_t; +//struct trace_t; +typedef void (*TraceLineFunc_t)(const Vector &vecStart, const Vector &vecEnd, + unsigned int mask, int collisionGroup, trace_t *ptr); +typedef void (*TraceHullFunc_t)(const Vector &vecStart, const Vector &vecEnd, + const Vector &hullMin, const Vector &hullMax, + unsigned int mask, int collisionGroup, trace_t *ptr); + + +class CSheetSimulator +{ +public: + CSheetSimulator( TraceLineFunc_t traceline, TraceHullFunc_t traceHull ); + ~CSheetSimulator(); + + void Init( int w, int h, int fixedPointCount ); + + // orientation + void SetPosition( const Vector& origin, const QAngle& angles ); + + // Makes a spring + void AddSpring( int p1, int p2, float restLength ); + void AddFixedPointSpring( int fixedPoint, int p, float restLength ); + + // spring constants.... + void SetPointSpringConstant( float constant ); + void SetFixedSpringConstant( float constant ); + + // Used for both kinds of springs + void SetSpringDampConstant( float damp ); + void SetViscousDrag( float drag ); + + // Sets the collision group + void SetCollisionGroup( int group ); + + // Sets the bounding box used for collision vs world + void SetBoundingBox( Vector& mins, Vector& maxs ); + + // Computes the bounding box + void ComputeBounds( Vector& mins, Vector& maxs ); + + // simulation + void Simulate( float dt ); + void Simulate( float dt, int steps ); + + // get at the points + int NumHorizontal() const; + int NumVertical() const; + int PointCount() const; + + // Fixed points + Vector& GetFixedPoint( int i ); + + // Point masses + const Vector& GetPoint( int x, int y ) const; + const Vector& GetPoint( int i ) const; + + // For iterative collision detection + void DetectCollision( int i, float flOffset ); + void InitPosition( int i ); + + // For offseting the control points + void SetControlPointOffset( const Vector& offset ); + + // Gravity + void SetGravityConstant( float g ); + void AddGravityForce( int particle ); + +protected: + struct Particle_t + { + float m_Mass; + Vector m_Position; + Vector m_Velocity; + Vector m_Force; + int m_Collided; + int m_CollisionPlane; + float m_CollisionDist; + }; + + struct Spring_t + { + int m_Particle1; + int m_Particle2; + float m_RestLength; + }; + + inline int NumParticles() const + { + return m_HorizontalCount * m_VerticalCount; + } + + // simulator + void EulerStep( float dt ); + void ComputeControlPoints(); + void ClearForces(); + void ComputeForces(); + void TestVertAgainstPlane( int vert, int plane, bool bFarTest = true ); + void SatisfyCollisionConstraints(); + void DetermineBestCollisionPlane( bool bFarTest = true ); + void ClampPointsToCollisionPlanes(); + + // How many particles horiz + vert? + int m_HorizontalCount; + int m_VerticalCount; + + // The particles + Particle_t* m_Particle; + + // Output position after simulation + Vector* m_OutputPosition; + + // fixed points + int m_FixedPointCount; + Vector* m_pFixedPoint; + Vector* m_ControlPoints; + + CUtlVector<Spring_t> m_Springs; + CUtlVector<int> m_Gravity; + + // raycasting methods + TraceLineFunc_t m_TraceLine; + TraceHullFunc_t m_TraceHull; + + // Spring constants + float m_FixedSpringConstant; + float m_PointSpringConstant; + float m_DampConstant; + float m_ViscousDrag; + + // Collision group + int m_CollisionGroup; + + // position + orientation + Vector m_Origin; + QAngle m_Angles; + + // collision box + Vector m_FrustumBoxMin; + Vector m_FrustumBoxMax; + + // Collision planes + cplane_t* m_pCollisionPlanes; + bool* m_pValidCollisionPlane; + + // Control point offset + Vector m_ControlPointOffset; + + // Gravity + float m_GravityConstant; +}; + + +//----------------------------------------------------------------------------- +// Class to help dealing with the iterative computation +//----------------------------------------------------------------------------- + +class CIterativeSheetSimulator : public CSheetSimulator +{ +public: + CIterativeSheetSimulator( TraceLineFunc_t traceline, TraceHullFunc_t traceHull ); + + void BeginSimulation( float dt, int steps, int substeps, int collisionCount ); + + // Returns true if it just did a simulation step + bool Think( ); + bool IsDone() const { return m_SimulationSteps == 0; } + + int StepsRemaining( ) const { return m_SimulationSteps; } + +private: + CIterativeSheetSimulator( const CIterativeSheetSimulator & ); // not defined, not accessible + + // Iterative collision detection + void DetectCollisions( void ); + + float m_TimeStep; + float m_SubSteps; + char m_TotalSteps; + char m_SimulationSteps; + char m_CollisionCount; + char m_CurrentCollisionPt; + bool m_InitialPass; +}; + + +#endif // TF_SHIELD_SHARED_H |