Files
DoomRTX/neo/prey/Prey/physics_simple.cpp
2026-05-05 15:01:01 -07:00

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 );
}