mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 12:06:07 +08:00
First version of the SOurce SDK 2013
This commit is contained in:
146
game/server/physconstraint.h
Normal file
146
game/server/physconstraint.h
Normal file
@ -0,0 +1,146 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Physics constraint entities
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//===========================================================================//
|
||||
|
||||
#ifndef PHYSCONSTRAINT_H
|
||||
#define PHYSCONSTRAINT_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "vphysics/constraints.h"
|
||||
|
||||
struct hl_constraint_info_t
|
||||
{
|
||||
hl_constraint_info_t()
|
||||
{
|
||||
pObjects[0] = pObjects[1] = NULL;
|
||||
pGroup = NULL;
|
||||
anchorPosition[0].Init();
|
||||
anchorPosition[1].Init();
|
||||
swapped = false;
|
||||
massScale[0] = massScale[1] = 1.0f;
|
||||
}
|
||||
Vector anchorPosition[2];
|
||||
IPhysicsObject *pObjects[2];
|
||||
IPhysicsConstraintGroup *pGroup;
|
||||
float massScale[2];
|
||||
bool swapped;
|
||||
};
|
||||
|
||||
abstract_class CPhysConstraint : public CLogicalEntity
|
||||
{
|
||||
DECLARE_CLASS( CPhysConstraint, CLogicalEntity );
|
||||
public:
|
||||
|
||||
CPhysConstraint();
|
||||
~CPhysConstraint();
|
||||
|
||||
DECLARE_DATADESC();
|
||||
|
||||
void Spawn( void );
|
||||
void Precache( void );
|
||||
void Activate( void );
|
||||
|
||||
void ClearStaticFlag( IPhysicsObject *pObj );
|
||||
|
||||
virtual void Deactivate();
|
||||
|
||||
void OnBreak( void );
|
||||
|
||||
void InputBreak( inputdata_t &inputdata );
|
||||
|
||||
void InputOnBreak( inputdata_t &inputdata );
|
||||
|
||||
void InputTurnOn( inputdata_t &inputdata );
|
||||
|
||||
void InputTurnOff( inputdata_t &inputdata );
|
||||
|
||||
int DrawDebugTextOverlays();
|
||||
|
||||
void DrawDebugGeometryOverlays();
|
||||
|
||||
void GetBreakParams( constraint_breakableparams_t ¶ms, const hl_constraint_info_t &info );
|
||||
|
||||
// the notify system calls this on the constrained entities - used to detect & follow teleports
|
||||
void NotifySystemEvent( CBaseEntity *pNotify, notify_system_event_t eventType, const notify_system_event_params_t ¶ms );
|
||||
|
||||
// gets called at setup time on first init and restore
|
||||
virtual void OnConstraintSetup( hl_constraint_info_t &info );
|
||||
|
||||
// return the internal constraint object (used by sound gadgets)
|
||||
inline IPhysicsConstraint *GetPhysConstraint() { return m_pConstraint; }
|
||||
|
||||
string_t GetNameAttach1( void ){ return m_nameAttach1; }
|
||||
string_t GetNameAttach2( void ){ return m_nameAttach2; }
|
||||
|
||||
protected:
|
||||
void GetConstraintObjects( hl_constraint_info_t &info );
|
||||
void SetupTeleportationHandling( hl_constraint_info_t &info );
|
||||
bool ActivateConstraint( void );
|
||||
virtual IPhysicsConstraint *CreateConstraint( IPhysicsConstraintGroup *pGroup, const hl_constraint_info_t &info ) = 0;
|
||||
|
||||
IPhysicsConstraint *m_pConstraint;
|
||||
|
||||
// These are "template" values used to construct the hinge
|
||||
string_t m_nameAttach1;
|
||||
string_t m_nameAttach2;
|
||||
string_t m_breakSound;
|
||||
string_t m_nameSystem;
|
||||
float m_forceLimit;
|
||||
float m_torqueLimit;
|
||||
unsigned int m_teleportTick;
|
||||
float m_minTeleportDistance;
|
||||
|
||||
COutputEvent m_OnBreak;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Fixed breakable constraint
|
||||
//-----------------------------------------------------------------------------
|
||||
class CPhysFixed : public CPhysConstraint
|
||||
{
|
||||
DECLARE_CLASS( CPhysFixed, CPhysConstraint );
|
||||
public:
|
||||
IPhysicsConstraint *CreateConstraint( IPhysicsConstraintGroup *pGroup, const hl_constraint_info_t &info );
|
||||
|
||||
// just for debugging - move to the position of the reference entity
|
||||
void MoveToRefPosition()
|
||||
{
|
||||
if ( m_pConstraint )
|
||||
{
|
||||
matrix3x4_t xformRef;
|
||||
m_pConstraint->GetConstraintTransform( &xformRef, NULL );
|
||||
IPhysicsObject *pObj = m_pConstraint->GetReferenceObject();
|
||||
if ( pObj && pObj->IsMoveable() )
|
||||
{
|
||||
Vector pos, posWorld;
|
||||
MatrixPosition( xformRef, pos );
|
||||
pObj->LocalToWorld(&posWorld, pos);
|
||||
SetAbsOrigin(posWorld);
|
||||
}
|
||||
}
|
||||
}
|
||||
int DrawDebugTextOverlays()
|
||||
{
|
||||
if ( m_debugOverlays & OVERLAY_TEXT_BIT )
|
||||
{
|
||||
MoveToRefPosition();
|
||||
}
|
||||
return BaseClass::DrawDebugTextOverlays();
|
||||
}
|
||||
void DrawDebugGeometryOverlays()
|
||||
{
|
||||
if ( m_debugOverlays & (OVERLAY_BBOX_BIT|OVERLAY_PIVOT_BIT|OVERLAY_ABSBOX_BIT) )
|
||||
{
|
||||
MoveToRefPosition();
|
||||
}
|
||||
BaseClass::DrawDebugGeometryOverlays();
|
||||
}
|
||||
};
|
||||
|
||||
#endif // PHYSCONSTRAINT_H
|
||||
|
Reference in New Issue
Block a user