aboutsummaryrefslogtreecommitdiff
path: root/sp/src/game/shared/sheetsimulator.h
diff options
context:
space:
mode:
authorJørgen P. Tjernø <[email protected]>2013-12-02 19:31:46 -0800
committerJørgen P. Tjernø <[email protected]>2013-12-02 19:46:31 -0800
commitf56bb35301836e56582a575a75864392a0177875 (patch)
treede61ddd39de3e7df52759711950b4c288592f0dc /sp/src/game/shared/sheetsimulator.h
parentMark some more files as text. (diff)
downloadsource-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.h426
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