Counter Strike : Global Offensive Source Code
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 � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef ROPE_PHYSICS_H
#define ROPE_PHYSICS_H
#ifdef _WIN32
#pragma once
#endif
#include "simple_physics.h"
#include "networkvar.h"
class CRopeSpring { public: Vector *m_pNode1; Vector *m_pNode2; };
class CBaseRopePhysics : public CSimplePhysics::IHelper { public: DECLARE_CLASS_NOBASE( CBaseRopePhysics );
CBaseRopePhysics( CSimplePhysics::CNode *pNodes, int nNodes, CRopeSpring *pSprings, float *flSpringDistsSqr );
// nNodes should be less than or equal to what you passed into the constructor.
void SetNumNodes( int nNodes );
// Restart timers and such.
void Restart();
void ResetSpringLength(float flSpringDist ); float GetSpringLength() const; void ResetNodeSpringLength( int iStartNode, float flSpringDist );
// Set simulation parameters.
// If you pass in a delegate, you can be called to apply constraints.
void SetupSimulation( float flSpringDist, CSimplePhysics::IHelper *pDelegate=0 );
// Set the physics delegate.
void SetDelegate( CSimplePhysics::IHelper *pDelegate );
void Simulate( float dt ); int NumNodes() { return m_nNodes; } CSimplePhysics::CNode* GetNode( int iNode ) { return &m_pNodes[iNode]; } CSimplePhysics::CNode* GetFirstNode() { return &m_pNodes[0]; } CSimplePhysics::CNode* GetLastNode() { return &m_pNodes[ m_nNodes-1 ]; }
public:
virtual void GetNodeForces( CSimplePhysics::CNode *pNodes, int iNode, Vector *pAccel ); virtual void ApplyConstraints( CSimplePhysics::CNode *pNodes, int nNodes );
private:
int NumSprings() {return m_nNodes - 1;}
protected:
CSimplePhysics::IHelper *m_pDelegate; CSimplePhysics::CNode *m_pNodes; int m_nNodes;
CRopeSpring *m_pSprings;
float m_flSpringDist; float m_flSpringDistSqr;
// Spring lengths per node
float *m_flNodeSpringDistsSqr;
CSimplePhysics m_Physics; };
template< int NUM_NODES > class CRopePhysics : public CBaseRopePhysics { public:
CRopePhysics();
CSimplePhysics::CNode m_Nodes[NUM_NODES]; CRopeSpring m_Springs[NUM_NODES - 1]; float m_SpringDistsSqr[NUM_NODES - 1]; };
template< int NUM_NODES > CRopePhysics<NUM_NODES>::CRopePhysics() : CBaseRopePhysics( m_Nodes, NUM_NODES, m_Springs, m_SpringDistsSqr ) { }
#endif // ROPE_PHYSICS_H
|