mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 08:11:10 +02:00
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
#include "precompiled.h"
|
|
#pragma hdrstop
|
|
|
|
#include "prey_local.h"
|
|
|
|
CLASS_DECLARATION( idPhysics_RigidBody, hhPhysics_RigidBodySimple )
|
|
END_CLASS
|
|
|
|
/*
|
|
================
|
|
SimpleRigidBodyDerivatives
|
|
================
|
|
*/
|
|
void SimpleRigidBodyDerivatives( const float t, const void *clientData, const float *state, float *derivatives ) {
|
|
const hhPhysics_RigidBodySimple *p = (hhPhysics_RigidBodySimple *) clientData;
|
|
rigidBodyIState_t *s = (rigidBodyIState_t *) state;
|
|
// NOTE: this struct should be build conform rigidBodyIState_t
|
|
struct rigidBodyDerivatives_s {
|
|
idVec3 linearVelocity;
|
|
idMat3 angularMatrix;
|
|
idVec3 force;
|
|
idVec3 torque;
|
|
} *d = (struct rigidBodyDerivatives_s *) derivatives;
|
|
|
|
// derivatives
|
|
d->linearVelocity = p->inverseMass * s->linearMomentum;
|
|
d->angularMatrix.Zero();
|
|
//d->angularMatrix = SkewSymmetric( vec3_zero ) * s->orientation;
|
|
d->force = - p->linearFriction * s->linearMomentum + p->current.externalForce;
|
|
d->torque.Zero();
|
|
}
|
|
|
|
/*
|
|
================
|
|
hhPhysics_RigidBodySimple::hhPhysics_RigidBodySimple
|
|
================
|
|
*/
|
|
hhPhysics_RigidBodySimple::hhPhysics_RigidBodySimple() {
|
|
SAFE_DELETE_PTR( integrator );
|
|
integrator = new idODE_Euler( sizeof(rigidBodyIState_t) / sizeof(float), SimpleRigidBodyDerivatives, this );
|
|
}
|
|
|
|
/*
|
|
================
|
|
hhPhysics_RigidBodySimple::Integrate
|
|
================
|
|
*/
|
|
void hhPhysics_RigidBodySimple::Integrate( const float deltaTime, rigidBodyPState_t &next ) {
|
|
idPhysics_RigidBody::Integrate( deltaTime, next );
|
|
} |